C# 使用C在Unity 3d中使用触摸旋转游戏对象
我正在旋转一个基于2个手指触摸的游戏对象。我的旋转工作正常,但我遇到了一个奇怪的问题,有时我会用两个手指触摸开始旋转,但只要我触摸屏幕,物体就会立即旋转。这似乎是随机的,当它这样做,旋转也似乎是随机的。我认为触摸触发了基于最后一个位置的旋转,但我的代码应该是重置开始位置 触摸代码在附加到要旋转的对象的脚本中,因此它都在一个文件中 这是密码 在更新方法中,我检测到它支持触摸,并尝试调用HandleTouchC# 使用C在Unity 3d中使用触摸旋转游戏对象,c#,android,unity3d,touch,C#,Android,Unity3d,Touch,我正在旋转一个基于2个手指触摸的游戏对象。我的旋转工作正常,但我遇到了一个奇怪的问题,有时我会用两个手指触摸开始旋转,但只要我触摸屏幕,物体就会立即旋转。这似乎是随机的,当它这样做,旋转也似乎是随机的。我认为触摸触发了基于最后一个位置的旋转,但我的代码应该是重置开始位置 触摸代码在附加到要旋转的对象的脚本中,因此它都在一个文件中 这是密码 在更新方法中,我检测到它支持触摸,并尝试调用HandleTouch void Update() { if (Input.touchSupported)
void Update()
{
if (Input.touchSupported)
HandleTouch();
else
HandleMouse();
}
手触法
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;
}
}
感谢您提供的任何帮助或见解。您没有跟踪
因为触摸可能不会以相同的顺序存储:
此外,设备可以检测帧更新之间的触摸的连续性,因此可以跨帧报告一致的ID号,并用于确定特定手指如何移动
…fingerId属性可用于识别帧之间的相同触摸
因此,当新手指触摸屏幕时,您的代码可能会看到:
第一个手指触摸,触摸计数1,跳过代码
第二个手指触摸,它是阵列中的第二个手指,触摸计数2,开始处理:
第一次触摸的相位为TouchPhase.Moved
由于默认值或之前的TouchPhase,lastRotPosition当前为零。结束
touch.position-lastRotPosition计算为非零大旋转
当它正常工作时,您会得到以下结果:
第一个手指触摸,触摸计数1,跳过代码
第二个手指触摸,它是阵列中的第一个手指,触摸计数2,开始处理:
第一次触摸具有阶段触摸阶段。开始
lastRotPosition将更新到触摸的位置
下一帧touch.position-lastRotPosition计算为接近零的小旋转
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);
}