Unity 5.02로 'C#과 자바스크립트로 하는 유니티 3.x 게임 개발' 5장 상호작용, 6장 수집, 인벤토리, HUD 따라하기.

18/9/6 목

* 레이캐스트를 활용한 문 여닫기:
- 주인공 위치에서 앞쪽방향으로 3m 길이 가상선을 그려 가상선에 충돌한 물체의 태그가 문이면 SendMessage() 함수를 이용, 해당 물체에 DoorCheck함수 실행 메시지 전송하는 방식으로 문 열고 시간이 지나면 자동으로 문 닫기 처리.
'DoorManager.cs'를 생성, Hierarchy-outPost-door에 적용하고 DoorOpenSound, DoorShutSound에 각각 door_open.wav, door_shut.wav 드래그하여 적용.
'PlayerCollisions2.cs' 새로 생성, FPSController에 추가. 기존의 'PlayerCollisions.cs'는 비활성화 처리.
해보니 제대로 작동한다. 다만 당연하지만 뒤돌아서 접근시는 문이 열리지 않는다.

- SendMessage("함수명") 함수는 해당 게임오브젝트에 연결된 모든 스크립트를 검사하고 해당 함수명의 함수를 찾아 실행시킨다.

* Trigger를 활용한 문 여닫기:
- 건물에 Box Collider로 Trigger를 만들고 그곳에 충돌한 것의 태그가 "Player"이면 SendMessage() 함수를 이용, 자식인 문의 DoorCheck함수 실행 메시지 전송하는 방식으로 문 열고 시간이 지나면 자동으로 문 닫기 처리.
이건 FPSController에 Player 태그 지정하고 건물에 Box Collider 추가, IsTrigger: On 설정하고 크기 조절한 뒤 OnTriggerEnter() 함수만 있는 'TriggerZone.cs'만 추가하면 된다. 열기는 작동하는데 시간 지난 뒤 자동 닫기가 안되고 있다.
여러번 테스트해 보는데 여전히 닫기가 안되고 OnTriggerEnter() 안에 Debug.Log()를 넣어도 나오지 않는다. 자동닫기는 안되는데 열기가 되는 것도 신기.
- 일단 레이케스트 활용 문 여닫기가 가장 확실히 작동되어 그걸로 해놓다. 미련이 남아 계속 테스트해 봤지만 마찮가지.
- 해결: if (other.gameObject.tag == "Player")에서 Player여야 하는데 player라고 오타를 쳐서 작동이 안되었던 거였다.

Unity 5.02로 'C#과 자바스크립트로 하는 유니티 3.x 게임 개발' 6장 수집, 인벤토리, HUD 따라하기.

* 파워셀 아이템 맵상에 배치하고 습득하게 하기.
powerCell.fbx 배치하고 Scale Factor: 1.6으로 하여 크기 키우기, Capsule Collider 추가, IsTrigger: On. Rigidbody 추가, Use Gravity: Off, Is Kinematic: On으로 설정. 회전하게 하고 주인공과 닿으면 CellPickup() 함수 작동하게 메시지를 보내는 'PowerCell.cs' 생성하여 추가.
주인공에게 'Inventory.cs' 생성하여 추가.

* 전지 4개를 습득해야 문이 열리게 하기:
'TriggerZone.cs'에 주인공 Inventory.charge가 4여야 문이 열리는 if문 코드 추가.
- 화면표시에 책에선 5.2에서 폐지된 GUITexture를 사용하고 있어 어떻게 바꿀지 애먹고 있는 중. Component-Rendering에서 컴포넌트 형태로 추가는 가능하지만 화면에 보이질 않고 UI-Image로 할 경우는 어떻게 소스 이미지를 변경할지 모르겠다.
- 해결: GUITexture 대신 UI-Image를, Texture2D[] 대신 Sprite[]를 사용하여 전지 습득시 HUD의 전지모양 바뀌게 하기 성공.

* 주인공이 일단 초소에 들어가려 하다 실패한 경우에 전지UI 표시하기:
'TriggerZone' 코드 수정하여 주인공이 전지를 다 모으지 못한 상태에서 문에 다가가거나 전지를 처음 먹을 경우에야 전지UI가 표시되게 변경.
* 발전기 추가하고 전지 먹을 때마다 발전기의 표시화면 바꾸기:
Generator.fbx 맵상에 배치, 자식 generator에 Box Collider 추가.
'Inventory.cs'에 코드 추가하여 전지 먹을 때 마다 발전기의 표시화면도 변경하게 처리.

* 문 잠금 상태 표시:
- 초소의 문 윗쪽 등 부분에 Point light 추가하여 배치, Range: 1.2, Color: 붉은색, Intensity: 3으로 설정.
'TriggerZone.cs'에 코드 추가하여 전지 4개 모두 모으고 문을 열 때 초소 등 조명을 녹색으로 변경하고 전지UI 제거하기.

* 단서를 주기위해 화면상 텍스트 표시하기:
GUI-Text 추가. Alignment: 가운데, Horizontal/Vertical Overflow: Overflow로 설정. 'TriggerZone.cs'에 코드 추가하여 문이 잠겨있는 상태에 다가갈 때 Text에 힌트 표시하게 처리. 힌트는 타이머에 지정한 시간만큼만 표시되다가 사라진다.