# 닷지 플레이어 제작 2
#1 플레이어 스크립트 생성
Player 게임 오브젝트를 조종하는 PlayerController 스크립트를 준비한다. 이 스크립트에서는 사용자의 키보드 입력을 감지해야 하고, 리지드바디를 사용하여 Player 게임 오브젝트를 움직일 수 있어야 한다. 프로젝트 창에서 스크립트를 생성해준다. 스크립트를 생성하고 코드를 아래와 같이 적어주어 기본 세팅을 해주자.
#2 사용자 입력 감지
입력을 감지하기 위해, Update() 메서드와 Input 클래스의 입력 감지 메서드가 필요하다. Update() 메서드는 Start() 메서드처럼 특정 시점에 자동으로 실행되는 유니티 이벤트 메서드이다. Update() 메서드는 한 프레임에 한 번, 매 프레임마다 반복 실행된다. 만약 60 FPS로 화면이 갱신되면 Update() 메서드는 1초에 60회 실행된다. Input 클래스는 사용자 입력을 감지하는 메서드를 모아둔 집합이다. Input의 입력 감지 메서드는 실행 시점에 어떤 키를 눌렀는지 알려준다. PlayerController 스크립트를 아래와 같이 이어서 코딩해준다.
#3 플레이어 사망 처리
다음은 플레이어 사망 처리를 실행하는 Die() 메서드를 만들어 플레이어 사망을 구현한다. Die 메서드는 플레이어가 탄알과 충돌했을 때 실행된다. 탄알과 플레이어 사이의 충돌은 다음에 탄알을 구현할 때 같이 한다. Die() 메서드를 아래와 같이 추가해주자.
이제 코드를 저장해주고, PlayerController 스크립트를 하이어라키 창의 Player 게임 오브젝트에 드래그해준다. 다음은 전에 했던 것과 같이 하이어라키 창에서 Player 게임 오브젝트를 선택한 뒤, 인스펙터 창에서 Rigidbody 컴포넌트를 PlayerController 컴포넌트의 Player Rigidbody 필드로 드래그해준다. 그럼 아래와 같이 될 거다.
그러면 플레이 버튼을 눌러서 PLayerController 스크립트를 테스트해보자. 게임의 동작은 게임창에서 확인할 수 있다. 정상 실행이 된다면 아래와 같이 플레이될 것이다.
#4 PlayerController 스크립트 개선하기
PlayerController 스크립트를 완성했지만 아래와 같은 몇 가지 문제가 있다.
- 1. 조작이 게임에 즉시 반영되지 않는다.
- 2. 입력 감지 코드가 복잡하다.
- 3. PlayerRigidbody에 컴포넌트를 드래그하여 할당하는 것이 불편하다.
먼저 Start() 메서드를 이용하여 게임이 시작될 때 변수 Player Rigidbody에 리지드바디 컴포넌트의 참조를 할당하도록 수정해 준다.
위와 같이 코드를 작성하게 되면 PlayerRigidbody 필드가 아래처럼 사라지게 된다.
다음은 조작감을 개선하기 위해 기존의 Update() 메서드를 아래와 같이 수정하여 코드를 더 간결하게 만들고 조작이 이동 속도에 즉시 반영되도록 개선해보자.
#MEMO
이번장은 이걸로 끝나고 내일부터는 탄알을 제작할 것이다. 이제 절반 정도 구현했으니 남은 절반도 파이팅.
