Menu
CoddyTech

Есть

Урок 6 из 14 курса Игра на Unity: 3D-змейка на Coddy.

Змейка съедает еду, когда её голова попадает на клетку с едой. Обе позиции заданы целыми числами, поэтому сравнивать их с помощью == безопасно: Unity считает две позиции Vector3 равными при использовании ==, если расстояние между ними меньше 0.00001, а при добавлении целых клеток разница никогда не бывает настолько маленькой.

Змейка знает, когда делает шаг; GameManager знает, где находится еда, и ведёт счёт. Поэтому после каждого шага змейка спрашивает, а GameManager отвечает: IsFood(cell) возвращает значение bool, а Eat() добавляет очко и перемещает еду. Змейка обращается к GameManager через статический Instance — синглтон, с которым ты познакомился в курсе C# для Unity.

Проверяй клетку, на которую попала голова, после перемещения. Ключ на сетке подбирается так же:

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): возвращает true, если cell — позиция еды.
  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-змейка