Моя LayerCollisionMask
Моя сценаЯ хочу добавить врагов, которые будут следовать за игроком и избегать препятствий. Как я могу это сделать? Используя NavMesh? С моей собственной реализацией алогрифма или с какими-то сторонними библиотеками? Как это реализовать?
Я попробовал использовать встроенный NavMesh с надстройкой NavMeshPlus. Я создал три объекта с NavMeshSurface на каждом, настроил включенные слои и запечил их. Оказалось, что NavMeshSurfaces пересекаются на лестнице. Автоматически противник просто застрял бы на лестнице. Встроенный NavMeshLink не помог (просто не смог установить его ширину). Поэтому я написал свою собственную реализацию NavMeshLink. Но это не особо помогло, потому что противник всё равно предпочитает застрять в стене, чем идти по лестнице
Враг застрял
Мой NavMesh
Мой NavMeshLink:
Код: Выделить всё
public class ElevationEntry : MonoBehaviour
{
[SerializeField] private int newOrderInLayer;
[SerializeField] private int newLayer;
[SerializeField] private GameObject endPos;
private void OnTriggerEnter2D(Collider2D collision)
{
var stalkingMovement = collision.gameObject.GetComponent();
if(stalkingMovement != null) stalkingMovement.SetObjectToGoToPosition(endPos.transform.position);
collision.gameObject.layer = newLayer;
collision.gameObject.GetComponent().sortingOrder = newOrderInLayer;
}
}
Код: Выделить всё
public void SetObjectToGoToPosition(Vector2 pos)
{
_navMeshAgent.enabled = false;
isMovingByAI = false;
moveToPos = pos;
}
Код: Выделить всё
private void MoveToPosition(Vector2 position)
{
var pos = Vector2.MoveTowards(transform.position, position, speed * Time.fixedDeltaTime);
_rigidbody2D.MovePosition(pos);
if(Vector2.Distance(transform.position, position) < 0.01)
{
_navMeshAgent.enabled = true;
isMovingByAI = true;
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... unity-game