2015-08-02 3 views
1

Какова фактическая разница между двумя доступными перегрузками метода transform.Rotate?В чем разница между методами transform.Rotate?

Одна версия использует поплавки для своих параметров, а другая использует Vector3, который, как представляется, использует те же параметры.

Есть ли предпочтительная/лучшая практика/лучший вариант выполнения между ними? Документация на самом деле не говорит так или иначе.

transform.Rotate (new Vector3(0, Input.GetAxis("Mouse X") * sensitivityHor, 0)); 
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0); 
+0

Используйте тот, который наиболее удобен для текущего кода. Несомненно, кто-то называет другого, но мы сознательно не говорим, как это работает, потому что это внутренняя реализация, не имеющая отношения к правильному функционированию методов. –

ответ

2

Они одинаковы. Я предлагаю выбрать тот, который облегчает чтение кода: если у вас есть вектор, который вы можете использовать (например, угловая скорость), используйте этот вектор; если у вас есть поплавок для каждой оси (например, движение мыши), используйте ту, которая принимает три поплавка. Это вопрос того, что будет наиболее читаемым для вас, когда вы вернетесь к этому коду, пытаясь исправить ошибку.

+0

Спасибо - это то, что я искал. В приведенном выше примере контекст находился в движении мыши и вращении объекта (как вы, вероятно, выяснили, учитывая указанные аргументы), а причины использования одного и другого имеют общий смысл. –

0

Оба поворота методы почти такой же, но очень разные:

Метод

public void Rotate(float xAngle, float yAngle, float zAngle); 

берет в трех «углов» и повернуть объект в направлении предусмотренных углов.

наоборот метод

public void Rotate(Vector3 axis, float angle); 

переводит вектор, определяющий ось вращения и поплавком, определяющего угол (сколько вы хотите, чтобы повернуть его?). Например, если вы установили axis на new Vector3(0f, 0f, 1f); и установили angle на 15f, способ поворота повернет объект на 15 градусов только по оси z. Этот метод rotate будет проверять только, какая ось в параметре axis имеет значение больше 0 и вращать объект только по этой оси.

+0

Также, если вы установите параметр 'axis' для' new Vector3 (0, 0, 3) ', этот метод поворота по-прежнему будет считать, что пользователь хочет вращаться вокруг оси z и не будет использовать' 3f' как множитель вращения. –

+0

Второй метод 'Rotate', который вы выбрали, был неправильным: asker использует' public void Rotate (Vector3 eulerAngles) ', а не ось-угол. – 31eee384

Смежные вопросы