在2D空间中将旋转转换为移动方向

时间:2014-09-09 18:31:26

标签: c# unity3d rotation 2d gameobject

我正在尝试将我的GameObject旋转到面向它正在移动的方向。我没有使用Rigidbody.Velocity,我只是使用transform.position来移动对象。这是我的代码:

public GameObject player;

void Update () 
{
    Vector3 _origPos = new Vector3(player.transform.position.x,player.transform.position.y, player.transform.position.z);

    if (Input.touchCount > 0) 
    {
        // The screen has been touched so store the touch
        Touch touch = Input.GetTouch(0);
        if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
            // If the finger is on the screen, move the object smoothly to the touch position
            Vector3 touchPosition = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10));                
            transform.position = Vector3.Lerp(transform.position, touchPosition, Time.deltaTime);
            //transform.LookAt(new Vector3(touchPosition.x,touchPosition.y,0), Vector3.up);
            Vector3 moveDirection = gameObject.transform.position - _origPos; 

        }
    }
}

有关如何实施轮换的任何建议?我完全被难倒了

3 个答案:

答案 0 :(得分:2)

您可以使用三角函数来完成。你需要3个参考点,幸运的是你已经有了两个参考点。

需要的点数:

  • A)你要搬家的地方。
  • B)质心的当前位置。
  • C)对象的尖端,正面。

计算从B到C的距离,称之为x。然后计算从B到A的距离,称之为y。

现在使用反正切来找到角度。

angle = arctan(y/x)

然后将其应用于对象的旋转。

使用世界坐标而不是本地坐标。

如果您使用Mathf进行反正切,请记住它使用弧度。

答案 1 :(得分:0)

我认为您可以使用Quaternion.LookRotation来定位转换。

类似的东西:

Quaternion rotation = Quaternion.LookRotation(moveDirection);
player.transform.rotation = rotation;

使用您的代码进行快速测试,并且假设player GameObject前向方向是Z.

答案 2 :(得分:0)

这在我的2D游戏中对我有了预期的效果。

 transform.LookAt(new Vector3(touchPosition.x,touchPosition.y,transform.position.z), Vector3.up); 

我使用对象自己的position.z而不是touchPosition.z,以便它保持在2D轴上