Показать сообщение отдельно
Старый 13.02.2016, 19:57   #2294
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Обычно ты можешь просто запомнить угол и его менять в отдельной флоат переменной, а потом применять вращение к барабану (transfrom.eulerAngles = new Vector3(angle, 0,0) или transform.rotation = Quaternion.Euler(angle, 0,0)). Это самый простой и верный способ.

Ну а в целом я бы на твоем месте считал бы угол между осью, перпендикулярной к оси барабана (Например Vector3.up, если ось барабана это Vector3.right) и такой же осью на самом барабане (например transform.up) с помощью Vector3.Angle. Это будет угол 0..180. Знак угла можно определить через векторное произведение up векторов. Далее можно так же получить угол между векторами Vector3.right и полученным с помощью векторного произведения вектором, если угол < 90 градусов (вектора смотрят примерно в одну сторону), то это один знак, если больше, то другой (вектора смотрят в разные стороны). Потом с полученным знаком угол будет -180..180 и его можешь использовать. Так можно решить задачу при произвольной ориентации барабана, если знать направления осей.

UPD: Описал чуть более понятно. И к сведению - Unity не работает с углами Эйлера, вращение в Unity хранится в кватернионе и по требованию (transform.eulerAngles) кватернион преобразуется в углы Эйлера. Поэтому они часто не имеют значения 180-360 и т.д а имеют значения в диапазоне -90..90 и подобные, но в целом могут быть разные, т.к. конвертация кватерниона в углы Эйлера не может дать гарантии преобразования в угол например 720 (два оборота).
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием