Есть 4 вида анимации для меню, созданы с помощью Anitamor в Unity
anim1 (снизу в центр)
anim2 (из центра вверх)
anim3 (с верха в центр)
anim4 (из центра вниз)
Первой пункт я уже сделал
1) анимация запускается, когда открываешь игру, главное меню
выезжает снизу в центр
2) нужно сделать чтобы при клике, когда нажимаешь клавишу Options
главное меню
ехало вверх, а снизу в центр выезжало меню Options
3) Когда в Options
нажимаешь Back
опции должны ехать вниз, а сверху выезжает Главное меню
Как это реализовать в виде кода?
1.Если у вас через animation,то запускаем анимацию движения вверх по клику.
2.Если не через animation,то просто position меняем == двигаем вверх по оси по нажатию мыши за пределы видимости камеры и все.
официальная доументация
https://unity3d.com/ru/learn/tutorials/s/user-interface-ui
официальный ролик о кнопках
здесь вся нужная инфа
https://unity3d.com/ru/learn/tutorials/topics/user-interface-ui/ui-button?playlist=17111
UPD: часть 2.Код.
создаете новый скрипт
добавляете скрипт на canvas
public GameObject optionButton; // перетащить сюда кнопку
public Animator m_Animator; // перетащить сюда аниматор кнопки
void Start()
{
m_Animator = GetComponent<Animator>();
optionButton.onClick.AddListener(goAnim);
}
void goAnim() { m_Animator.Play("Name_your_anim"); }
Давайте опишу структуру и общую логику :)
Для того, чтобы сделать вышеописанное у вас должны быть две панели-объекта. На каждой панели должен висеть собственный скрипт панели (например MenuPanel и OptionPanel) и Animator Contoller со своим аниматором.
Для каждой панели у вас должен быть создать свой аниматор со своими состояниями. В аниматоре из состояния enter переход в состояния Hide из Hide в Show из Show в Idle. Из Idle обратно в Hide. Из состояния Hide в Show переход по триггеру Show и Idle в Hide по триггеру Hide. В сами эти состояния должны быть назначены нужные вам анимации (снизу в центр, из центра вверх и т.д. смотря, что вам нужно на панели, а в Idle - просто включение объекта панели, чтобы состояние не было пустым).
Можно создать вообще один аниматор - PanelAnimator, а потом добавлять перегруженные (override) (в них нужно перетащить тот, который будете менять и перетащить анимации, которые нужно заменить - с ним не придётся ещё раз настраивать связи).
У панелей должны быть специальные методы дли управления их показом или можно вообще сделать свойством. Например, такой вариант:
[SerializeField]
Animator _animator;
public bool Visible
{
set
{
string trigger = value ? "Show" : "Hide";
_animator.SetTrigger(trigger);
}
}
Здесь в сеттере проверяется какое значение нам пришло, если false - выбирается левая строчка, если true, то, соответственно - правая. Затем эта строчка отправляется в аниматор, как триггер. А аниматор уже скрывает или показывает панель.
Соответственно, чтобы скрыть меню и показать настройки вам нужно будет сделать что-то вроде следующего:
[SerializeField]
MenuPanel _menuPanel;
[SerializeField]
OptionsPanel _opntions;
void ClickReaction()
{
_menuPanel.Visible = false;
_opntions.Visible = true;
}
Ну, а как вы там получите доступ к экземплярам панели - это уже вопрос вашей архитектуры)
Это не лучший вариант организации UI, но реализует то, о чем вы спросили.
Соответственно, можете из панели Настроек подписаться на событие нажатия кнопки Option в панели Menu. И когда она будет нажата - вызвать метод, который выше я назвал ClickReaction.
Либо, вы можете в полях самой кнопки назначить, что она должна вызвать и у какой панели.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем я программно обрабатываю документы *xlsx и из нужных полей вынимаю нужные мне данные
Необходимо было сделать spawn игроков в Canvas через UnityNetworkРеализовал это следующим образом: