유턴 금지
Coddy의 Unity 게임: 3D 스네이크 코스 레슨. 14개 중 3번째.
뱀이 곧바로 되돌아가면 자신의 목에 부딪히므로, 반대 방향으로의 회전은 무시됩니다. 방향의 반대는 그 방향의 음수입니다. 뱀이 오른쪽으로 움직일 때 -direction은 Vector3.left입니다.
키를 누르면 방향이 즉시 바뀌므로 direction과 비교하는 것만으로는 충분하지 않습니다. 오른쪽으로 움직이면서 한 틱 안에 위쪽을 누른 다음 왼쪽을 누르는 경우를 생각해 보세요. 위쪽 방향은 허용되고, 이어서 왼쪽 방향도 위쪽 방향과 비교해 허용되므로, 다음 이동에서 목을 다시 가로지르게 됩니다.
따라서 방향을 두 개 유지하세요. direction은 머리가 마지막으로 움직인 방향이고, nextDirection은 다음 이동을 기다리는 회전 방향입니다. 키를 누르면 direction과 비교한 후 nextDirection이 바뀌고, 이동할 때 대기 중인 회전이 실제로 적용됩니다.
챌린지
쉬움뱀이 목을 향해 곧장 되돌아가지 않도록 하세요.
private Vector3 nextDirection = Vector3.right;와void Turn(Vector3 newDirection)을 추가하세요.newDirection == -direction이 아닐 때 nextDirection을 설정하세요.Update()에서 각 키가 direction을 설정하는 대신 해당 방향으로Turn을 호출하도록 하세요.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 플레이그라운드