Menu
CoddyTech

먹기

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

뱀은 머리가 먹이가 있는 칸에 들어서면 먹이를 먹습니다. 둘 다 정수 좌표에 있으므로 ==로 위치를 비교해도 안전합니다. Unity에서 Vector3의 ==는 두 위치 사이의 거리가 0.00001보다 작을 때 두 위치를 같다고 판단하며, 정수 칸을 더해도 그만큼 작은 차이는 생기지 않습니다.

뱀은 자신이 이동할 때를 알고, GameManager는 먹이가 어디에 있는지 알고 점수를 관리합니다. 따라서 뱀은 이동할 때마다 묻고 GameManager는 답합니다. IsFood(cell)는 bool을 반환하고, Eat()은 점수를 1점 올리고 먹이를 옮깁니다. 뱀은 C# for Unity 여정에서 배운 싱글턴인 정적 Instance를 통해 GameManager에 접근합니다.

이동한 다음 머리가 들어선 칸에 대해 확인하세요. 그리드 위의 열쇠도 같은 방식으로 획득합니다.

transform.position = next;
if (key.position == transform.position)
{
    keysHeld++;
    key.gameObject.SetActive(false);
}
challenge icon

챌린지

중급

GameManager에서:

  1. public static GameManager Instance;를 추가하고, Awake()에서 설정한 다음, private int score;를 추가하세요.
  2. public bool IsFood(Vector3 cell)를 작성하세요. cell이 음식의 위치일 때 true를 반환합니다.
  3. public void Eat()를 작성하세요. score를 1 증가시키고 MoveFood()를 호출합니다.

Snake에서 Step()의 끝부분, 머리가 이동한 다음에, 머리의 칸에 음식이 있으면 Eat()를 호출하세요.

Play를 누르고 음식 위로 이동한 다음, Check를 누르세요.

직접 해보기

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public Snake snake;
    public GameObject foodPrefab;
    private Transform food;

    void Start()
    {
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    void MoveFood()
    {
        int x = Random.Range(-snake.edge, snake.edge + 1);
        int z = Random.Range(-snake.edge, snake.edge + 1);
        food.position = new Vector3(x, 0f, z);
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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