Результаты поиска
| |
Kot-Matroskin | Дата: Понедельник, 24 Июля 2017, 22:33 | Сообщение # 1 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| Точно!! И сравнений меньше
|
|
| |
Kot-Matroskin | Дата: Пятница, 21 Июля 2017, 09:39 | Сообщение # 2 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| Нет, не в тему, там два риджитбади объекта связываются посредством шарнирного соединения, и к свободному вращению тела в падении не имеют отношения. Ну я уже писал (очень давно) Есть такая игрушка неваляшка мне надо почти такое.Добавлено (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); } } Ещё раз спасибо, если кто найдёт способ оптимизировать код или что то поправить буду благодарен.
|
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 23:02 | Сообщение # 3 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| Это уже опробовано, лажа выходит, нельзя сильно низко делать, качается как качели не остановишь, да и когда сильно низко не едет. да и не решение
|
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 20:18 | Сообщение # 4 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| Видео как брусок (съезжая) СПРЫГИВАЯ с края обрыва кувыркается в полёте и падает как попало?
Добавлено (09 июля 2017, 20:14) --------------------------------------------- Надо чтобы он упал на колёса (как кошка на лапы) да и не кувыркался, только свободный наклон до 30 градусов (сколько задаш в общем)
Добавлено (09 июля 2017, 20:18) --------------------------------------------- Я давно пытаюсь найти, но так и не смог. Там я так понимаю надо как то с кватернионами оперировать свободно уметь. увы мат аппарат на уровне 2 + 2
Сообщение отредактировал Kot-Matroskin - Понедельник, 10 Июля 2017, 09:56 |
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 19:31 | Сообщение # 5 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| К чему это? Мануал по Rigidbody я читал, и как он мне поможет ограничить наклон коляски до определённого угла? Надо к примеру чтоб до 35 градусов она наклонялась нормально, а если угол наклона превышает 35 то скрипт должен останавливать наклон. И это должно быть по кругу. Да Rigidbody может заморозить наклон но как будет выглядеть коляска стоящая горизонтально на наклонном пандусе
Добавлено (09 июля 2017, 19:31) --------------------------------------------- С того же пандуса коляска резво скатывается при этом её трясёт и подпрыгивает, и заметьте ВСЕГДА падает или даже переворачивается в момент выезда на ровную поверхность. А иногда и раньше. нужно чтобы сохраняла положение даже при прыжке с высоты
Сообщение отредактировал Kot-Matroskin - Воскресенье, 09 Июля 2017, 19:35 |
|
| |
Kot-Matroskin | Дата: Воскресенье, 09 Июля 2017, 17:51 | Сообщение # 6 | Тема: Детская коляска |
был не раз
Сейчас нет на сайте
| Есть такой юнит (надеюсь все представляют как выглядит и ездит оная) надо сделать что бы она НЕ наклонялась Более чем на 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);
|
|
| |
Kot-Matroskin | Дата: Суббота, 08 Июля 2017, 09:41 | Сообщение # 7 | Тема: Эвент на нажатие кнопки мыши |
был не раз
Сейчас нет на сайте
| Сильно большое спасибо за решение.
|
|
| |
Kot-Matroskin | Дата: Суббота, 08 Июля 2017, 03:01 | Сообщение # 8 | Тема: Эвент на нажатие кнопки мыши |
был не раз
Сейчас нет на сайте
| Мне надо получить код нажатой клавиши типа KeyCode в переменную kc, без разницы каким способом, получить НЕ устаревшими - OnGUI. и прочим. И получить надо к примеру в Update(). Решение найдено через форич. Теперь вопрос, существует ли что то более простое / изящное чем использование foreach....Добавлено (08 июля 2017, 03:01) --------------------------------------------- ЗЫ: Ладно закрыли тему. Похоже другого способа не существует
|
|
| |
Kot-Matroskin | Дата: Пятница, 07 Июля 2017, 18:46 | Сообщение # 9 | Тема: Эвент на нажатие кнопки мыши |
был не раз
Сейчас нет на сайте
| Походу я наверное немного путано изъясняюсь, я имел в виду как ещё можно получить код нажатой клавиши. Типа KeyCode kc; и потом присваиваем kc = ..... и вот тут откуда то берётся значение этой самой клавиши. как раньше было kc = Event.current.keyCode;
|
|
| |
Kot-Matroskin | Дата: Пятница, 07 Июля 2017, 11:58 | Сообщение # 10 | Тема: Эвент на нажатие кнопки мыши |
был не раз
Сейчас нет на сайте
| Здравствуйте. Как раз в теме не надо создавать другую. Есть камера с UI, при подключении объекту, надо передать коды нажатых клавиш.
Код if (Input.GetKeyUp(KeyCode.R)) m_Imc.currentObject.GetComponent<IOperation>().SetMode(eMode.manualControl); if (Input.GetKeyUp(KeyCode.T)) m_Imc.currentObject.GetComponent<IOperation>().SetMode(eMode.automaticControl);
Использую такую конструкцию, громоздко да и в разных объектах разная реакция на одни те же клавиши прочитал тут про Event.current.keyCode И подумал вот оно, сделаю так, буду передавать все клавиши объекту и он будет сам решать что делать с полученным кодом.
Код KeyCode kc = new KeyCode(); ... if (Input.anyKeyDown) kc = Event.current.keyCode; ... if (kc == KeyCode.G) m_txtInf.text = "G"; else m_txtInf.text = "none";
Компилируется но не работает, ругается на первый ИФ что NullReferenceException: Object reference not set to an instance of an object ПС: Прошу сильно не ругать только учусь.Добавлено (07 июля 2017, 11:41) --------------------------------------------- Нарыл вот что, если в выше приведённом коде в строчке if (Input.anyKeyDown) kc = Event.current.keyCode; заменить на kc = KeyCode.G; то работает. Получается что я не знаю как заставить работать Event.current.keyCode;
Подскажите пожалуйста, как получить код текущей нажатой клавиши типа - KeyCode Добавлено (07 июля 2017, 11:58) --------------------------------------------- Нашёл решение, если вдруг кому то понадобится
Код KeyCode kc; // Получаем код нажатой клавиши foreach (KeyCode KCode in System.Enum.GetValues(typeof(KeyCode))) if (Input.GetKeyDown(KCode)) kc = KCode;
Посылаем объекту, в нём и обрабатываем.
Код if (kc == KeyCode.G) m_txtInf.text = "G"; else m_txtInf.text = "none";
Хотя может получить KeyCode нажатой клавиши можно и более изящным способом?
Сообщение отредактировал Kot-Matroskin - Четверг, 06 Июля 2017, 22:28 |
|
| |
Kot-Matroskin | Дата: Воскресенье, 11 Декабря 2016, 23:55 | Сообщение # 11 | Тема: OnTriggerEnter и высокая скорость |
был не раз
Сейчас нет на сайте
| Кстати как вариант пусть он махнёт пару или более (то-есть один удар будет состоять из серии пока не сработает триггер) раз, пока не зацепит, на той скорости я так понимаю это игроку не будет заметно. А удар гарантированно зацепит.
|
|
| |
Kot-Matroskin | Дата: Суббота, 10 Декабря 2016, 01:33 | Сообщение # 12 | Тема: OnTriggerEnter и высокая скорость |
был не раз
Сейчас нет на сайте
| Попробуй вместо Update() использовать FixedUpdate() в некоторых случаях помогает.
Сообщение отредактировал Kot-Matroskin - Суббота, 10 Декабря 2016, 01:33 |
|
| |
Kot-Matroskin | Дата: Среда, 07 Декабря 2016, 11:30 | Сообщение # 13 | Тема: столбик неваляшка |
был не раз
Сейчас нет на сайте
| Общем всё просто, есть столбик 3 по Y и соответственно по X и Z - 1 и 1 надо сделать чтобы при наклоне больше критического угла он возвращался к до критическому. Вот что я смог придумать но работает не правильно.
Код 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)); //
}
}
И как бы избавится от объекта образца? Помогите пожалуйста сделать чтобы столбик не мог упасть и реалистично возвращался в угол указанный мной, ибо он может оказаться на наклонной поверхности поэтому он должен вернутся не строго вертикально а в исходное положение.
Сообщение отредактировал Kot-Matroskin - Среда, 07 Декабря 2016, 19:43 |
|
| |
|