Як поводиться в циклі

Здравсвтуйте, ситуація така: намагаюся обертати об'єкт навколо власної осі за допомогою стрілок. але при цьому змінюються значення Rotation тільки на 1 вказаний крок вліво або вправо. не розумію в чому проблема вже котра година. код нижче:

  1. void Update ()
  2. // запам'ятовуємо дане поле, для зручної оптимізації швидкості руху / обертання
  3. float speed = 1;
  4. // поворот вліво
  5. if (Input.GetKey (KeyCode.LeftArrow)) TurnPlatform (-speed);
  6. //поворот на право
  7. if (Input.GetKey (KeyCode.RightArrow)) TurnPlatform (speed);
  8. //рух вперед
  9. if (Input.GetKey (KeyCode.UpArrow)) MovePlatform (speed);
  10. // рух назад
  11. if (Input.GetKey (KeyCode.DownArrow)) MovePlatform (-speed);
  12. >
  13. // рух платформи
  14. void MovePlatform (float speed)
  15. float posX = gameObject.transform.position.x + speed;
  16. float posY = gameObject.transform.position.y;
  17. float posZ = gameObject.transform.position.z;
  18. gameObject.transform.position = new Vector3 (posX, posY, posZ);
  19. >
  20. // поворот платформи
  21. void TurnPlatform (float speed)
  22. // запам'ятовуємо поточну позицію, крім Y, якій присвоюємо поточну позицію +/- градус повороту
  23. float rotX = gameObject.transform.rotation.x;
  24. float rotY = gameObject.transform.rotation.y + speed;
  25. float rotZ = gameObject.transform.rotation.z;
  26. gameObject.transform.rotation = Quaternion.Euler (rotX, rotY, rotZ) ;;
  27. >

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!

Схожі статті