我是Unity的新手 . 我希望根据移动的用户触摸旋转我的2D对象(在屏幕上移动手指) . 我有这个代码:
void Update ()
{
if (Input.touches.Length > 0) {
t = Input.GetTouch (0);
if (t.phase == TouchPhase.Moved) {
Vector3 movePos = new Vector3 (t.position.x, t.position.y, 0);
var objectPos = Camera.main.WorldToScreenPoint (transform.position);
var dir = movePos - objectPos;
transform.rotation = Quaternion.Euler (new Vector3 (0f, 0f, Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg));
}
}
}
该代码基于用户触摸旋转对象,但是当我在另一个位置再次触摸屏幕并进行触摸移动时,它将整个对象旋转到实际触摸,然后它将基于触摸移动进行正确的对象旋转 .
而且我不想根据触摸位置旋转整个对象,而只是根据触摸移动旋转对象 . 你了解我吗?你能帮助我吗?我该如何重写代码?
2 回答
如果我了解你,请尝试使用以下代码:
如果你想要的话,请告诉我 . 此外,这里有一个完整的示例:https://github.com/joaokucera/unity-2d-object-rotation
调查使用deltaPosition而不是触摸位置 . 那会让你朝着正确的方向前进 .
编辑:
这是与您现有代码的可能集成 . 我在这台PC上没有Unity,所以这完全没有经过测试 . 主要思想是你正在改变帧之间的手指位置 . 然后,您可以通过移动速度来缩放该更改,当然还有帧渲染之间的时间变化(增量时间) .
对象如何相对于该信息旋转取决于您 . 我刚刚将逻辑插入到您现有的代码中 .