Priv's Blog
Programming Basics: Unit 1 - Player Control) Lesson 1.4 - Step into the Driver's Seat 본문
Programming Basics: Unit 1 - Player Control) Lesson 1.4 - Step into the Driver's Seat
Priv 2021. 2. 2. 22:52출처
1. 서언
(영상: 링크 참조)
2. 차량을 좌/우로 움직이게 만들기
지금까지를 보면, 차량은 오직 도로를 따라 앞으로만 움직일 수 있었습니다. 장애물을 피하기 위해 차량을 좌우로 움직일 수 있게 만들어야 합니다.
(영상: 링크 참조)
-
PlayerController.cs의 상단에, public float turnSpeed; 변수를 추가해주세요.
-
Update() 내에서, transform.Translate(Vector3.right * Time.deltaTime * turnSpeed);를 추가해주세요.
-
게임을 실행하고 turnSpeed 변수 슬라이더를 이용해 차량을 좌, 우로 움직여보세요.
public float turnSpeed;
void Update()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed);
}
3. 입력값을 이용해 좌/우 움직임 조종하기
현재, 여러분은 Inspector 내에서 차량의 좌/우만 제어할 수 있습니다. 여러분은 플레이어에게 약간의 힘을 부여하고, 플레이어들이 차량의 움직임을 스스로 제어할 수 있도록 만들어야 합니다.
(영상: 링크 참조)
-
PlayController.cs 안에 새로 public float horizontalInput 변수를 추가해주세요.
-
Update 안에, horizontallInput = Input.GetAxis("Horizontal");을 선언하고 Inspector에서 확인하도록 테스트해주세요.
-
차량을 제어하기 위해 horizontalInput 변수를 여러분의 좌/우 Translate 메서드에 추가해주세요.
-
Inspector에서, turnSpeed를 설정하시고 speed 변숫값을 수정해 조작감을 조정해주세요.
public float horizontalInput;
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
transform.Translate(Vector3.forward * Time.deltaTime * speed);
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed * horizontalInput);
}
4. 차량 속도 제어하기
이제 여러분은 플레이어가 핸들을 조작할 수 있도록 만들었습니다. 하지만 가속 페달과 브레이크 또한 플레이어가 조작할 수 있도록 만들고 싶습니다.
(영상: 링크 참조)
-
새로운 public forwardInput 변수를 선언해주세요.
-
Update 안에 forwardInput = Input.GetAxis("Vertical");을 할당해주세요.
-
forwardInput 변수를 Translate 메서드 앞에 추가하고 테스트해주세요.
public float horizontalInput;
public float forwardInput;
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed * horizontalInput);
}
5. 차량을 미끄러지는 것 대신 회전하도록 만들기
차량 움직임에 어딘가 조금 이상한 부분이 있습니다... 차량이 좌 우로 회전하는 것이 아니라 미끄러지고 있습니다. 이제 차량이 현실적으로 회전할 수 있도록 만들어봅시다!
(영상: 링크 참조)
Update 안에 transform.Rotate(Vector3.up, horizontalInput)을 호출하고 테스트해보세요.
translates Right 코드 부분을 삭제하고 테스트해보세요.
* turnSpeed * Time.deltaTime을 추가하고 테스트해보세요.
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.forward * Time.deltaTime * speed);
transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}
6. 코드와 hierarchy 정리하기
여러분은 이번 수업에서 정말 많은 새로운 요소들을 추가했습니다. 단원을 계속 진행하기 전에 보다 전문적으로 되기 위해서는 여러분들이 작성한 스크립트와 hierarchy를 정리하여 보다 정돈되게 만들어야 합니다.
(영상: 링크 참조)
-
hierarchy에서 마우스 우-클릭 > Create Empty를 클릭하시고 이름을 "Obstacles"로 바꿔주신 뒤에 모든 장애물들을 해당 오브젝트로 드래그해주세요.
-
PlayerController 내의 변수들의 값을 초기화한 다음, 모든 변수를 private로 만들어주세요. (player 변수 제외)
-
// 기호를 사용해서 주석을 각각의 코드 섹션에 추가해주세요.
private float speed = 20.0f;
private float turnSpeed = 45.0f;
private float horizontalInput;
private float forwardInput;
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
// Moves the car forward based on vertical input
transform.Translate(Vector3.forward * Time.deltaTime * speed);
// Rotates the car based on horizontal input
transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}
7. 내용 복습
(영상: 링크 참조)
- 새로 배운 기능들
-
플레이어가 위/아래 화살표를 눌렀을 때, 차량이 앞/뒤로 움직이게 만들기
-
플레이어가 좌/우 화살표를 눌렀을 때, 차량을 회전시키기
- 새로 배운 개념들과 기술들
-
빈 오브젝트
-
사용자 입력받기
-
Translate vs Rotate