Ограниченное вращение

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ограниченное вращение

Сообщение stationfuk 20 фев 2013, 12:02

День добрый. Такая ситуация: двигаем мышкой, нужно, чтобы upbody вращался свободно по горизонтали(работает), а upbodyConnecter вращался только по вертикали от 0.0 до -0.1. Были мысли:
1) Если upbodyConnecter.rotation.x за пределами значений - начинаем вращать в обратную сторону. Результат - дёргается сильно.
2) Если upbodyConnecter.rotation.x за пределами значений - возвращаем в ближайшее доступное значение. Результат - опять дёргается.
Какие есть возможные решения такой проблемы(чтобы не дергалось и не залипало в одной позиции(тоже было))? Код прикладываю.

Синтаксис:
Используется csharp
        public float horizontalSpeed = 7.0f;    //Скорость вращения камеры по X
        public float verticalSpeed = 7.0f;      //Скорость вращения камеры по Y
        public Transform upbody;                //Префаб башни
        public Transform upbodyConnecter;       //Префаб соединения башни с ногами

        void Update () {
        float h = horizontalSpeed * Input.GetAxis ("Mouse X");
        float v = verticalSpeed * Input.GetAxis ("Mouse Y");
                if (upbodyConnecter.rotation.x<=0.0&upbodyConnecter.rotation.x>=-0.10)
                {
                        upbodyConnecter.Rotate(-v, 0, 0);
                }
                else
                {
                        if (upbodyConnecter.rotation.x>=0.0) upbodyConnecter.rotation = new Quaternion(0.0f,upbodyConnecter.rotation.y,upbodyConnecter.rotation.z,upbodyConnecter.rotation.w);
                        if (upbodyConnecter.rotation.x<=-0.1) upbodyConnecter.rotation = new Quaternion(-0.1f,upbodyConnecter.rotation.y,upbodyConnecter.rotation.z,upbodyConnecter.rotation.w);
                }
                Debug.Log(upbodyConnecter.rotation.x);
                upbody.Rotate(0, h, 0);
                ...
        }
 
stationfuk
UNец
 
Сообщения: 43
Зарегистрирован: 20 фев 2013, 11:43
Откуда: Екатеринбург

Re: Ограниченное вращение

Сообщение AMD 20 фев 2013, 12:14

Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Ограниченное вращение

Сообщение stationfuk 20 фев 2013, 19:37

Посмотрел, получилось как-то так:
Синтаксис:
Используется csharp
        public float horizontalSpeed = 7.0f;    //Скорость вращения камеры по X
        public float verticalSpeed = 7.0f;      //Скорость вращения камеры по Y
        public Transform upbody;                //Префаб башни
        public Transform upbodyConnecter;       //Префаб соединения башни с ногами

        void Update () {
        float h = horizontalSpeed * Input.GetAxis ("Mouse X");
        float v = verticalSpeed * Input.GetAxis ("Mouse Y");
        upbodyConnecter.rotation = new Quaternion(Mathf.Clamp(-v, -0.1f, 0.1f),upbodyConnecter.rotation.y,upbodyConnecter.rotation.z,upbodyConnecter.rotation.w);
        Debug.Log(upbodyConnecter.rotation.x);
        upbody.Rotate(0, h, 0);
                ...
        }
 

Однако, в таком случае, значение v выходит только -0.1 или 0.1, без промежуточных. Что неверно в моём подходе?
stationfuk
UNец
 
Сообщения: 43
Зарегистрирован: 20 фев 2013, 11:43
Откуда: Екатеринбург

Re: Ограниченное вращение

Сообщение AMD 20 фев 2013, 20:13

Попробуйте в таком духе:

Синтаксис:
Используется csharp
_slopeAxisMouseVert = Input.GetAxis("Mouse Y");



_speedRotationY -= _slopeAxisMouseVert * 5f * _sensetivityMouse;
_speedRotationY = Mathf.Clamp(_speedRotationY, -90f, 90f);
 


То есть произвести обрезку изменяемого параметра, а уже потом вставить его в формулу
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Re: Ограниченное вращение

Сообщение stationfuk 20 фев 2013, 20:43

Действительно, вынос Mathf.Clamp в отдельный оператор помог. Спасибо!
stationfuk
UNец
 
Сообщения: 43
Зарегистрирован: 20 фев 2013, 11:43
Откуда: Екатеринбург


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31