我正在尝试将我的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;
}
}
}
有关如何实施轮换的任何建议?我完全被难倒了
答案 0 :(得分:2)
您可以使用三角函数来完成。你需要3个参考点,幸运的是你已经有了两个参考点。
需要的点数:
计算从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轴上