인벤토리와 같은 UI를 활성화 시 클릭을 해야하는 상황이 오는데 그 때 아이템을
선택함과 동시에 공격 버튼이 나간다면 참 난감할 것이다. 그래서 이러한 상황을 없애기 위한
방법을 알아보고자 한다.
1. 문제점
이 부분은 인풋액션 값이 들어오면 하이라키 창을 조건으로 걸어 인벤토리를
온/오프 하는 토글 가능인데 여기서 문제점이 있다.
1. 인벤토리가 켜질 때 마우스 포인터가 보이고 끄면 없어져야 한다.
2. 인벤토리의 아이템을 클릭 시 플레이어의 행동은 멈춰야 한다.
이러한 조건을 만족하지 못한다는 것이 큰 문제점이다.
2. 해결법
우선 UIManager에 UI의 게임오브젝트를 추가하거나 삭제하는 함수를 만든다.
예를 들어 인벤토리라는 게임오브젝트를 AddUICound 함수에 넣어 사용한다면
해쉬셋에 우선 인벤토리 게임오브젝트가 저장된다. 우선 사운드매니저 부분은 관련이 없으니
무시하고 CheckInputAction 함수로 진행하게된다.
우선 input 값이 아무것도 들어있지 않다면 리스틀 추가해준다.
이 코드에선 게임매니저에 Player태그를 가져오는 GetPlayer함수를 사용했는데
결국 InputAction값이 들어 있는 클래스를 가져오면된다.
다음으로 플레이어 값이 들어있고 인풋값이 0보다 같거 작을 시
플레이어가 갖고 있는 InputAction값 즉, 움직임, 공격, 마우스 시점 변환 등 모든 동작을
리스트에 추가하게 된다.
그리고 해쉬셋으로 선언한 uiCounter 값에 따른 false나 true값을 넘겨주며
IgnoreInput 함수로 진행하게 된다.
이곳에서 true로 들어왔다면 마우스 커서의 visible과 lockState를 풀어주고
전 함수에서 저장한 input리스트에 행동들을 모두 비활성화 해준다.
반대로 false로 들어왔다면 마우스 커서의 visible, lockState를 잠금해주고
다시 플레이어의 행동들을 활성화 해준다.
이러한 순서로 UIManager에 기능을 구현하면 인벤토리는 물론이고 다른 UI들도
쉽게 적용할 수있다. 다시말해 재사용성이 굉장히 높아진다고 할 수 있다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 유니티 프로젝트 Git ignore 파일 팁 (0) | 2023.10.16 |
---|---|
[Unity] Input Action 적용법 (1) | 2023.10.13 |
[Unity3D] Vector3와 Transform의 방향 차이점 (0) | 2023.10.10 |
[Unity 3D] 간단한 카메라 설정 Virtual Camera (1) | 2023.10.06 |
[Unity 3D] 간단한 건물 제작 기능 ProBuilder (0) | 2023.10.05 |