내일배움캠프(Unity)
TIL - AI agent priority, Food Creater
빵어
2024. 1. 18. 21:58
오늘은 손님 AI가 나갔을 때, 다음 손님이 들어오도록 하는 부분을 구현했고
팀원분이 만드신 플레이어를 내 Scene에 들고와 적용시켜보는 작업을 했다.
AI Agent Priority
손님 AI가 들어오고 나가는 구현을 하는 와중에 AI agent끼리 부딪치면 AI가 목적지에 도착하지 못하는 오류가 발생했다.
이는 손님AI Agent의 Priority를 모두 다르게 설정해줘서 해결했다.
private int _agentPriority = 0;
...
++_agentPriority;
customerController.AgentPriority = _agentPriority;
FoodCreater
FoodCreater라는 손님이 요청한 음식이 자동으로 생성되는 class의 구현을 시작했다.
private List<(Transform t, bool isFoodHere)> _createStations = new();
튜플을 사용한 리스트로 위치값과 음식이 놓였는지 확인할 수 있는 createStations변수를 만들고
private Queue<GameObject> _foodQueue = new();
요청이 들어온 음식을 넣을 Queue를 만들었다.
private void StartCreateFood(GameObject obj)
{
_foodQueue.Enqueue(obj);
if (_co == null)
{
_co = StartCoroutine(MakeFood());
}
}
요청이 들어오면 StartCreateFood로 큐에 만들 음식을 넣는다.
IEnumerator MakeFood()
{
while(_foodQueue.Count > 0)
{
for(int i = 0; i< _createStations.Count; ++i)
{
if (!_createStations[i].Item2)
{
GameObject food = Instantiate(_foodQueue.Dequeue(), _createStations[i].Item1);
_createStations[i] = (_createStations[i].Item1, true);
}
}
yield return new WaitForSeconds(5f);
}
_co = null;
}
Coroutine으로 음식을 하나하나 만들어 createStation에 생성한다.
음식이 만들어지는 시간을 설정해 음식이 만들어지기까지 딜레이를 줄 예정이다.