Player State 리팩토링 방향 결정
Player Interact 개선 방향 결정
PlayerIdleState
, PlayerRunState
PlayerTwoHandIdleState
, PlayerTwoHandRunState
PlayerTwinToolIdleState
, PlayerTwinToolRunState
위 클래스들은 99% 같은 코드를 가지고 있고, Player의 Animator에게 넘겨주는 파라미터만 다르다.
같은 기능을 하는 클래스를 합쳐서 PlayerIdleState
와 PlayerRunState
로만 기존과 동일하게 동작할 수 있도록 변경할 예정.
현재 상태머신의 Transition을 설정하는 부분마다 플레이어가 어떤 도구를 들고 있는지 검사하여 해당 도구에 알맞는 상태로 전환하는 코드가 여러 상태에 퍼져있다.
다른 도구의 애니메이션이나 새로운 상태가 추가될 때마다 이 부분들을 모두 찾아서 if-else문을 추가해야하는 구조인데, 이를 PlayerIdleState
, PlayerRunState
의 Enter()
메서드에서 결정할 수 있도록 변경할 예정.
Transition 설정 시에는 그냥 상태를 전환해주기만 하면 된다.
이 상태들은 다들 플레이어가 어떤 오브젝트에 상호작용을 했을 때 진입하는 상태이다.
이 상태들 역시 중복되는 코드가 많아서 PlayerInteractState
로 기능을 병합하고, 다르게 동작해야하는 부분은 상호작용되는 오브젝트의 인터페이스를 통해 결정할 수 있는 구조로 변경할 예정.
BuildableObject
컴포넌트에 상속하여, 플레이어가 상호작용 시 건축물을 망치로 파괴할 수 있도록 할 예정.
현재 PlayerDestroyState
에서 파괴할 오브젝트의 이름으로 반환받을 레시피 재료를 추출하는 작업을 하고 있는데, 이를 BuildableObject
가 자신의 레시피 재료를 반환해주도록 메서드를 추가하는게 좋아보임.
현재는 각 상태의 Enter() 메서드에서 OverlapSphere()를 이용해 근처의 오브젝트를 탐색한 다음, 탐색된 오브젝트 중 0번째 인덱스의 오브젝트에게 상호작용을 하는 중
-> 근처에 있는 여러 개의 오브젝트 중, 상호작용 할 수 있는 오브젝트가 있는데도 상호작용을 할 수 없는 오브젝트에게 상호작용을 해서 아무것도 안하는 현상이 발생
-> 근처에 있는 여러 개의 오브젝트 중, 사용자가 의도치 않은 오브젝트에게 상호작용되는 현상이 발생
PlayerBaseState
의 OnInteractStarte()
메서드에서 OverlapSphere()로 근처의 오브젝트들을 탐색한 후, 탐색된 모든 오브젝트들 중 우선순위를 지정하여 상호작용할 수 있도록 개선할 예정.
상호작용에 필요한 데이터들을 미리 전달받을 수 있는 메서드를 추가하면 좋을 것 같음.
-> 채집에 걸리는 시간, 도구의 내구도 소모량 등을 조절 가능