내일배움캠프 Unity 81일차 TIL - 팀 9와 4분의 3 - 개발일지

Wooooo·2024년 2월 21일
0

내일배움캠프Unity

목록 보기
83/94

[오늘의 키워드]

Player State 리팩토링 방향 결정
Player Interact 개선 방향 결정


[Player State 리팩토링 방향 결정]

TwoHand, TwinTool 관련 State

중복 코드 줄이기

PlayerIdleState, PlayerRunState
PlayerTwoHandIdleState, PlayerTwoHandRunState
PlayerTwinToolIdleState, PlayerTwinToolRunState

위 클래스들은 99% 같은 코드를 가지고 있고, Player의 Animator에게 넘겨주는 파라미터만 다르다.
같은 기능을 하는 클래스를 합쳐서 PlayerIdleStatePlayerRunState로만 기존과 동일하게 동작할 수 있도록 변경할 예정.

if-else문 줄이기

현재 상태머신의 Transition을 설정하는 부분마다 플레이어가 어떤 도구를 들고 있는지 검사하여 해당 도구에 알맞는 상태로 전환하는 코드가 여러 상태에 퍼져있다.

다른 도구의 애니메이션이나 새로운 상태가 추가될 때마다 이 부분들을 모두 찾아서 if-else문을 추가해야하는 구조인데, 이를 PlayerIdleState, PlayerRunStateEnter() 메서드에서 결정할 수 있도록 변경할 예정.
Transition 설정 시에는 그냥 상태를 전환해주기만 하면 된다.

DestroyState, InteractState, MakeState 기능 병합

중복 코드 줄이기

이 상태들은 다들 플레이어가 어떤 오브젝트에 상호작용을 했을 때 진입하는 상태이다.
이 상태들 역시 중복되는 코드가 많아서 PlayerInteractState로 기능을 병합하고, 다르게 동작해야하는 부분은 상호작용되는 오브젝트의 인터페이스를 통해 결정할 수 있는 구조로 변경할 예정.

IDestructible 인터페이스 추가

BuildableObject 컴포넌트에 상속하여, 플레이어가 상호작용 시 건축물을 망치로 파괴할 수 있도록 할 예정.

기능 이관

현재 PlayerDestroyState에서 파괴할 오브젝트의 이름으로 반환받을 레시피 재료를 추출하는 작업을 하고 있는데, 이를 BuildableObject가 자신의 레시피 재료를 반환해주도록 메서드를 추가하는게 좋아보임.


[Player Interact 개선 방향 결정]

상호작용 오브젝트 결정 시점

현재는 각 상태의 Enter() 메서드에서 OverlapSphere()를 이용해 근처의 오브젝트를 탐색한 다음, 탐색된 오브젝트 중 0번째 인덱스의 오브젝트에게 상호작용을 하는 중
-> 근처에 있는 여러 개의 오브젝트 중, 상호작용 할 수 있는 오브젝트가 있는데도 상호작용을 할 수 없는 오브젝트에게 상호작용을 해서 아무것도 안하는 현상이 발생
-> 근처에 있는 여러 개의 오브젝트 중, 사용자가 의도치 않은 오브젝트에게 상호작용되는 현상이 발생

PlayerBaseStateOnInteractStarte() 메서드에서 OverlapSphere()로 근처의 오브젝트들을 탐색한 후, 탐색된 모든 오브젝트들 중 우선순위를 지정하여 상호작용할 수 있도록 개선할 예정.

상호작용 우선순위

  1. 무기 -> 탐색된 몬스터를 타게팅하여 공격
  2. 도구 -> 도구에 알맞는 오브젝트 상호작용
  3. 맨손 -> 아키텍처 오브젝트 상호작용
  4. 맨손 -> Gather 자원 오브젝트 상호작용
  5. 무기 -> 허공에 공격

IInteractable 인터페이스

상호작용에 필요한 데이터들을 미리 전달받을 수 있는 메서드를 추가하면 좋을 것 같음.
-> 채집에 걸리는 시간, 도구의 내구도 소모량 등을 조절 가능

profile
game developer

0개의 댓글