Есть ли в Unity что-то вроде метода CollideWhenRigidBodyLeavesLayer? Вот почему:
У моих NPC три типа движения: Walk, Swim и Fly
Они используют твердое тело для своих движений, и это прекрасно работает для персонажей, которые ходят.
Это также хорошо работает для персонажей, которые летают. Вызывая Physics.IgnoreLayerCollision (FlyingCharacterLayer, WaterLayer) Летающие персонажи теперь могут летать над водой.
Мой вопрос заключается в том, как заставить мое плавательное существо оставаться перекрывающим слой воды?
Iвключили Physics.IgnoreLayerCollision (SwimCharacterLayer, WaterLayer) Так что теперь плавающие персонажи могут перекрывать воду.
Но как мне проверить, что мое морское существо покидает воду, и создать здесь столкновение, чтобы он поворачивался и продолжалплавать вместо того, чтобы превращаться в ходячую рыбу ...
Мой уровень (и, следовательно, вода) генерируется динамически, поэтому добавление периметра для проверки столкновений не очень хороший вариант.
Кроме того,«слой» земли / слоя существует под слоем воды, поэтому я не думаю, что есть хороший способ проверить его на столкновение с землей, потому что моя рыба перекрывает землю и воду одновременно.
Iнадеюсь, я упускаю что-то базовое:)
Спасибо!
ОБНОВЛЕНИЕ:Я могу проверить, не перекрывает ли мой персонаж плавание воду с помощью 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
}