如何通过滑动旋转三维对象



我的场景中有一个水平圆柱体,我想通过左右滑动来旋转它(在z轴上(,我已经创建了这个脚本,但它不起作用,你能告诉我问题在哪里吗?

public class SwipeControl : MonoBehaviour {
public Transform Cylinder;
void Update()
{
if (Input.touchCount == 1)
{
// GET TOUCH 0
Touch touch0 = Input.GetTouch(0);
// APPLY ROTATION
if (touch0.phase == TouchPhase.Moved)
{
Cylinder.transform.Rotate(0f, 0f, touch0.deltaPosition.x);
}
}
}
}

在测试这种滑动时,您使用的是触摸还是鼠标?

触摸只适用于触摸,而不适用于鼠标点击。

你试过用鼠标输入来移动它吗?

public class SwipeControl : MonoBehaviour {
public Transform cylinder;
private float sensitivity = 10f;
void Update()
{
if (Input.GetMouseButton(0))
{
float xAxis = Input.GetAxis("Mouse X");
cylinder.Rotate(0, -xAxis * sensitivity * Time.deltaTime, 0);
}
}
}

不要使用Cylinder作为变量的名称,因为它是Unity原语的类名:

https://docs.unity3d.com/ScriptReference/PrimitiveType.Cylinder.html

编辑:正如Stijn所说,代码会起作用,但将变量命名为与某个类名完全相等是一种糟糕的做法

因此,例如,如果您将变量的名称替换为myCylinder,那么您的代码现在看起来是这样的:

public class SwipeControl : MonoBehaviour {
public Transform myCylinder;
void Update()
{
if (Input.touchCount == 1)
{
// GET TOUCH 0
Touch touch0 = Input.GetTouch(0);
// APPLY ROTATION
if (touch0.phase == TouchPhase.Moved)
{
myCylinder.transform.Rotate(Vector3.Right, touch0.deltaPosition.x, Space.World);
}
}
}
}

告诉我更改名称并从编辑器中设置引用是否有效。

编辑:注意Rotate函数,如果您要输入3个参数,它们应该是Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);

因此,您当前正在应用0度差!

以下是指向Rotate函数的文档链接,以及您可以使用的所有不同的构造函数和重载方法:

https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

最新更新