Для начала необходимо устранить баг, возникающий у некоторых пользователей: после выключения и повторного запуска 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.