我的场景中有一个水平圆柱,我想通过左右滑动来旋转它(在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);
}
}
}
}
答案 0 :(得分:1)
请勿使用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
答案 1 :(得分:1)
在测试此笔划时,您使用的是触摸还是鼠标?
触摸仅适用于触摸,不适用于鼠标单击。
您是否尝试过使用鼠标输入来移动它?
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);
}
}
}