Урок посвящен усложнению игры с течением времени и добавлению начального обучения.
Усложнение игры
Создадим переменную для подсчета пройденных блоков. Объявим её public static int в скрипте CubeJump с именем countBlocks. В методе OnTriggerEnter будем увеличивать её значение:
public static int countBlocks = 0;
// ... другой код ...
void OnTriggerEnter2D(Collider2D other) {
// ... другой код ...
countBlocks++;
// ... другой код ...
}
Создадим скрипт HarderScript для управления сложностью. В методе Update будем проверять значение countBlocks. Если countBlocks кратно 5, выведем «Harder»; если кратно 8 – «Easier», возвращая исходную сложность. Булева переменная isHard предотвратит многократный вывод сообщений:
public class HarderScript : MonoBehaviour
{
public static bool isHard = false;
void Update()
{
if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 5 == 0 && !isHard)
{
Debug.Log("Harder");
isHard = true;
}
else if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 8 == 0 && isHard)
{
Debug.Log("Easier");
isHard = false;
}
}
}
Этот скрипт нужно прикрепить к камере. Проверка CubeJump.countBlocks > 0 предотвращает деление на ноль при запуске.
Анимация изменения сложности
Для визуализации изменения сложности создадим две анимации камеры: harder и easier, изменяющие положение и вращение. Создайте эти анимации в Unity, дублируя существующую.
В HarderScript добавим код для воспроизведения анимаций:
// ... другой код ...
if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 5 == 0 && !isHard)
{
Debug.Log("Harder");
GetComponent<Animator>().Play("harder");
isHard = true;
}
else if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 8 == 0 && isHard)
{
Debug.Log("Easier");
GetComponent<Animator>().Play("easier");
isHard = false;
}
Создадим объект DetectX больше размера экрана с коллайдером. В HarderScript добавим код для изменения его позиции и вращения:
public Transform detectX; //Ссылка на объект DetectX
// ... другой код ...
if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 5 == 0 && !isHard)
{
// ... другой код ...
detectX.position = new Vector3(29.43f, -60f, 0f); // Координаты для "Harder"
detectX.rotation = Quaternion.Euler(29.43f, -60f, 0f); // Вращение для "Harder"
// ... другой код ...
}
else if (CubeJump.countBlocks > 0 && CubeJump.countBlocks % 8 == 0 && isHard)
{
// ... другой код ...
detectX.position = new Vector3(0f, 0f, -8f); // Координаты для "Easier"
detectX.rotation = Quaternion.identity; // Вращение для "Easier"
// ... другой код ...
}
Начальное обучение
Создадим текстовый объект TutorialText с инструкцией «Touch, hold and release», скрытый по умолчанию. В скрипте сцены добавим код для отображения и скрытия текста:
public GameObject tutorialText;
void Start() {
// ... другой код ...
}
void OnMouseDown()
{
if (tutorialText.activeSelf)
{
tutorialText.SetActive(false);
}
}
Инструкция отображается при запуске и исчезает после первого нажатия.
В этом уроке реализованы механизм постепенного усложнения и система обучения, улучшающие игровой процесс и доступность игры.