오늘은 멀뚱멀뚱 서서 음식을 받아가기만 했던 손님 AI 의 행동을 추가했다.
간단하게
1. 음식 요청하기
2. 음식 받기 - 박수치기
3. 먹기
4. 나가기
순으로 AI가 행동하도록 구현했다.
애니메이션
서있기만 하던 AI를 앉아있게 하려고 앉기, 일어나기, 앉은 상태 Idle,.. 등 애니메이션들을 새로 구했다.
애니메이션들은 어김없이 믹사모의 애니메이션들을 이용했다.
앉아있는 애니메이션의 높이가 살짝씩 달라 Y축 offset을 조정해주는 작업도 했다...
AI - 음식 먹기
손님이 먹는 애니메이션을 보여주기 위해 Coroutine을 이용해 코드를 짰다.
private void GetFood()
{
if (_co == null)
{
_animator.SetTrigger("GetFood");
_co = StartCoroutine(EatFood());
}
}
...
IEnumerator EatFood()
{
_animator.SetBool("IsEat", true);
yield return new WaitForSeconds(10f);
_animator.SetBool("IsEat", false);
StartCoroutine(ExitRestaurant());
}
이제 10초동안 먹고 난 후 자리에서 일어난다.
WaitForSeconds에 상수를 넣은 것은 수정해야겠다..
Player - 빈 접시 치우기
원래 손님이 음식을 받으면 바로 음식이 사라졌지만
손님에 음식 먹기 행동을 추가했으므로, 손님이 음식을 다 먹으면 빈 접시가 남아있어 플레이어가 치워야 하도록 수정했다.
CookedFood.cs
private bool _shouldClean = false;
public bool ShouldClean
{
get { return _shouldClean; }
set {
_shouldClean = value;
if (_shouldClean)
{
_canHold = false;
foreach (GameObject food in _edibleFoods)
food.SetActive(false);
}
}
}
음식을 다 먹었을 경우에 해당 음식의 _shouldClean 변수가 true로 바뀌고
음식 프리팹의 따로 지정한, 먹을 수 있는 부분을 없애준다. (예로 치킨의 뼈만 남는다.)
후에 플레이어가 빈 접시에 가까이 가서 상호작용을 누르면 접시가 사라진다.
추후에 플레이어가 접시를 치우는 모션을 넣는 것과 UI로 게이지를 넣어 가시성있게 표현할 예정이다.
Event 버그 수정
게임은 문제없이 돌아가지만 Event를 해제하는 부분에서 계속 NullReference 오류가 떴다.
알고보니 다른 스크립트에서 똑같은 이벤트를 해제해주고 있었다.
두 함수가 겹치지 않는다고 생각했는데 중복으로 해제를 해주고 있었나보다.
private CustomerController _currentCustomer = null;
public CustomerController CurrentCustomer
{
get { return _currentCustomer; }
set
{
if (value == null)
{
if (_currentCustomer != null)
{
_currentCustomer.OnCustomerExit -= CustomerExit;
}
}
...
}
}
CurrentCustomer를 참조해 이벤트를 해제시켜주고 있었는데,
프로퍼티에서 이벤트를 해제시켜주고 다른 함수의 코드는 삭제하니 해결됐다.
오늘 하루 회고
코드를 더 정리하는 시간을 가지면 좋겠다.
오늘 오류를 해결하면서 코드 구조의 중요성을 다시 느꼈다..
필요없는 코드와 구조적으로 효율적이지 않은 코드를 고치고싶다.
'내일배움캠프(Unity)' 카테고리의 다른 글
TIL - 오류 수정 (0) | 2024.01.24 |
---|---|
TIL - 조리된 음식 프리팹 만들기, 몇 가지 오류 (1) | 2024.01.23 |
TIL - AI agent priority, Food Creater (0) | 2024.01.18 |
손님 AI 3 - 음식 매칭, 식당 나가기 (1) | 2024.01.16 |
손님 AI 2 - 다른 손님이 없는 자리로 이동하기, ValueTuple (0) | 2024.01.15 |