Написал небольшую статью о реализации отталкивания в Unity3d с использованием физики NavMesh😎😎😎 Всем привет! 😁😁😁
Реализация толчка в Unity3d с использованием NavMeshAgent.
Если вкратце, то физический движок RigidBody и NavMesh абсолютно несовместимы. При одновременном использовании, объект ведет себя некорректно. (а точнее начинает получать два ускорения, чаще всего в разные стороны).
Разработчики советуют их не совмещать по возможности, или ставить галочку isKinematic в Rigidbody, а в NavMesh использовать NavMeshObstacle (ИИ на котором весит NavMeshAgent будет обходить объект на котором есть Obstacle).
но тут есть проблема - Obstacle заставляет агента ИИ менять позицию на позицию рядом с объектом, то есть с какой бы скоростью вы не столкнули объект с агентом ИИ, он просто подвинется на ближайшую точку рядом с объектом и пойдет дальше.
А наша цель именно оттолкнуть Агента ИИ(обращаю внимание, что именно его, а не объект) от позиции на которой он был, в направлении движения объекта, который с ним столкнулся. (то есть передать некую силу толчка Агенту ИИ, что бы он передвинулся по вектору движения объекта, который с ним столкнулся)
Делается это следующим образом: