Я создал скрипт C# в котором есть несколько функций и функция ChooseResolution(). Прицепил его на пустой объект UIManager, который засунул в поле для объектов в обработке клика на кнопку в инспекторе. Пытаюсь выбрать фунцию ChooseResolution для выполнения, но её нету в списке, хотя все остальные функции того скрипта есть. Из-за чего это вообще? Буду рад любой помощи. Скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIManager : MonoBehaviour {
public bool MenuActive = false;
public GameObject[] ArrayMenus = new GameObject[5];
private GameObject _current_menu;
private int _index;
//Resolution
private string _resolution = "1920x1280" ;
private GameObject _pre_resolution_button;
public void MenuOpen()
{
if( !MenuActive )
{
ArrayMenus[0].SetActive(true);
MenuActive = true;
_current_menu = ArrayMenus[1];
}
}
public void MenuClose()
{
if(MenuActive)
{
for(int i = 0; i < ArrayMenus.Length; ++i )
if (i == 1) ArrayMenus[1].SetActive(true);
else ArrayMenus[i].SetActive(false);
MenuActive = false;
_current_menu = null;
}
}
public void OpenNewTab(GameObject Tab)
{
_current_menu.SetActive(false);
Tab.SetActive(true);
_current_menu = Tab;
}
public void Back(GameObject Menu)
{
_current_menu.SetActive(false);
Menu.SetActive(true);
_current_menu = Menu;
}
public void ExitYes()
{
if (MenuActive && _current_menu == ArrayMenus[3]) Application.Quit();
}
public void ChooseResolution(string Resolution, GameObject Button)
{
_resolution = Resolution;
UnityEngine.UI.ColorBlock colorBlock = new UnityEngine.UI.ColorBlock
{
normalColor = new Color(27, 182, 57),
highlightedColor = new Color(36, 66, 156),
pressedColor = new Color(22, 44, 106)
};
//_pre_resolution_button;
Button.GetComponent<UnityEngine.UI.Button>().colors = colorBlock;
//Button;
_pre_resolution_button = Button;
}
public void ApplyResolution()
{
//
}
}
Инспектор:
Базовый инспектор Unity для Button не умеет обрабатывать методы, которые имеют больше двух аргументов. Другими словами, вам придётся либо использовать кнопки, либо отказаться от этого крайне неудобного способа :)
В разработке использовать данный способ подписки на события крайне неудобно:
Во-первых - вы инкапсуляцию нарушаете. Этот метод больше никому, кроме этого класса не нужен по сути, а вы его публичным делаете, вместо того, чтобы оставить приватным.
Во-вторых - во время отладки вы не сможете узнать из какого именно места вызвался код, который вызывается из редактора. Через условных пару месяцев вы можете забыть что и где там добавляли и в итоге будете очень долго искать в чём проблема.
В-третьих - этот вызов происходит через запоминание имени метода и вызова его по нему, что медленнее и к тому же останется даже если вы сделаете метод приватным и не удалите этот вызов у кнопки. Что ещё раз усложнит отладку, если вы вдруг решите что-то переделать.
Лучшим решением тут будет использовать подписку на событие кнопки внутри самого класса. Кнопка обладает событием onClick
, которое срабатывает при нажатии на неё. Вы можете подписаться на него прямо из кода, взяв ссылку на кнопку.
В вашем случае, вам было бы лучшее вообще написать отдельный класс конкретно под кнопку-разрешения :)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вообщем интересует ответ на вопрос , который уже озвучен в заголовке тредаВозможно есть уже готовая реализация или же если подскажите в какую...
есть анимация ходьбы персонажа (Влево, Вправо, Вверх и Вниз) вызываемая при помощи индексов
У меня проблема, разрабатываю сайт и нужно сделать отправку сообщений на почту админуТолько проблема в том, пользователь должен иметь сам...
На сайте есть разделы которые должны быть доступны только после оплаты пользователем доступа к нимВ качестве платёжной системы использую...