Unity 5: Анимация кубика и решение бага с отображением

Для начала необходимо устранить баг, возникающий у некоторых пользователей: после выключения и повторного запуска Unity некоторые изображения могут пропадать. Это связано с порядком слоёв (Order). Кнопки с Order = 0 могут перекрывать друг друга. Решение: для всех кнопок (синяя, Play, Favorite Music, Restore и т.д.) установите Order = 1. Рекомендуется также установить для камеры значение Z = -10 для корректного отображения элементов на канвасе.

Исправление бага отображения элементов

Проблема исчезновения картинок связана с порядком отображения слоёв (Order). При одинаковом значении Order у нескольких элементов (например, 0), Unity самостоятельно определяет порядок отображения. Чтобы избежать этого, задайте каждому элементу уникальное значение Order. Рекомендуется установить Order = 1 для всех кнопок, обеспечив их отображение поверх остальных элементов. Установка Z = -10 для камеры также обеспечит корректное отображение.

Создание и настройка кубика

Для анимации добавим в сцену новый Game Object – куб. Его начальные координаты будут (0, 0, 0). Куб будет чёрным из-за отсутствия освещения в сцене. Добавим источник света.

Добавление источника света

Добавьте Directional Light (направленный свет). Положение света некритично, важнее его поворот (rotation). Экспериментируя с rotation, вы добьётесь желаемого освещения. Для наглядности, установим размеры кубика: 1.7 x 1.7 x 1.7 и повернём его приблизительно на -45 градусов по оси Y и -10 градусов по оси X. Настроим параметры света (например, 35, -12, -15).

Создание скрипта анимации

Для анимации кубика (движение вверх-вниз и вращение) создадим C# скрипт. Рекомендуется использовать C# (хотя выбор языка зависит от ваших предпочтений).

Создание и настройка скрипта

Создайте папку «Scripts» в папке «Assets» и в ней новый C# скрипт, например, «CubeFloat». Имя скрипта должно быть осмысленным и не должно меняться после создания, так как оно используется как имя класса.

В скрипте создадим переменные:

  • public float Speed; — скорость движения.
  • Vector3 Target; — целевая позиция.
  • public float Tilt; — скорость вращения.

Функция Update отвечает за анимацию:

using UnityEngine;

public class CubeFloat : MonoBehaviour
{
    public float Speed;
    Vector3 Target;
    public float Tilt;

    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, Target, Time.deltaTime * Speed);

        if (transform.position.y == Target.y)
        {
            Target.y = Target.y == 1.39f ? 0f : 1.39f;
        }

        transform.Rotate(Vector3.up * Tilt * Time.deltaTime);
    }
}

Прикрепите скрипт к кубику и настройте значения Speed и Tilt в инспекторе.

Дополнительная информация

Speed отвечает за скорость движения, Tilt — за скорость вращения. Target переключается между 1.39 и 0, обеспечивая движение кубика вверх и вниз. Time.deltaTime обеспечивает плавность анимации независимо от частоты кадров.

Добавление материала

Добавьте новый материал для кубика и настройте его цвет.

В этом уроке мы создали анимацию кубика: движение вверх-вниз и вращение. Мы рассмотрели настройку освещения, порядок слоёв и создание скрипта на C# для анимации. Параметры скорости и вращения настраиваются в инспекторе Unity.

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