Priv's Blog

Programming Simple Functionality: Unit 3 - Sound and Effects) Lesson 3.1 - Jump Force 본문

Unity Learn/Pathway: Junior Programmer

Programming Simple Functionality: Unit 3 - Sound and Effects) Lesson 3.1 - Jump Force

Priv 2021. 7. 24. 18:06

출처

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

 

1. 서언


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

 


 

2. 프로토타입 열기 & 배경 바꾸기

새로운 프로젝트를 설정하기 위해 여러분이 가장 먼저 해야 할 일은, 스타터 파일들을 import 하고, 게임의 배경을 선택하는 것입니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. Unity Hub를 열고 "Prototype 3" 프로젝트를 여러분의 course 폴더 내에 새로 생성해주세요.
  2. 링크를 클릭하셔서 Prototype 3 스타터 파일에 접근하시고, 파일을 다운로드하셔서 유니티에 import 해주세요.
  3. Prototype 3 scene을 여시고 Sample Scene을 저장 없이 삭제해주세요.
  4. hierarchy에서 Background 오브젝트를 선택하시고 Sprite Renderer 컴포넌트 안에서 > Sprite로 가셔서, _City, _Nature 또는 _Town 이미지를 선택해주세요

 


 

3. 플레이어 캐릭터 선택 및 설정하기

프로젝트를 시작했고 배경도 선택하였으므로, 이제 플레이어가 조종할 캐릭터를 설정할 차례입니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. Course Library > Characters에서 캐릭터를 hierarchy로 드래그, "Player"로 이름을 바꾸신 뒤, Y 축으로 회전하여 우측면을 바라보도록 만들어주세요.
  2. Rigid Body 컴포넌트를 추가해주세요.
  3. box collider를 추가하시고, collider 테두리를 조정해주세요.
  4. 새로운 "Scripts" 폴더를 Assets 안에 생성하시고, 폴더 내에 "PlayerController" 스크립트를 생성하셔서 플레이어에 부착해주세요.

 


 

4. 게임이 시작되었을 때 플레이어가 점프하도록 만들기

지금까지 여러분은 게임 오브젝트 또는 transform 컴포넌트 전체에 대한 메서드만 호출했습니다. 만약 여러분이 플레이어의 더 많은 중력과 힘을 제어하고 싶으시다면, 플레이어의 Rigidbody 컴포넌트를 호출하셔야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. PlayerController.cs 내에 새로운 변수, private Rigidbody playerRb; 를 선언해주세요.
  2. Start() 내에 playerRb = GetComponent<Rigidbody>(); 를 선언해주세요.
  3. Start() 내에 AddForce 메서드를 사용하여 게임이 시작되면 플레이어가 점프하도록 만들어주세요.

 

 


 

5. 스페이스 바를 눌렀을 때 플레이어가 점프하도록 만들기

플레이어가 게임이 시작되었을 때 점프하는 것은 원치 않습니다. - 여러분이 스페이스바를 눌러 점프 명령을 내렸을 때만 점프하도록 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. Update() 내에 if을 추가하여 스페이스바를 눌렀을 때를 검사하도록 만들어주세요.
  2. AddForce 코드를 Start()에서 잘라내서 if문 안으로 붙여넣기해주세요.
  3. ForceMode.Impulse 파라미터를 AddForce 호출에 추가하시고, 힘 증가 값(force multiplier value)을 줄여주세요.

 

 


 

6. 점프력과 중력 조정하기

점프력과 중력의 크기, 캐릭터의 질량을 조정하여 플레이어가 완벽한 점프를 보여줄 수 있도록 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. 하드 코딩된 값을 새로 선언한 변수, public float jumpForce대체해주세요.
  2. 새 변수, public float gravityModifier를 추가하고, Start() 내에 Physics.gravity *= gravityModifier;를 추가해주세요.
  3. inspector 내에서 gravityModifier, jumpForce, Rigidbody 질량 값을 게임이 더 재밌어지도록 조정해주세요.

 

 


 

7. 플레이어의 더블-점프 방지하기

눈치채셨겠지만, 플레이어가 스페이스바를 연타하면 캐릭터를 하늘 위로 날려버릴 수 있습니다. 이러한 어처구니없는 악용을 막고 점프를 보다 현실적으로 만들기 위해 여러분은 if문을 사용해 플레이어가 점프하기 이전에 땅을 밟고 있는지를 점검하도록 해야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. 새로운 변수 public bool isOnGround를 추가하시고, 값을 true로 설정해주세요.
  2. 플레이어가 점프하도록 만드는 if문 내에 isOnGround = false를 기입하시고, 테스트해주세요.
  3. if의 조건에 && isOnGround를 추가해주세요.
  4. 새로운 메서드, void OnCollisionEnter를 추가하시고 메서드 안에 isOnGround = true를 기입하신 뒤, 테스트해주세요.

 

 

