以恒定速度移动物体

时间:2015-10-04 09:39:45

标签: unity3d

美好的一天,我想以恒定速度向前移动我的Rigidbody2D对象,并在用户点击屏幕时改变方向。我有代码:

public float speed;

void FixedUpdate() 
{
    if(platform == RuntimePlatform.Android || platform == RuntimePlatform.IPhonePlayer){
        if(Input.touchCount > 0) {
            if(Input.GetTouch(0).phase == TouchPhase.Began){

            }
        }
    } else {
        if(Input.GetMouseButtonDown(0)) {
            var touchPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
            Quaternion rot = Quaternion.LookRotation (transform.position - touchPosition, Vector3.forward);
            transform.rotation = rot;
            transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z); // only z rotation
            myScriptRigidBody.velocity = (touchPosition - transform.position).normalized * speed;
        }
    }
}

据我所知,对象应该改变鼠标点击位置的方向并以恒定速度移动。但在实践中,对象的速度取决于用户在屏幕上点击的当前对象位置的距离。奇怪的是,bcs我将方向向量归一化,“速度”变量是常数。我究竟做错了什么? THX。

3 个答案:

答案 0 :(得分:1)

这个想法是当你点击某处时,对象将会旋转,你已经做过了。但速度不应取决于你点击的位置。

所以,速度是一样的。不要改变它。

myScriptRigidBody.velocity = speed;

这应该可以正常工作。

答案 1 :(得分:1)

您可以尝试Vector3.MoveTowards,并使用上次鼠标单击作为对象移动到的位置: - )

答案 2 :(得分:1)

问题是ScreenToWorldPoint返回的向量的z分量是摄像机z的位置。您只需要xy组件。

var touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
touchPosition = new Vector3(touchPosition.x,touchPosition.y,0);