[ 오브젝트 컴포넌트에 플레이어 위치 자동 할당 ]
트러블 슈팅
건물 에셋을 가져왔는데, 기존에 있던 임시 플레이어를 삭제하고 새로운 플레이어를 생성했더니 기존에 할당되어 있던 플레이어 오브젝트가 모두 None이 되면서 문이 열리지 않게 되었다. 문 외에도 서랍장, 창문 등 열리고 닫히는 오브젝트와의 상호작용 자체가 되지 않았다. 모든 것을 할당하기에는 오브젝트가 몇 백개라서 현실적으로 일일이 할당하기란 불가능했다.
오브젝트가 프리팹이라서 프로젝트에서 프리팹을 수정하면 되지 않을까했는데, 스크립트가 있는 오브젝트가 자식 오브젝트라서 플레이어를 할당할 수 없었다. 그리고 오브젝트 수도 엄청 많아서 이것도 현실적으로 불가능했다.
그래서 각 오브젝트에 있는 스크립트를 수정하는 방향으로 해결했다. 문을 여닫고 싶은 오브젝트의 스크립트만 수정하면 된다. 플레이어 관련해서 싱글톤이 미리 구현되어 있었기 때문에 Start 메서드에서 자동으로 플레이어 위치를 할당하는 코드를 추가했다.
단점이라면 스크립트가 있는 모든 오브젝트가 일괄 적용되기 때문에, 열리지 않아야 하는 문도 열리게 되었다. 하지만 상대적으로 열리지 말아야하는 문 개수는 적어서 직접 None으로 수정했다. 그리고 스크립트의 수도 꽤 되고 여러 폴더에 분포되어 있어서 직접 테스트를 하면서 안 열리는 오브젝트의 스크립트를 찾아 수정해야 하는 점이 조금 불편했다.
[ Can't add script ]
트러블 슈팅
컴포넌트에 추가가 되지 않는 경우는 크게 3가지가 있다.
1. 스크립트가 저장이 되지 않았을 때
2. 파일명과 클래스명이 다를 때
3. 에러가 존재할 때
하지만 아무런 변경 사항이 없었기 때문에 위 3가지 모두 해당되지 않았다. 이럴 때는 해당 스크립트를 선택하고, 인스펙터 창에서 ...을 클릭하면 나오는 Reset 버튼을 누르면 해결할 수 있다.
[ 회고 ]
에셋을 가져와서 사용하니까 기존에 있던 스크립트를 사용하게 돼서 편한 점도 있지만, 어디에 어떤 스크립트가 사용되고 있는지 정확히 알 수 없어서 파악하는 것이 어려웠다. 오브젝트 같은 경우에도 바로 보이는 openclose 관련해서 door, window, drawer 정도만 수정하면 될 줄 알았는데, 실제로 플레이해 보니 정상적으로 여닫히지 않는 오브젝트가 많았다. 생각해 보니까 당연한 게 단순히 사람 입장에서는 열고 닫는다는 행위만 있는 건데, 컴퓨터 입장에서는 각 문이나 뚜껑마다 여닫히는 각도도 다르고 움직임도 다르고 이미지도 다르기 때문에 스크립트가 세분되어 있을 수밖에 없었다. 앞으로 코드를 작성할 때도 이러한 부분을 염두에 두고 기능을 세분화해야겠다.
'Coding > Unity' 카테고리의 다른 글
[내일배움캠프 40일차 TIL] Input System 다이렉트, 임베디드, 액션 에셋, C# 제너레이트, Action Properties (0) | 2024.06.12 |
---|---|
[내일배움캠프 38일차 TIL] 아이템 데이터 참조 에러 트러블 슈팅 (0) | 2024.06.10 |
[내일배움캠프 32일차 TIL] 아이템 사용 트러블 슈팅 (0) | 2024.05.30 |
[내일배움캠프 30일차 TIL] 인벤토리 창 트러블 슈팅 (0) | 2024.05.28 |
[내일배움캠프 23일차 TIL] 스크립터블 오브젝트, 레이어 마스크, 비트 시프트 연산, 오브젝트 풀링, FindGameobjectWithTag (0) | 2024.05.17 |