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

Задание

Средне

Змея съедает еду и набирает очко.

  1. В GameManager добавь public static GameManager Instance;, присвой ему значение в Awake(), а также добавь private int score;
  2. public bool IsFood(Vector3 cell): возвращает true, когда ячейка совпадает с позицией еды. public void Eat(): ещё одно очко, затем MoveFood().
  3. В Snake, в конце Step(): если GameManager.Instance.IsFood(next), вызови Eat().

Нажми «Играть» и направь змею на еду: она переместится в новую ячейку. Затем нажми «Проверить».

Попробуйте сами

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);
    }
}

Все уроки раздела Игра на Unity: 3D-змейка

Потренируйтесь самостоятельно: Песочница Unity