Есть
Урок 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);
}Задание
СреднеЗмея съедает еду и набирает очко.
- В
GameManagerдобавьpublic static GameManager Instance;, присвой ему значение вAwake(), а также добавьprivate int score; public bool IsFood(Vector3 cell): возвращает true, когда ячейка совпадает с позицией еды.public void Eat(): ещё одно очко, затемMoveFood().- В
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