如何通过滑动旋转3d对象?

时间:2018-11-21 14:20:26

标签: c# unity3d

我的场景中有一个水平圆柱,我想通过左右滑动来旋转它(在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);
            }

        }
    }
}

2 个答案:

答案 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);
        }
    }
}