TIL)2024-02-26 마무리 전 트러블 슈팅...

2024. 2. 26. 23:49내외 교육들/TIL

기능 구현에 있어서 하나를 트러블 슈팅을 하자면 다음과 같다

<원인> 경찰이 올 때 가게의 위장 상태를 바꿔서 벌금행을 피해야 하는데, 위장 상태에서 술을 원하는 손님들의 행동이 있는 것이 어울리지 않아서, 상호작용과 관련된 행동들을 상황에 맞게 바꾸도록 하도록 스크립트를 조정해야 한다.

 

<분석> 

일단 기능 구현을 하기 위해선 다음의 흐름을 통해서 분석해보고자 한다.
위장 상태에 들어가게 된다면 술을 주문한 손님들은 다음 행동들을 랜덤으로 시작한다.

1. 술 주문에서 음식 주문으로 바뀐다.

2. 위장 상태가 없어질 때까지 7초간 기다린다. (3번 메서드를 그대로 가져다 쓴다).

3. 주문을 그만두고 바로 밖으로 나간다.

 

다만 이러한 상태로 변하기 위해선, 먼저 플레이어의 위장 상태 변수를 받아와야 한다.
이에 대해서 튜터님한테 조언을 얻고 다음과 같은 2가지 해답을 얻었다.

첫번째는 Update() 이벤트 함수에서 해당 상황에 걸리도록 특수한 조건을 얻는 것이고,

두번째는 코루틴 메서드를 선언하여 Start()문에 초기화하여, bool의 상태의 변화를 감지하는 것이다.

 

<해결>

코루틴을 좀 더 실용적으로 다룰 겸, 이론상 Start()에서 코루틴을 실행해도 실시간으로 감지하기 때문에, 두번째 방법을 선택하였고
다음의 코드로 감지하고자 했다.

    private void Start()
    {
        StartCoroutine(PlayerUndercoverStatus());
    }

 

    private IEnumerator PlayerUndercoverStatus()
    {
        yield return new WaitUntil(() => isUndercover == true);
        isChanged = true;
    }

위와 같이 isUnderCover 변수는 Update() 이벤트 함수에서 플레이어 오브젝트의 플레이어의 상태를 관리하는 컴포넌트를 가져와서 실시간으로 상황이 바뀌는 것을 확인할 수 있다. 

이것으로 한번의 상태 변화를 감지하는 것만 받을 수 있도록 하며, 이거대로 술 손님들의 행동을 바꿀 수 있다.