Unity 2D: Усложнение игры и обучение (Урок 11)

Урок посвящен усложнению игры с течением времени и добавлению начального обучения.

Усложнение игры

Создадим переменную для подсчета пройденных блоков. Объявим её 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);
    }
}

Инструкция отображается при запуске и исчезает после первого нажатия.

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

Что будем искать? Например,программа