Есть ли в Unity что-то вроде метода CollideWhenRigidBodyLeavesLayer? Вот почему:
У моего NPC есть три типа движения: ходьба, плавание и полет.
Они используют жесткое тело для своих движений, и это прекрасно работает с персонажами, которые ходят.
Это также хорошо работает для летающих персонажей. Вызывая Physics.IgnoreLayerCollision (FlyingCharacterLayer, WaterLayer), летающие персонажи теперь могут летать над водой.
У меня вопрос, как я могу сделать так, чтобы мое плавающее существо продолжало перекрывать слой воды?
Я включил Physics.IgnoreLayerCollision (SwimmingCharacterLayer, WaterLayer). Теперь плавающие персонажи могут перекрывать воду.
Но как мне проверить, что мое морское существо покидает воду и создает здесь столкновение, чтобы оно развернулось и продолжило плавать вместо того, чтобы превратиться в ходячую рыбу ...
Мой уровень (и, следовательно, вода) генерируются динамически, поэтому добавление препятствия по периметру для тестирования столкновений - не очень хороший вариант.
Кроме того, графическое изображение / слой «земля» существует под слоем «Вода», поэтому я не думаю, что есть хороший способ проверить столкновение с землей, потому что моя рыба перекрывает землю и воду одновременно.
Надеюсь, мне не хватает чего-то базового :)
Спасибо!
ОБНОВЛЕНИЕ: я могу проверить, не перекрывает ли мой плавающий персонаж воду с помощью Physics.CheckSphere
Но я не могу понять, что оттуда делать. Если я пытаюсь повернуть его на 180 градусов, он переворачивает каждый кадр и иногда возвращается в воду, иногда нет ...
if(Physics.CheckSphere(transform.position, 0.25f, LayerMask.NameToLayer("Water")) == false)
{
// Now I know that my fish is out of the water
// but I can not figure out how to turn him around
}