不使用刚体设置移动物体朝向其运动方向的方向

时间:2016-05-18 09:39:00

标签: c# unity3d

我有一个[573c17f8261b2bc76e228721, 573c0f20261b2bc76e22871e, 573c0eb4261b2bc76e22871d, etc to last id](相机)在样条线上移动(使用库)。我想设定它的运动方向。我的意思是,物体应该朝着它移动的方向看。我尝试了一些事情来实现这一点,但我没有成功。以下是我的尝试:

GameObject

我也试过这个

 transform.rotation = Quaternion.LookRotation(transform.position);

3 个答案:

答案 0 :(得分:1)

尝试

transform.rotation = Quaternion.LookRotation(transform.position - currentPosition);

其中currentPosition是您的游戏对象现在所在的样条线上的位置(在应用转换transform之前)。

请注意,Quaternion.LookRotation()并不期望该位置会被看到,而指示会改为寻找。请参阅documentationFAQ

答案 1 :(得分:1)

您走在正确的轨道上,但是您应该使用移动方向:transform.rotation = Quaternion.LookRotation(movementDirection),因为transform.forward已经是对象的方向。

如果您不知道/无法访问对象的当前移动方向,但您知道目标位置,则可以朝目标位置旋转:transform.rotation = Quaternion.LookRotation(targetPosition - transform.position)

答案 2 :(得分:1)

transform.position(空间中的一个点)和transform.forward(物体已朝向的方向)都不一定会为您提供物体移动的方向。

对于具有RigidBody的对象,您可以通过velocity变量访问它 - 但是因为它听起来像您使用的是专有样条库并且无法访问该对象的实际运动方向,您可能需要自己跟踪它。

最简单的解决方案(如果库实际上不提供移动信息)是每帧存储对象的当前位置和先前位置,并手动计算三角形位置(也就是帧之间的距离)来查找速度矢量。例如:

public class MovingObject : MonoBehaviour {
    private Vector3 prevPosition;

    void Start() {
        // Starting off last position as current position
        prevPosition = transform.position;
    }

    void Update() {
        // Calculate position change between frames
        Vector3 deltaPosition = transform.position - prevPosition;

        if (deltaPosition != Vector3.zero) {
            // Same effect as rotating with quaternions, but simpler to read
            transform.forward = deltaPosition;
        }
        // Recording current position as previous position for next frame
        prevPosition = transform.position;
    }
}

希望这有帮助!如果您有任何问题,请告诉我。