Menu
CoddyTech

유턴 금지

Coddy의 Unity 게임: 3D 스네이크 코스 레슨. 14개 중 3번째.

뱀이 곧바로 되돌아가면 자신의 목에 부딪히므로, 반대 방향으로의 회전은 무시됩니다. 방향의 반대는 그 방향의 음수입니다. 뱀이 오른쪽으로 움직일 때 -direction은 Vector3.left입니다.

키를 누르면 방향이 즉시 바뀌므로 direction과 비교하는 것만으로는 충분하지 않습니다. 오른쪽으로 움직이면서 한 틱 안에 위쪽을 누른 다음 왼쪽을 누르는 경우를 생각해 보세요. 위쪽 방향은 허용되고, 이어서 왼쪽 방향도 위쪽 방향과 비교해 허용되므로, 다음 이동에서 목을 다시 가로지르게 됩니다.

따라서 방향을 두 개 유지하세요. direction은 머리가 마지막으로 움직인 방향이고, nextDirection은 다음 이동을 기다리는 회전 방향입니다. 키를 누르면 direction과 비교한 후 nextDirection이 바뀌고, 이동할 때 대기 중인 회전이 실제로 적용됩니다.

challenge icon

챌린지

쉬움

뱀이 목을 향해 곧장 되돌아가지 않도록 하세요.

  1. private Vector3 nextDirection = Vector3.right;와 void Turn(Vector3 newDirection)을 추가하세요. newDirection == -direction이 아닐 때 nextDirection을 설정하세요.
  2. Update()에서 각 키가 direction을 설정하는 대신 해당 방향으로 Turn을 호출하도록 하세요.
  3. Step()의 시작 부분에서 direction = nextDirection;을 설정하세요.

‘플레이’를 누르고 오른쪽으로 이동하는 동안 왼쪽을 누르세요. 뱀은 계속 오른쪽으로 갑니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // 두 단계 사이의 시간(초)
    private float timer;
    private Vector3 direction = Vector3.right;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard != null)
        {
            if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) direction = Vector3.forward;
            if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) direction = Vector3.back;
            if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) direction = Vector3.left;
            if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) direction = Vector3.right;
        }

        timer += Time.deltaTime;
        if (timer >= tick)
        {
            timer -= tick;
            Step();
        }
    }

    void Step()
    {
        transform.position += direction;
    }
}

Unity 게임: 3D 스네이크의 모든 레슨

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