Детская коляска
|
|
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 17:51 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Есть такой юнит (надеюсь все представляют как выглядит и ездит оная) надо сделать что бы она НЕ наклонялась Более чем на 30 градусов в любом направлении и тем более НЕ переворачивалась. Сломал голову но не придумал как реализовать такое. Перерыл интернет но так и не нашёл ничего про это. Есть несколько объяснений. Первое - это настолько элементарно что ни кто даже не упоминают о решении такой задачи. Второе - это не возможно решить в принципе, хотя в танках они почему то ни разу не переворачиваются. Может на Юнити нет способа Третье - это сверх секретная и ОЧЕНЬ дорогая фича, и все кто знает как, ждут покупателя. Ну и.... и всё же кто сможет помочь? Модель примитивная брусок с коллайдером таскается волоком посредством РиджитБади.
Код Vector3 r; // ----- Поворот r = Navigator.transform.eulerAngles - orientationBot.eulerAngles; r.x = 0; r.z = 0; transform.Rotate(r);
// ---- Движение Vector3 p = Navigator.transform.position; p.y = transform.position.y; botRigidbody.MovePosition(p);
|
|
| |
seaman | Дата: Воскресенье, 09 Июля 2017, 18:21 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Constraints https://docs.unity3d.com/Manual/class-Rigidbody.html
|
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 19:31 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| К чему это? Мануал по Rigidbody я читал, и как он мне поможет ограничить наклон коляски до определённого угла? Надо к примеру чтоб до 35 градусов она наклонялась нормально, а если угол наклона превышает 35 то скрипт должен останавливать наклон. И это должно быть по кругу. Да Rigidbody может заморозить наклон но как будет выглядеть коляска стоящая горизонтально на наклонном пандусе
Добавлено (09 июля 2017, 19:31) --------------------------------------------- С того же пандуса коляска резво скатывается при этом её трясёт и подпрыгивает, и заметьте ВСЕГДА падает или даже переворачивается в момент выезда на ровную поверхность. А иногда и раньше. нужно чтобы сохраняла положение даже при прыжке с высоты
Сообщение отредактировал Kot-Matroskin - Воскресенье, 09 Июля 2017, 19:35 |
|
| |
EchoIT | Дата: Воскресенье, 09 Июля 2017, 19:48 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Kot-Matroskin, видео сделайте.
Долгожданный анонсик: State of War
|
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 20:18 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Видео как брусок (съезжая) СПРЫГИВАЯ с края обрыва кувыркается в полёте и падает как попало?
Добавлено (09 июля 2017, 20:14) --------------------------------------------- Надо чтобы он упал на колёса (как кошка на лапы) да и не кувыркался, только свободный наклон до 30 градусов (сколько задаш в общем)
Добавлено (09 июля 2017, 20:18) --------------------------------------------- Я давно пытаюсь найти, но так и не смог. Там я так понимаю надо как то с кватернионами оперировать свободно уметь. увы мат аппарат на уровне 2 + 2
Сообщение отредактировал Kot-Matroskin - Понедельник, 10 Июля 2017, 09:56 |
|
| |
_@NEMO@_ | Дата: Воскресенье, 09 Июля 2017, 21:39 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| центр массы сделай в три раза ниже поверхности (как жираф перевернутый)
Музыкант аранжировщик.
https://vk.com/ge_ne_tick Мой паблик ВКонтакте.
|
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 23:02 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Это уже опробовано, лажа выходит, нельзя сильно низко делать, качается как качели не остановишь, да и когда сильно низко не едет. да и не решение
|
|
| |
flatingo | Дата: Понедельник, 10 Июля 2017, 07:56 | Сообщение # 8 |
участник
Сейчас нет на сайте
| ТС, есть элементарный способ (если я правильно понял задачу). Подключи компонент Hinge Joint, выстави просто границы наклона (центр еще не забудь) и все. По крайней мере в 2D это работает хорошо.
когда-то я уйду в web3
|
|
| |
Kot-Matroskin | Дата: Пятница, 21 Июля 2017, 09:39 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Нет, не в тему, там два риджитбади объекта связываются посредством шарнирного соединения, и к свободному вращению тела в падении не имеют отношения. Ну я уже писал (очень давно) Есть такая игрушка неваляшка мне надо почти такое.Добавлено (10 июля 2017, 13:55) --------------------------------------------- ПС. Простой физикой не выйдет однозначно, надо скриптами контролировать Добавлено (10 июля 2017, 16:18) --------------------------------------------- Сколько не пытался придумать, дальше этого не пошло
Код Rigidbody rb; public Transform _sample; // Образец для подражания public Transform _baseOfColumn; // Пустышка в основании столбика с риджит бади public float _angle; // Угол между образцом и столбиком // Use this for initialization void Start() { rb = _baseOfColumn.GetComponent<Rigidbody> ( ); }
// Update is called once per frame void FixedUpdate() { Quaternion _base = _baseOfColumn.rotation; Quaternion _smpl = _sample.rotation; _angle = Quaternion.Angle(_base, _smpl); if (_angle > 40) { // Этот вариант ведёт себя очень странно transform.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);
// В этом прыгает всё время хотя и не падает _baseOfColumn.rotation = Quaternion.Slerp(_base, _smpl, 0.5f);
// И в этом тоже прыгает всё время и тоже не падает rb.rotation = Quaternion.LerpUnclamped(_base, _smpl, 1f);
// И в этом тоже прыгает всё время и тоже не падает rb.MoveRotation(Quaternion.LerpUnclamped(_base, _smpl, 1f)); //
}
}
Добавлено (21 июля 2017, 09:39) --------------------------------------------- Всем спасибо за участие, пришлось самому помудрить и почитать, и вот что в итоге получилось, если кому будет интересно вот видео Видео а вот и сам код
Код Transform TransformTestCube; float rotateAxisZ; float rotateAxisX; public Text infoText; string str = ""; public Transform AxisOfRotation; public float speedR = 10f; public bool stabilizationIsEnabled; public float limitAngle = 30f; private Vector3 eulerAng;
// Use this for initialization void Start() { TransformTestCube = transform; }
// Update is called once per frame void FixedUpdate() { if (Input.GetKeyUp(KeyCode.C))// Включение / выключение стабилизатора stabilizationIsEnabled = !stabilizationIsEnabled; // Вывод данных о наклоне на дисплей str = "Поворот по оси Z: "; // Получаем величину наклона объекта по оси Z rotateAxisZ = TransformTestCube.eulerAngles.z; str += rotateAxisZ.ToString(); // Получаем величину наклона объекта по оси X rotateAxisX = TransformTestCube.eulerAngles.x; str += "\n" + "Поворот по оси X: " + rotateAxisX.ToString(); infoText.text = str; // Собственно сам стабилизатор if (stabilizationIsEnabled) { eulerAng = TransformTestCube.eulerAngles; // Проверяем угол наклона по оси Z // если наклон до 180 градусов значит объект наклоняется влево if (rotateAxisZ >= limitAngle && rotateAxisZ < 180)// И одновременно проверяем достиг наклон лимита { // если достиг или превысил лимит наклона присваиваем величину лимита углу z переменной eulerAng eulerAng.z = limitAngle; // И поворачиваем трансформ на угол eulerAng TransformTestCube.eulerAngles = eulerAng; } // Проверяем угол наклона по оси X // если наклон до 180 градусов значит объект наклоняется вперёд if (rotateAxisX >= limitAngle && rotateAxisX < 180) { eulerAng.x = limitAngle; TransformTestCube.eulerAngles = eulerAng; } // Проверяем угол наклона по оси Z // если наклон больше 180 градусов значит объект наклоняется вправо if (rotateAxisZ <= (360 - limitAngle) && rotateAxisZ > 180)//При наклоне вправо вычисляем нужный угол (360 - limitAngle) { eulerAng.z = 360 - limitAngle; TransformTestCube.eulerAngles = eulerAng; } // Проверяем угол наклона по оси X // если наклон больше 180 градусов значит объект наклоняется назад if (rotateAxisX <= (360 - limitAngle) && rotateAxisX > 180) { eulerAng.x = 360 - limitAngle; TransformTestCube.eulerAngles = eulerAng; }
// Индикация работы стабилизатора AxisOfRotation.rotation *= Quaternion.AngleAxis(speedR * Time.deltaTime, Vector3.up); } } Ещё раз спасибо, если кто найдёт способ оптимизировать код или что то поправить буду благодарен.
|
|
| |
URGINSAN | Дата: Воскресенье, 23 Июля 2017, 17:41 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Kot-Matroskin, возможно, еще выручила бы функция Math.Clamp.
Я на драйве
|
|
| |
Kot-Matroskin | Дата: Понедельник, 24 Июля 2017, 22:33 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| Точно!! И сравнений меньше
|
|
| |