[英]Rotating gameobject using touch in Unity 3d with C#
我正在基于2指触摸旋转GameObject。 我的旋转工作正常,但是遇到一个奇怪的问题,有时我会用两根手指触摸以开始旋转,但是一旦触摸屏幕,对象就会立即旋转。 它何时执行似乎是随机的,并且轮换也似乎是随机的。 我以为触摸会触发基于最后一个位置的旋转,但是我的代码应该重置开始位置。
触摸代码位于附加到对象上的脚本中以进行旋转,因此全部都在一个文件中。
这是代码。
在Update方法中,我检测到它支持触摸,并尝试调用“ HandleTouch()”
void Update()
{
if (Input.touchSupported)
HandleTouch();
else
HandleMouse();
}
HandleTouch方法
private void HandleTouch()
{
if (Input.touchCount < 2) return;
switch (Input.touchCount)
{
case 2:
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
lastRotPosition = touch.position;
}
else if (touch.phase == TouchPhase.Moved)
{
Vector3 offset = touch.position - lastRotPosition;
lastRotPosition = touch.position;
RotateCamera(offset.x * RotateSpeedTouch, offset.y * RotateSpeedTouch);
}
else if (touch.phase == TouchPhase.Ended)
{
lastRotPosition = new Vector2();
}
break;
}
}
这是旋转GameObject的方法
void RotateCamera(float x, float y)
{
float rotX = x * rotateSpeed * Mathf.Deg2Rad;
float rotY = y * rotateSpeed * Mathf.Deg2Rad;
transform.Rotate(Vector3.up, rotX);
transform.Rotate(Vector3.right, -rotY);
}
感谢您提供的任何帮助或见解。
fingerId
由于触摸可能不会以相同的顺序存储:
此外,设备可以检测到帧更新之间的触摸连续性,因此可以跨帧报告一致的ID号 ,并将其用于确定特定手指的移动方式。
...
fingerId
属性可用于识别帧之间的相同触摸。
因此,当新手指触摸屏幕时,您的代码可能会看到以下内容:
TouchPhase.Moved
lastRotPosition
当前为零(由于默认值或由于先前的TouchPhase.Ended
) touch.position - lastRotPosition
计算结果为非零(发生大旋转) 当它正常工作时,您得到以下信息:
TouchPhase.Begin
lastRotPosition
已更新为触摸的位置 touch.position - lastRotPosition
评估为接近零(发生小的旋转)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.