TPS 개발일지1 - 총기 버리기

Taegang Yun·2023년 8월 17일
1

처음부터 이 일지를 적었어야 하는데, 늦게라도 적어본다.

이동, 움직임, 총기 발사, 교체, 줍기, 조준, 발사, 장전의 로직은 구현했다.

난 총기를 버리는 것을 구현하고 싶었다.

그런데 간단히 생각한 것이 쉽지 않았다.

처음엔 든 총을 destroy 하고 해당 클래스의 액터를 스폰했는데, 말 그대로 이건

"새로운" 액터를 스폰한 것이다.

그래서 탄창 무한 버그가 발생한다. (총알 떨어지면 총 버리고 다시 주으면 꽉 참 - default로)

그래서 다시 스폰할 때 앞의 총의 정보를 갖고 있으면 되지 않을까 생각했다.

그리고 해당 총을 스폰하는 것보다, 생각해보니

그냥 총을 옮겨주면 된다!! 그러면 총의 정보를 뭐 어떻게 안해도, 해당 총의 트랜스폼만 변경된 것이기 떄문이다.

소켓에 붙어 있던 것을 detach 해주고 캐릭터에서 아래로 내려갈 때 바닥과 만나는 점으로 옮겨주면 된다.

그런데 또 버그가 발생한다?

땅에 버린 총은 다시 주울 수가 없다. 왜 그러지? 이 말은 Collision이 꺼진다는 말인데...

진짜 한참 고민하고 블루프린트를 뒤적거리다가 문득 떠올랐다.

기능 중에, 이런 기능이 있다. 총 근처에 가면 오버레이로 "E를 눌러 주으세요" 이런 식으로 뜨게 말이다. 그런데 총을 줍고 나서도 캐릭터와 붙어 있으니 총을 맨 상태라면 캐릭터의 등에서 해당 메세지가 계속 뜬다.

그래서 해당 기능을 없애주기 위해 장착 시 콜리젼 컴포넌트 destroy를 해놨던 것이다. 아하...

원인을 모두 알았으니, 이제 고쳐주기만 하면 된다.

기존에 destory component였던 것을, set enable collision -> no collision 으로 해주고 만약 버릴 시 다시 enable 하게 해주게 바꾸었다.

어? 그래도 안 된다. 계속 무한 탄창이다.

이번엔 주울 때의 로직이 문제였다. 비슷하게 주을 때도 해당 총의 클래스를 파악하고 등의 소켓에 소환해주는 식으로 로직을 짠 것이다.

아이고... 그래서 weapon cache 변수를 만들고, 구조체에 미리 버린 총의 탄창 정보를 저장해놓은 후 다시 주을 때 해당 총에 덮어쓰게 하였다. 그리고 weapon cache는 없애주고.

결과적으로 구현했다!!!!

예헤이!!

함수가 엄청 많은데, 이렇게 안해주면 엄청 어지러운 코드였어서 깔끔해졌다.

그리고 애니메이션 쪽에서도 수정을 해줬다.

이게 에임 오프셋(총기 방향으로 몸을 기울임) 애니메이션을 blend하면서

평소 Idle 상태에서 약간 몸을 기울인? 자세로 계속 있는 버그가 있었다.

이는 현재 총을 들었는지 확인한 후, 부울린으로 블렌딩으로 고쳐줬다.

현재까지 진행 상황이다.

적어보일수도 있는데 매크로, 함수 하나하나에 엄청난 블루프린트가 들어가있다... ㅎㅎ

여기에 UI 작업 몇 개!

앞으로 구현할 것

  • 장전 중 총이 쏴지는 것 방지
  • 모델 입히기
  • 적 AI 작업 해보기
  • 체력 시스템
  • 총알 줍기 시스템
  • 아이템 줍기 시스템
  • 인벤토리
profile
언젠간 전문가가 되겠지

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기