오늘 팀원들끼리 모여서 각자 맡은 기능을 병합하는 시간을 가졌다. 병합 자체는 아무 문제없이
진행 됐지만 큰 문제가 하나있었다. Scene에서 다른 Scene으로 이동하는 경우에 각각의 Prefab은
어느 Scene에서나 실행되어야 하는데 지금 내 Prefab은 독립적이지 않고 정보가 다 빠져있었다.
그래서 이 Prefab을 어떻게하면 독립적으로 관리할 수 있는지 설명하고자한다.
1 - 1. 문제점
현재 내가 만들고 있는 TestScene이다. 여기에서 Player라는 프리팹에 적용되어 있는 Inventory Script에
InventoryCanvas의 Btn값들을 모두 집어 넣었다. 그리고 오버라이드를 모두 적용하고 아래에 공용 Prefab
폴더에 InventoryCanvas와 Player 프리팹을 넣어놨다. 하지만 이렇게 할 경우 문제점이 생긴다.
이런식으로 다른 공용 프리팹 폴더에는 적용되어 있던 값이 모두 빠져나가게 된다.
이렇게되면 다른 팀원들이 내 Prefab을 사용할 때 값이 없기 때문에 많은 오류가 발생한다.
1 - 2. 문제점
Player에 적용되어있는 Scrip파일인 Equip Manager, Interaction Managerm Inventory의 객체를
공유하기 위해서 Player파일 자체를 게임매니저에 값을 넣어주어 스크립트를 연동했다.
1 - 1 문제와 같이 공용프리팹에 게임매니저 프리팹을 넣으면 값이 모두 빠지게 된다.
왜냐하면 내 Scene에서는 Player파일이 같이 존재했지만 만약 다른 Scene에서 Player가
필요없게 된다면 이렇게 값이 모두 빠져버려 오류가 발생하게된다.
2 - 1. 해결법
Player프리팹에 InventoryCanvas를 넣어서 안에 있는 Inventory Canvas의 값을 넣어주면된다.
이런 형식으로 진행한다면 Player안에 정보값들이 모두 들어있는 상태이기 때문에 공용 프리팹에
넣어도 정보값이 사라지지 않는다. 주의할점은 나는 InventoryCanvas와 Player가 밀접한 관련이 있기
때문에 이런 형식으로 사용했지만 만약에 전혀관련없는 UI Prefab이라면 따로 UIManager에 값을 보내야
할 것이다. 상황에 맞게 사용하자.
1 - 2. 해결법
현재 Player 파일에는 Equip Manager, ItemManager, Inventory Script가 적용돼있다.
그렇기 때문에 예를 들어 EquipManager Script로 진입하여 현재 Player를 통해 실행되고있는 이 부분을
GameManager에 선언된 equipManager부분에 싱글톤으로 자신의 값을 넣어주는 것이다.
"GameManager.Instance._equipManager = this;"
이런 형식으로 코드를 작성한다면 Player프리팹이 어느 Scene에 있어도 실행된 그 순간의 정보를 게임매니저에게
보내기 때문에 값이 들어가지 않는 상황을 대비할 수 있다.
회고
항상 프로젝트를 진행할 때 프리팹을 내 Scene에서만 작동이 잘되게 만들었다. 사실 오늘 팀원이 문제에 대한 지적을 해줄 때 까진 이게 무슨 문제인지 그 자체를 모르고있었다. 문제를인지하고 깨닫게 된 것은 항상 팀원과의 협업은 상대방을 배려하고 존중해야 하는 것이 기본이되어야 하지만 코드를 통해서도 상대방을 배려하고 존중하는 자세가 필요하다는 것을 알게되었다..
'TIL > Unity' 카테고리의 다른 글
[Unity 3D] 간단한 건물 제작 기능 ProBuilder (0) | 2023.10.05 |
---|---|
[Unity] 애니메이션 동작에 함수넣기 (0) | 2023.10.04 |
[Unity] GameManager로 다른 매니저 모두 관리하기 (0) | 2023.09.26 |
[Unity] 최적화 방법 StringtoHash (0) | 2023.09.25 |
[Unity] 사용자의 입력을 받는 기능 Input Field (0) | 2023.09.22 |