怪物旋转

怪物追击时朝向角色。

public class Monster : MonoBehaviour
{
    public float MoveSpeed;

    Vector3 _offset;
    Vector3 _offsetRotate;
    GameObject _player;
    // Start is called before the first frame update
    Vector3 _oldRotate;

    Rigidbody2D _rig;

    void Start()
    {
        MoveSpeed = 0.5f;
        _player = GameObject.Find("player");
        _rig = gameObject.GetComponent<Rigidbody2D>();

        _oldRotate = -transform.up;
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void FixedUpdate()
    {
        pursue();
    }

    // 追击
    void pursue()
    {
        _offset = _player.transform.position - transform.position;
        _rig.MovePosition(transform.position += _offset.normalized * MoveSpeed * Time.deltaTime);

        // 旋转朝向
        float angle = Vector2.Angle(_offset, _oldRotate);
        //_rig.MoveRotation(new Quaternion(0, 0, angle));
        transform.Rotate(0, 0, angle);
        _oldRotate = _offset;

        //transform.RotateAround(transform.position, transform.forward, angle);

        //_offsetRotate = Vector3.RotateTowards(new Vector3(1, 1, 0), _offset, 5 * Time.deltaTime, 0);
        //transform.rotation = Quaternion.LookRotation(_offsetRotate);      
    }
}

_oldRotate记录怪物当前的角度,计算需要旋转的角度,进行旋转,这里还有点问题,怪物只会朝顺时针方向旋转。比如都是顺时针旋转,如果主角突然变逆时针了,怪物还是顺时针在转。

因为angle取的值是0~180。

解决办法如下,判断角度根据正交取的方向,方向变的话角度就变。

效果如下:

最后更新于