상태머신 보강 #2

1.26

이번 보강작업엔 굵직한 이슈들이 몇가지 있다. 저번처럼 모든 작업이 하루만에 끝나기를 기대하는 것은 어려워 보인다. 작업을 시작해 보자.

장풍을 맞고 모션이 변하지 않는 버그가 있었다. 이건 노션에 적힌 문제는 아니다. 로그를 찍어봐도 도무지 뭐가 문제인지 모르겠다.

현직 프로그래머들이 들으면 기겁을 할 지도 모르겠지만, 난 지금까지 브레이크 포인트를 써본 적이 없다. 모든 것을 로그를 찍어 추리로서 문제를 해결해 왔다. 어떻게 쓰는 지 몰랐기 때문이다. 그럼에도 지금까지는 잘 버텨왔는데, 이제는 배워야 할 때가 된 것 같다. 이런 야밤엔 챗 GPT가 좋은 스승이 되어 준다.

빨간 점을 찍어보니 문제는 단번에 파악된다. 장풍의 데미지 처리는 장풍의 Update()에서, 모션의 처리는 캐릭터의 LateUpdate()에서 처리한다. 그런데 장풍이 부딪히는 시기가 캐릭터의 Update()보다 반드시 뒤쪽에 온다는 보장이 없다. 때문에 때때로 제대로 표현되기도 했던 것이다. 오. 빨간 점은 좋은 것이었구나…!

계속 버그를 잡자. 역광을 비쳤을 때 입이 제대로 표현되지 않는 버그가 있었다.

아이고.. 괜히 한참을 찾았네. 케스케이드 그림자 관련된 전처리 지시문 처리가 빠져 있었다. 즉 그림자가 표현되지 않고 있던 것이다.

셰이더 코드를 짤 때 셰도우 캐스터 빼면서 ‘입은 뭐, 그림자 없어도 되겠지…’라는 생각이었던 것 같다. 셰이더는 화면에서 차지하는 면적이 중요하다. 해당 면적만큼 계산이 일어나기 때문이다. 아무리 복잡한 코드라도 면적이 작다면 그럭저럭 괜찮다. 그런데 입은 어차피 면적도 작은데 이거 아껴서 뭐할라고 그랬을까….

휴. 많이 처리했다. 오늘은 여기까지.

1.27

장풍을 처리하기 위해 풀매니저를 붙여야 한다. 솔직히 풀관리가 그렇게 필요하지는 않다. 게임은 길어봐야 99초일테고, 두번째 라운드는 씬전체를 로드하는 방식을 사용할 것이다. 유니티의 가비지 컬렉터는 악명이 높지만, 겨우 캐릭터 2명 나오는 게임의 리소스를 쓰레기처럼 쌓는다고 해도 게임을 끌 때까지 그렇게 부담을 줄 것 같지는 않다.

하지만 이걸 붙이는 이유는 그냥 만들어 둔게 있기 때문이다. 오래 전 관둔 벨라 프로젝트의 스크립트를 가져와서 붙이자. 성능은 후지지만 스스로 만든 것이기에 새로 배울 것이 없다는 장점이 있다.

파이어볼은 이제 하이라키에 남는다. 이후에 장풍을 사용하게 되면 이를 재활용하게 된다. 사실 장풍보단 타격효과나 먼지 효과등의 공용이펙트에 더 효과적이다. 초안이기 때문에 아마 정식데이터를 붙이면 문제가 많을 것으로 예상되지만 이런 최적화들은 뭐랄까… 마음의 안정을 준다. 풀매니저란 이름은 이펙트 매니저란 이름으로 바꿨다.

이제 2개 남았다. 오늘은 여기까지

1.30

이틀간 놀았다. 백수에게도 쉬는 날이 있어야지.(??)

장풍의 처리. 이제 버튼에 따라 장풍 속도가 달라진다.

예정엔 없던 작업이지만 문득 생각나서 노션에 노트해둔 작업. State변경을 LateUpdate()에서 처리하고 있어 문제가 없을 줄 알았는데, 예상과는 달리 동시타격할 경우, Player1의 판정이 더 좋은 문제가 있다.

동시에 치면 동시에 맞아야 한다. 자주 일어나는 일은 아닐테지만, 결정적인 순간에 시스템의 판정으로 진다면 꽤 억울할 것이다. 이걸 작업하며 여러개의 데이터 유형을 Tuple로 넘길 수 있는 사실을 처음 배웠다.

목표했던 코딩 작업은 끝났다. 이제 달래의 애니메이션으로 넘어가도록 하자.

상태머신 보강 #2”의 4개의 생각

  1. 원래 다들 Debug.Log(“11111111”);
    Debug.Log(“여긴가 “ + value);
    하는거 아니겠습니까요!!
    브레이크 포인트 걸면 한줄씩 값도 확인하고 하는 편리함이 있지만 그래도 대충 어딘지 알것 같고 바쁠 땐 직관적인게 최고죠 역시

      1. 그… 사실 저도 브레이크 포인트 걸고 하긴 하지만 뭐… 아무튼 모로 가도 서울만 가면 되지 않겠어요!!!

      2. 그렇습니다. 전 로그로 찾는 디버깅이 추리력을 높인다는 가설을 믿고 있습니다. 아 물론 그 가설은 제가 세운 겁니다.

댓글 남기기