Как добавить динамический метод из одного класса в другой Unity?
В классе кнопки нужно выполнить метод из другого класса. Два варианта:
Сделать другой класс статичным, но это не даёт сделать gameObject.name в свиче.
public void Start() { Statistic.inGameStatistic(); switch (gameObject.name) { //case "lvlTxt": // value = SeePerson.monsterId; // break; case "mHealthTxt": value = SeePerson.monsterHealth; break; //case "mArmorTxt": // value = SeePerson.monsterArmor; // break; case "mStrengthTxt": value = SeePerson.monsterStrength; break; } text.text = value.ToString(); }Оставить этот метод динамическим, тут снова два варианта развития событый:
2.1 MonsterStatistic.Start(); код не запускается, ошибка: An object reference is required for the non-static field, method, or property 'MonsterStatistic.Start()'
2.2MonsterStatistic mnS = new MonsterStatistic(); mnS.Start();, здесь код запускается, unity выдаёт предупреждение: You are trying to create a MonoBehaviour using the 'new' keyword., и код выполняется неправильно
Ответы (1 шт):
На тему ваших вариантов... нет! Их не два и уж явно не те, что вы написали.
У Button есть событие OnClick где можно указать ссылку на любой компонент и его публичный метод с аргументом или без.
Компоненты (MonoBehaviour) привязаны к GameObject и никак не могут быть статическими по своей природе. Но класс может тупо содержать статическую ссылку на один экземпляр.
public class Foo : MonoBehaviour
{
public static Foo Main { get; private set; }
public void Awake ()
{
Main = this;
}
public void DoSomething () { }
}
if (Foo.Main != null)
Foo.Main.DoSomething();
Вариантов много, вопрос только в том чё вы хотите сделать... Насколько можно понять, у вас есть некий класс отвечающий за статистику, но не понятно почему он MonoBehaviour... Вам скорее нужен Singleton.
public class Statistics
{
private static Statistics _instance;
public static Statistics Instance
{
get {
if (_instance == null)
_instance = new Statistics();
return _instance;
}
}
private Statistics ()
{
Load();
}
public void DoSomething () { }
private void Load () { }
private void Save () { }
}
Statistics.Instance.DoSomething();