Menu
CoddyTech

세 개의 레인

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 27번째.

이 장에서는 끝없이 달리는 러너 게임을 만듭니다. 러너는 세 개의 차선이 있는 도로를 달리며, 자신에게 다가오는 장애물을 피하기 위해 차선을 바꿉니다. 다음 레슨들에서는 도로의 속도가 빨라지고, 화면에 거리가 표시되며, 충돌하면 달리기가 끝나고 다시 달릴 수 있는 버튼이 나타나고, 최고 기록이 저장됩니다. 러너는 앞으로 이동하지 않습니다. z = 0에 머무르고 장애물이 러너를 향해 이동하므로 도로는 끝나지 않습니다. 게임에는 Runner, Spawner, Obstacle, GameManager의 네 가지 스크립트가 있으며, 마지막 세 가지는 현재 비어 있습니다.

차선에서 달리는 러너는 자동차처럼 조종하지 않습니다. 몇 개의 정해진 위치 중 하나에 항상 있습니다. 위치를 정수로 저장하고, 키를 누르면 숫자를 바꾼 다음, 그 숫자를 바탕으로 위치를 계산하세요. 이 창문 청소용 플랫폼은 서로 3단위 떨어져 있는 건물의 다섯 층을 운행합니다.

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown은 한 번 누를 때마다 한 층씩 이동합니다. 반면 GetKey를 사용하면 키를 누르고 있는 동안 매 프레임마다 한 층씩 올라갑니다. Mathf.Clamp는 층수를 건물 안으로 제한하므로, 꼭대기 층에서 위쪽 키를 눌러도 아무 일도 일어나지 않고, 다음에 아래쪽 키를 누르면 바로 3층으로 이동합니다. Mathf.MoveTowards는 플랫폼을 초당 moveSpeed단위의 속도로 해당 층까지 이동시키고 정확히 그 위치에서 멈춥니다. 한 프레임 만에 그 위치로 순간 이동하는 것이 아닙니다. 위치는 복사본을 만들어 변경한 뒤 다시 할당합니다. transform.position.y는 단독으로 설정할 수 없기 때문입니다.

challenge icon

챌린지

중급

화살표 키를 사용해 러너가 세 개의 레인 사이를 이동하게 하세요.

  1. Runner의 Update()에서 Input.GetKeyDown(KeyCode.LeftArrow)일 때 lane--를 실행하고, 오른쪽 화살표 키일 때 lane++를 실행하세요.
  2. 도로를 벗어나지 않도록 하세요: lane = Mathf.Clamp(lane, -1, 1);.
  3. transform.position을 p에 복사하고, Mathf.MoveTowards를 사용해 laneSpeed * Time.deltaTime의 속도로 p.x를 lane * laneWidth 쪽으로 이동한 다음, p를 다시 할당하세요.

‘플레이’를 누르고 게임을 클릭한 뒤 레인을 바꿔 보세요. 러너가 미끄러지듯 이동합니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1은 왼쪽 차선, 0은 가운데 차선, 1은 오른쪽 차선

    void Update()
    {
        // 방향키로 차선을 바꾼 다음 해당 차선의 x 좌표를 향해 부드럽게 이동
    }
}

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드