Некорректное срабатывание
|
|
labinzevv | Дата: Суббота, 27 Февраля 2021, 13:45 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Всем привет. Такая проблема: Делаю переключатель на основе If и bool в OnTriggerStay (код ниже) дело в том, что иногда он срабатывает как надо, то есть по очереди выполняет if и else, а иногда может по три раза выполнить if, потом один раз else и наоборот, в общем сбивается. Может кто нибудь сталкивался и знает как решить эту проблему?
Код public bool handUp = false;
void OnTriggerStay(Collider other) { if (other.tag == "hand") { handUp = !handUp;
if (Input.GetKeyDown(KeyCode.G)) { if (handUp == true) { obj_Rigidbody.freezeRotation = true; obj_Rigidbody.constraints = RigidbodyConstraints.FreezePosition;
transform.rotation = new Quaternion(hand.transform.rotation.x, hand.transform.rotation.y, hand.transform.rotation.z, hand.transform.rotation.w);
transform.position = new Vector3(hand.transform.position.x, -2.2f, hand.transform.position.z); transform.parent = GameObject.Find("hand").transform;
Debug.Log("1"); } else { obj_Rigidbody.constraints = RigidbodyConstraints.None;
transform.parent = null;
Debug.Log("2");
} } } }
3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
Сообщение отредактировал labinzevv - Суббота, 27 Февраля 2021, 13:48 |
|
| |
IlyaKos | Дата: Суббота, 27 Февраля 2021, 14:42 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Так, пока ты в триггере, у тебя переменная постоянно моргает с тру на фолс туда-сюда, поэтому такой результат.
|
|
| |
labinzevv | Дата: Суббота, 27 Февраля 2021, 14:55 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Цитата IlyaKos ( ) Так, пока ты в триггере, у тебя переменная постоянно моргает с тру на фолс туда-сюда, поэтому такой результат.
Да, уже перенёс handUp = !handUp; в if (Input.GetKeyDown(KeyCode.G)) Всё равно продолжает сбиваться...
3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
|
|
| |
drcrack | Дата: Суббота, 27 Февраля 2021, 15:00 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Цитата transform.rotation = new Quaternion(hand.transform.rotation.x, hand.transform.rotation.y, hand.transform.rotation.z, hand.transform.rotation.w); не по теме, но как вообще пришло в голову написать это таким образом, вместо transform.rotation = hand.rotation?
|
|
| |
labinzevv | Дата: Суббота, 27 Февраля 2021, 15:09 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) не по теме, но как вообще пришло в голову написать это таким образом, вместо transform.rotation = hand.rotation?
Ну присвоение координат вращения того объекта к которому будет Child объект, на котором висит скрипт. Если не правильно, подскажи, как сделать корректно. Просто оно в данном виде работает)
3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
|
|
| |
drcrack | Дата: Суббота, 27 Февраля 2021, 16:57 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Я ж написал как правильно (и в 2-3 раза быстрее)
|
|
| |
labinzevv | Дата: Суббота, 27 Февраля 2021, 17:28 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) Я ж написал как правильно (и в 2-3 раза быстрее) Всё теперь догнал) Спасибо за подсказку, одной проблемой меньше.
3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
|
|
| |
IlyaKos | Дата: Воскресенье, 28 Февраля 2021, 03:06 | Сообщение # 8 |
участник
Сейчас нет на сайте
| Попробуй вынести условия в апдейт, и обновляй, когда находишься в триггере.
Код void Update () { UpdateHandUp (); }
void UpdateHandUp () { if (!inTrigger) return;
*код*
}
void OnTriggerStay } if (tag == "hand") inTrigger = true; }
void OnTriggerExit () { if (tag == "hand") inTrigger = false; }
|
|
| |
drcrack | Дата: Воскресенье, 28 Февраля 2021, 10:31 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| ^ да, забыл написал, вот это правильный подход, потому что OnTriggerStay выполняется в цикле физики (FixedUpdate) и проверять GetKeyDown в нем не стоит т.к. все начинает зависеть от фпс
|
|
| |
labinzevv | Дата: Воскресенье, 28 Февраля 2021, 16:48 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Всем спасибо. Решил проблему так: В Update меняю тег объекта (с помощью переключателя bool и if) А уже в OnTriggerStay код выполняется при смене тега. Как то так..
3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv
|
|
| |