Today I Learned :
상태 변화에 따른 상호작용
public enum ChestState
{
Lock,
Close,
Open,
Empty
}
위와 같은 상태값이 있다고 했을 때
상태 변화에 따른 행동을 작동시키기 위해 다음과 같은 코드를 작성하였다.
public void SetChestState(ChestState _state)
{
if (state != _state)
{
state = _state;
switch (_state)
{
case ChestState.Open:
{
// 오픈 애니
chestAnim.SetBool("IsOpen", true);
StartCoroutine(WaitAnim());
}
break;
case ChestState.Empty:
{
StopCoroutine(WaitAnim());
keyAnim.enabled = false;
StartCoroutine(MoveKeyObject());
}
break;
}
}
}
상태가 변화할 때에만 내부에 접근하여 변화한 상태에 맞게 작동하는 로직이다.
한데 한번만 실행되었어야할 Open 이벤트가 키보드를 연타누르는 경우 한번 더 실행되는 상황이 있었고
이로 인해 사운드가 두번울렸는데
이를 해결하기 위해 처음에는 코루틴 들어오는 횟수를 카운팅하여 1번만 돌게 하였으나
디버깅을 직접 돌려가며 확인해보니 Empty 상태로 갔다가 바로 Open으로 다시 들어오는 상황이 있었다.
ChestState 의 상태 변화가 방향성을 가지고 있기 때문에 크기비교를 통하여 이전상태로 돌아가지 않도록 아래와 같이 수정을 하여 버그를 해결하였습니다.
if (state < _state)
'TIL' 카테고리의 다른 글
20240307 TIL (0) | 2024.03.07 |
---|---|
20240304 TIL (0) | 2024.03.04 |
20240228 TIL (0) | 2024.02.28 |
20240227 TIL (0) | 2024.02.27 |
20240223 TIL (0) | 2024.02.23 |