Этот вопрос гораздо сложнее, чем кажется, вот почему.
У меня есть игрок и физика включена в мире 2D + 3D.
У монстров синусоидальное движение = они идут вверх и вниз, справа налево.
Игрок может прыгать только более или менее высоко, но не может двигаться вправо или влево (как игра в динозавр в Chrome, когда нет подключения к Интернету).
После многих неудачных попыток определить, находится ли игрок выше (это не просто if (PlayerY - MonsterY) > 0
в противном случае я бы не стал спрашивать здесь), лучшая идея, которую я придумал, - сделать два коллайдера в монстре: один для " head
"и один для" body
".
- Когда игрок бьет только головой, он может быть только выше (в противном случае это сначала тело), так что это простая ситуация
- Когда игрок ударяет только по корпусу, он может находиться только ниже или по бокам, поэтому это тоже легкая ситуация
- иногда, случается, что игрок поражает оба коллайдера.
Так что я бы хотел проверить это после FixedUpdate
вычислений.
Если вы прочитали порядок выполнения функций обратного вызова , LateFixedUpdate
нет: даже если есть LateUpdate
, официально написано, что разработчик должен обрабатывать физику в FixedUpdate
, и больше нигде .
То, что я сделал до сих пор: когда вызывается OnCollision
головы монстра, просто измените логическое значение, и то же самое для OnCollision
тела монстра. Поэтому после OnCollisionXXX, как сказано в документации, вы можете использовать только одну вещь: yield WaitForFixedUpdate
.
Я бы хотел проверить эти логические значения и действовать в соответствии с их значениями в yield WaitForFixedUpdate
.
Я не могу найти в сети ценный пример того, как это сделать. Есть идеи, как реализовать yield WaitForFixedUpdate
в этой ситуации? Я застрял.