Unity의 군중 시뮬레이션(Crowd Simulation) - 1

응애개발자·2024년 5월 13일

Unity 개념 정리

목록 보기
4/7
post-thumbnail

하나로 움직이기(Moving As One)

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

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

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

Bake 과정

  1. 먼저 경로 계산에 사용되는 맵 오브젝트들을 Navigation Static 으로 바꿔준다.

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

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

  2. 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까지 최대한 적은 경로로 이동하려고 하기 때문에 시작지점과 끝 지점이 같은 개체들끼리 자연스럽게 뭉치게 된다.

0개의 댓글