public bool isOnGround = true;

void Update()
{
     if (Input.GetKeyDown(KeyCode.Space) && isOnGround)
     {
          playerRb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
          isOnGround = false;
     }
}

private void OnCollisionEnter(Collision collision)
{
     isOnGround = true;
}

 


 

8. 장애물을 만들고 왼쪽으로 움직이게 만들기

이제 플레이어가 점프할 수 있도록 만들었으므로, 이제 플레이어가 뛰어넘을 무언가가 필요합니다. 여러분에게 익숙한 코드를 사용하여 장애물들을 인스턴스화하고 플레이어의 경로에 나타나도록 만들어보겠습니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. Course Library > Obstacles로 가셔서 장애물을 추가하시고, 오브젝트 이름을 "Obstacle"로 변경해주신 뒤, 생성할 위치에 배치해주세요.
  2. Rigid Body와 Box Collider 컴포넌트를 추가하시고, 장애물의 사이즈에 맞게 collider를 조정해주세요.
  3. 새로운 "Prefabs" 폴더를 생성하시고, 새로 만든 원본 프리팹을 드래그해주세요.
  4. "MoveLeft" 스크립트를 만들고, 장애물에 적용하신 뒤, 파일을 열어주세요.
  5. MoveLeft.cs에서 speed 변수에 따라 왼쪽으로 움직이게 만드는 코드를 작성해주세요.
  6. MoveLeft 스크립트를 Background 오브젝트에 적용해주세요.

 

 


 

9. spawn manager 제작하기

이전 프로젝트와 유사하게, 장애물 프리팹들을 인스턴스화할 Spawn Manager라는 빈 오브젝트를 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. 새로운 빈 오브젝트, "Spawn Manager"를 생성하시고, 새로운 SpawnManager.cs 스크립트를 오브젝트에 적용해주세요.
  2. SpawnManager.cs 내에서 새로운 public GameObject obstaclePrefab;을 정의하시고, 여러분의 프리팹을 inspector 내의 새로운 변수에 할당해주세요.
  3. 새로운 private Vector3 spawnPos를 여러분의 생성 위치에 선언해주세요.
  4. Start() 내에 새로운 장애물 프리팹을 인스턴스화하고, 여러분의 scene에 있는 프리팹을 삭제 후 테스트해주세요.

 

 


 

10. 간격에 따라 장애물들 생성하기

여러분의 spawn manager는 게임이 시작되면 프리팹들을 인스턴스화하고 있지만, 새로운 함수를 작성하고 InvokeRepeating을 활용하여 장애물들이 타이머에 맞춰 생성되도록 만들어야 합니다. 마지막으로는 캐릭터의 RigidBody를 수정하여 장애물들이 넘어지지 않도록 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

  1. 새로운 메서드 void SpawnObstacle를 선언하고 Instantiate 호출 구문 안으로 옮겨주세요.
  2. 새로운 float형 변수들, startDelayrepeatRate를 선언해주세요.
  3. InvokeRepeating() 메서드를 사용하여 여러분의 장애물들을 주기별로 생성해주세요.
  4. Player의 Rigidbody 컴포넌트에서 Constraints를 확장하시고, Y position 값을 제외한 나머지 항목들을 모두 고정시켜주세요.

 

 


 

11. 내용 복습


(영상: 링크 참조)

 

Lesson 3.1 - Jump Force - Unity Learn

Overview: The goal of this lesson is to set up the basic gameplay for this prototype. We will start by creating a new project and importing the starter files. Next we will choose a beautiful background and a character for the player to control, and allow t

learn.unity.com


 

- 새로 배운 기능들

  • 스페이스 바를 눌러 플레이어가 점프하도록 만들기
  • 플레이어가 더블-점프를 할 수 없도록 만들기
  • 장애물들과 배경화면이 왼쪽으로 움직이도록 만들기
  • 장애물이 시간 간격에 따라 생성되도록 만들기

 

- 핵심 개념들과 기술들

  • GetComponent
  • ForceMode.Impulse
  • Physics.Gravity
  • Rigidbody constraints
  • Rigidbody 변수
  • Booleans
  • 곱하기/할당 ("*) 연산자
  • And (&&) 연산자
  • OnCollisionEnter()

 

- 다음 시간에 학습할 내용

  • 코드를 사용해 배경화면을 무한히 왼쪽으로 움직이게 만듦으로써 발생하는 이상한 효과를 수정하겠습니다!

 


 


수고하셨습니다!


Comments