Создание игры Snake на Unity (C#)

snake

 

В этом уроке я объясню, как сделать 2d игру змейка на Unity.

Во-первых, откройте Unity и создайте 2d проект. В этом проекте мы будем использовать 3 различных изображения, таких как, змея, еда и граница. Таким образом потребуется создать их перед началом.

Screen-Shot-2015-03-06-at-12.50.13Загрузите созданные изображения и создайте окружающие границы из изображений для границ с именами top, bottom, right, left. Поместите изображение змеи на сцену. Не забудьте добавить Rigidbody 2D и Box Collider 2D(с флагом IsTrigger). Масштаб Rigidbody должен быть немного меньше змеи, что бы её хвосты не соприкасались.

Создайте скрипт C#, назовите его Snake и присоедините к объекту snake. Довайте отредактируем его. Во-первых, создадим публичные игровые объекты:

Теперь мы будем двигать и контролировать нашу змейку стрелками на клавиатуре. Нам нужна функция перемещения, немного переменных для редактирования движения и функцию необходимо вызывать при старте с InvokeRepeating.

Нажмите на кнопку play и протестируйте код. Вы можете изменить переменные speed и moveVector для оптимизации скорости перемещения.

Далее, мы создадим еду. Создайте префаб еды и добавьте Box Collider 2D(с флагом isTrigger). Еда должна находиться внутри границ. Мы будем вызывать функцию создания еды в Start().

Ещё раз протестируем. Еда создается при запуске, а змея движется вокруг. Сейчас создадим функцию коллайдер для сбора еды и добавления новой. В дополнение мы добавим хвост после сбора еды. Добавьте “using System.Collections.Generic” и “using System.Linq” что бы использовать список.

Теперь, змея движется, ест и растёт. Но во время движения змея двигается в противоположенном направлении. Добавьте 2 булевы переменные, что бы изменить управление с клавиатуры как здесь.

Давайте посмотрим весь код. Мы создали змею, еду и границы. Змея движется с InvokeRepeating() включая Movement(). Мы создаём еду с помощью функции SpawnFood() внутри границ. С помощью OnTriggerEnter() змея собирает еду путем обнаружения коллайдера. Вы можете добавить блок «else» в OnTriggerEnter(), что бы сделать условие «если имя коллайдера food, собираем его. В противном случае, конец игры «, что означает, если вы коснулись границ или самой змеи игра закончится. Также вы можете управлять счетом в OnTriggerEnter().

Оригинал.