코스
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 49번째.
이 장에서는 3D 플랫폼 게임을 만듭니다. 달리고 점프해 공중에 떠 있는 플랫폼들을 건너고, 미끄러지듯 움직이는 플랫폼을 타며, 떨어져도 시작 지점으로 돌아가지 않도록 체크포인트에 닿고, 화면에 개수가 표시되는 보석을 모으고, 결승선을 지나 다음 레벨로 가서 자신의 최고 기록을 깨 보세요. 게임은 프로젝트에 처음부터 들어 있는 다섯 개의 스크립트로 구성됩니다. Player, MovingPlatform, Checkpoint, Gem, FinishLine입니다. 마지막 네 개는 아직 비어 있으며, 각 강의에서 하나씩 채워 넣습니다. 플레이어는 Input System의 액션으로 조종하는 CharacterController이고, 카메라는 플레이어의 자식이므로 스크립트 없이 따라옵니다.
CharacterController는 두 가지 방식으로 움직입니다. Move(motion)은 일정한 거리만큼 이동시키고 다른 효과는 더하지 않으므로, 중력과 점프, Time.deltaTime 처리는 Character Controller 장에서처럼 스크립트가 담당해야 합니다. SimpleMove(speed)는 초당 단위로 속도를 받아 프레임 시간을 직접 곱하고 중력을 더합니다. 전달한 y 값은 무시하므로, 이 방식으로 이동하는 캐릭터는 절벽에서 떨어지지만 점프할 수는 없습니다. 위에서 내려다보는 목축 게임의 양치기 개는 점프할 필요가 없으므로, SimpleMove와 Move 액션만으로 전체 스크립트를 구성할 수 있습니다.
using UnityEngine;
using UnityEngine.InputSystem;
public class Sheepdog : MonoBehaviour
{
[SerializeField] private float speed = 6f;
private CharacterController controller;
private InputAction moveAction;
void Start()
{
controller = GetComponent<CharacterController>();
moveAction = InputSystem.actions.FindAction("Move");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
}
}플랫폼 게임의 플레이어는 점프해야 하므로 수직 속도를 직접 유지하고, Input 클래스 대신 Move 및 Jump 액션을 읽어 Move로 이동합니다. Unity는 프레임마다 Move 또는 SimpleMove를 한 번 호출하도록 권장합니다. 걷기와 낙하를 같은 호출에 넣으면 isGrounded가 그 전체 이동을 나타냅니다.
챌린지
중급플레이어가 걷고, 점프하고, 떨어지게 만드세요.
Start()에서InputSystem.actions.FindAction으로Move와Jump를 찾으세요.Update()에서speed로 걷게 하세요. Move의 x는 x축을 따라, y는 z축을 따라 움직이게 하세요.- 지면에 닿은 상태에서 떨어지고 있을 때
-2f를 설정하고,gravity * Time.deltaTime을velocity.y에 더하세요. 지면에 닿은 상태에서 점프하면Mathf.Sqrt(jumpHeight * -2f * gravity)를 설정하세요. controller.Move((move + velocity) * Time.deltaTime)를 한 번 호출하세요.
‘플레이’를 누르고 첫 번째 발판으로 점프하세요. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpHeight = 1.5f;
[SerializeField] private float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// Move 액션으로 걷고, Jump 액션으로 점프하고, 중력으로 떨어지기
}
}
실제 게임 만들기의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드