
NavMeshAgent를 활용해서 간단하게 오브젝트에 코드를 넣고 복제해서 다 같이 움직이게 할 수 있다.

먼저 NavMeshAgent를 가지고 있는 파랑이와 빨강이를 만들어 준다.
그 후 Plane 하나와 큐브 두개로 이루어진 간단한 맵을 만들고

NavMeshAgent가 바닥을 판별하고 움직일 수 있게 맵을 Bake를 해준다.
아래의 Bake 과정은 Unity 2021년 버전 기준인데
Unity 2022년 버전 부터는 Navigation이 바뀌었으므로 2022년 버전 이상으로 하는 분들은 다른 분이 깔끔하게 정리해주신
https://www.youtube.com/watch?v=95zQNKUTXfQ 이 유튜브를 참고하길 바란다.
먼저 경로 계산에 사용되는 맵 오브젝트들을 Navigation Static 으로 바꿔준다.

그 다음 Window -> AI -> Navigation 을 선택해 Navigation 창을 띄운다.

Navigation 창의 Bake를 선택하고 밑의 Bake 버튼을 눌러준다.

Bake 끝!

Editor 창을 보면 NevMeshAgnet 가 움직일 수 있는 부분이 하늘색으로 칠해진걸 확인할 수 있다.
여기까지 했으면 맵에 아까 만든 파랑이와 빨강이를 배치하고 목적지 역할을 해줄 박스도 배치해준다.

using UnityEngine;
using UnityEngine.AI;
public class AIControl_01 : MonoBehaviour
{
public GameObject goal;
NavMeshAgent agent;
void Start() {
agent = GetComponent<NavMeshAgent>();
agent.SetDestination(goal.transform.position);
}
}

위 코드를 각각 파랑이와 빨강이에 넣고 Inspector에서 goal을 설정해 준다음 이걸 원하는 만큼 복제하면
( 여기선 파랑이는 파랑 박스, 빨강이는 빨강 박스가 goal 이다. )


이런식으로 알아서 뭉쳐서 이동하는 것을 볼 수 있다.
각각의 개체가 Goal까지 최대한 적은 경로로 이동하려고 하기 때문에 시작지점과 끝 지점이 같은 개체들끼리 자연스럽게 뭉치게 된다.