Как вращать 3d объект, проводя? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть горизонтальный цилиндр в моей сцене, и я хочу повернуть его (по оси 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 голосов
/ 21 ноября 2018

Используете ли вы сенсорное или мышь, когда тестируете это перелистывание?

Сенсорное работает только для касаний, а не щелчков мышью.

Вы пытались использовать ввод с помощью мыши, чтобы переместить его?

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);
        }
    }
}
0 голосов
/ 21 ноября 2018

Не используйте Cylinder в качестве имени вашей переменной, потому что это имя класса для примитива Unity:

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

Редактировать: Как говорит Стейн,код будет работать, но это плохая практика - называть переменные точно такими же, как имя некоторого класса.

Так что, если вы замените имя вашей переменной, например, на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...