Priv's Blog

Programming Basics: Unit 1 - Player Control) Lesson 1.4 - Step into the Driver's Seat 본문

Unity Learn/Pathway: Junior Programmer

Programming Basics: Unit 1 - Player Control) Lesson 1.4 - Step into the Driver's Seat

Priv 2021. 2. 2. 22:52

출처

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

 

1. 서언


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 


 

2. 차량을 좌/우로 움직이게 만들기

지금까지를 보면, 차량은 오직 도로를 따라 앞으로만 움직일 수 있었습니다. 장애물을 피하기 위해 차량을 좌우로 움직일 수 있게 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

  1. PlayerController.cs의 상단에, public float turnSpeed; 변수를 추가해주세요.

  2. Update() 내에서, transform.Translate(Vector3.right * Time.deltaTime * turnSpeed);를 추가해주세요.

  3. 게임을 실행하고 turnSpeed 변수 슬라이더를 이용해 차량을 좌, 우로 움직여보세요.

 

public float turnSpeed;

void Update()
{
    transform.Translate(Vector3.forward * Time.deltaTime * speed);
    transform.Translate(Vector3.right * Time.deltaTime * turnSpeed);  
}

 


 

3. 입력값을 이용해 좌/우 움직임 조종하기

현재, 여러분은 Inspector 내에서 차량의 좌/우만 제어할 수 있습니다. 여러분은 플레이어에게 약간의 힘을 부여하고, 플레이어들이 차량의 움직임을 스스로 제어할 수 있도록 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

  1. PlayController.cs 안에 새로 public float horizontalInput 변수를 추가해주세요.

  2. Update 안에, horizontallInput = Input.GetAxis("Horizontal");을 선언하고 Inspector에서 확인하도록 테스트해주세요.

  3. 차량을 제어하기 위해 horizontalInput 변수를 여러분의 좌/우 Translate 메서드에 추가해주세요.

  4. 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. 차량 속도 제어하기

이제 여러분은 플레이어가 핸들을 조작할 수 있도록 만들었습니다. 하지만 가속 페달과 브레이크 또한 플레이어가 조작할 수 있도록 만들고 싶습니다.

 


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

  1. 새로운 public forwardInput 변수를 선언해주세요.

  2. Update 안에 forwardInput = Input.GetAxis("Vertical");을 할당해주세요.

  3. 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. 차량을 미끄러지는 것 대신 회전하도록 만들기

차량 움직임에 어딘가 조금 이상한 부분이 있습니다... 차량이 좌 우로 회전하는 것이 아니라 미끄러지고 있습니다. 이제 차량이 현실적으로 회전할 수 있도록 만들어봅시다!

 


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

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를 정리하여 보다 정돈되게 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

  1. hierarchy에서 마우스 우-클릭 > Create Empty를 클릭하시고 이름을 "Obstacles"로 바꿔주신 뒤에 모든 장애물들을 해당 오브젝트로 드래그해주세요.

  2. PlayerController 내의 변수들의 값을 초기화한 다음, 모든 변수를 private로 만들어주세요. (player 변수 제외)

  3. // 기호를 사용해서 주석을 각각의 코드 섹션에 추가해주세요.

 

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. 내용 복습


(영상: 링크 참조)

 

Lesson 1.4 - Step into the Driver's Seat - Unity Learn

Overview: In this lesson, we need to hit the road and gain control of the vehicle. In order to do so, we need to detect when the player is pressing the arrow keys, then accelerate and turn the vehicle based on that input. Using new methods, Vectors, and va

learn.unity.com


 

- 새로 배운 기능들

  • 플레이어가 위/아래 화살표를 눌렀을 때, 차량이 앞/뒤로 움직이게 만들기

  • 플레이어가 좌/우 화살표를 눌렀을 때, 차량을 회전시키기

 

- 새로 배운 개념들과 기술들

  • 빈 오브젝트

  • 사용자 입력받기

  • Translate vs Rotate

 


 


수고하셨습니다!


Comments