Vector Unity3D-基于移动的触摸的二维对象旋转(触摸之间的差异)
我是Unity的新手。我想根据移动的用户触摸(屏幕上移动的手指)旋转我的2D对象。我有以下代码:Vector Unity3D-基于移动的触摸的二维对象旋转(触摸之间的差异),vector,rotation,unity3d,Vector,Rotation,Unity3d,我是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.
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));
}
}
}
此代码基于用户触摸旋转对象,但当我再次在另一个位置触摸屏幕并进行触摸移动时,它会将整个对象旋转到实际触摸,然后根据触摸移动进行正确的对象旋转
我不想基于触摸位置旋转整个对象,但只基于触摸移动旋转对象。你明白我的意思吗?你能帮助我吗?如何重写代码?如果我理解您的意思,请尝试使用以下代码:
private float turnSpeed = 5f;
private Vector2 movement;
void Update()
{
Vector2 currentPosition = transform.position;
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Moved)
{
Vector2 moveTowards = Camera.main.ScreenToWorldPoint(touch.position);
movement = moveTowards - currentPosition;
movement.Normalize();
}
}
float targetAngle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, targetAngle), turnSpeed * Time.deltaTime);
}
让我知道这是否是你想要的。此外,这里还有一个完整的示例:查看使用而不是触摸屏上的位置。这会让你走上正确的方向
var movedVector = t.deltaPosition;
编辑:
下面是与现有代码的可能集成。我没有统一在这台电脑上,所以这是完全未经测试。主要的想法是在帧之间改变手指的位置。然后,通过移动速度以及帧渲染之间的时间变化(增量时间)来缩放该变化
对象如何相对于该信息旋转取决于您。我刚刚将逻辑插入到您现有的代码中
float moveSpeed = 2.0f;
void Update ()
{
if (Input.touches.Length > 0) {
t = Input.GetTouch (0);
if (t.phase == TouchPhase.Moved) {
var delta = t.deltaPosition * moveSpeed * Time.deltaTime;
transform.rotation = Quaternion.Euler (new Vector3 (0f, 0f, Mathf.Atan2 (delta .y, delta.x) * Mathf.Rad2Deg));
}
}
}
这不是我想要的。当我触摸屏幕时,它会将对象旋转到触摸屏上,但我不知道是什么将对象旋转到触摸屏上。我只想旋转对象,因为在触摸移动之间是不同的(可能是触摸之间的增量?)。你明白吗?你能告诉我应该如何使用它吗?我该怎么办?太多了!