Здравсвтуйте, ситуація така: намагаюся обертати об'єкт навколо власної осі за допомогою стрілок. але при цьому змінюються значення Rotation тільки на 1 вказаний крок вліво або вправо. не розумію в чому проблема вже котра година. код нижче:
- void Update ()
- // запам'ятовуємо дане поле, для зручної оптимізації швидкості руху / обертання
- float speed = 1;
- // поворот вліво
- if (Input.GetKey (KeyCode.LeftArrow)) TurnPlatform (-speed);
- //поворот на право
- if (Input.GetKey (KeyCode.RightArrow)) TurnPlatform (speed);
- //рух вперед
- if (Input.GetKey (KeyCode.UpArrow)) MovePlatform (speed);
- // рух назад
- if (Input.GetKey (KeyCode.DownArrow)) MovePlatform (-speed);
- >
- // рух платформи
- void MovePlatform (float speed)
- float posX = gameObject.transform.position.x + speed;
- float posY = gameObject.transform.position.y;
- float posZ = gameObject.transform.position.z;
- gameObject.transform.position = new Vector3 (posX, posY, posZ);
- >
- // поворот платформи
- void TurnPlatform (float speed)
- // запам'ятовуємо поточну позицію, крім Y, якій присвоюємо поточну позицію +/- градус повороту
- float rotX = gameObject.transform.rotation.x;
- float rotY = gameObject.transform.rotation.y + speed;
- float rotZ = gameObject.transform.rotation.z;
- gameObject.transform.rotation = Quaternion.Euler (rotX, rotY, rotZ) ;;
- >
Paul Siberdt писал (а): [3] використання в параметрах функцій вже існуючих в скрипті імен змінних світить вам плутаниною. Як рішення - називайте, наприклад, їх з нижнім підкресленням: _speed
Дозволю собі висловити свою (і не тільки) точку зору. Є таке поняття, як Code Conventions - це угоди для конкретної мови про стилі написання коду. Вони є практично для кожної мови. Максимально строго вони оформлені для Java і C #. Для цих мов угоди написані не просто як набір рекомендацій, а як настійна набір рекомендацій для кожного аспекту стилю коду.
Так ось, про іменуванні змінних в Шарп (це не мій заклик слідувати цим правилами, а й моє имхо в тому числі):
- Публічні і захищені змінні починаються з великої літери і не використовують спецзнаків в собі (public int SomeValue;)
- Властивості не залежно від області видимості починаються з великої літери і не використовують спецсимволов в собі (private double SomeDouble)
- Приватний змінні всередині класу використовують знак підкреслення на початку і починаються з маленької літери і не використовують спецзнаків в інших місцях (private string _someString;)
- Локальні змінні починаються з маленької літери і не використовують спецзнаків в собі (public void SomeFunc ()).
Це не витяги з угоди, але короткий переказ.
Якщо ви поставите Решарпер але не відключіть підсвічування угод - то код буде пістрявити синіми підкресленнями. Це дратує, і це правильно (знову ж, имхо).
Але працювати туди-сюди з кватернионами, спираючись на евлерови кути небезпечно непередбачуваними артефактами.
Єдине, що можна робити більш-менш впевнено - створювати евлерови обертання по одній осі, отримувати їх кватерніони і вже використовувати далі виключно їх. Що, до речі, я і зробив в останньому [четвертому] пункті своєї відповіді.
Взагалі, я б не рекомендував гратися з ейлеровимі кутами, не розуміючи їх.
Варто кілька разів (краще - кіль днів поспіль перед сном) почитати це і це. Зрозуміло, якщо є бажання їх освоїти. Обережно, брейнфак (не в сенсі назви ЯП)!
Johnson з'явився в результаті поділу на null. Крівокодер-рецидивіст. Кусається.
Добре, що в лікарні хірурги не такі ж, як новачки на цьому форумі. Прийшов витягти цвях з руки, а вони яйця відрубали.
ProgrammerNotFoundException on line 0!