Создание экземпляра System.Object в Unity - PullRequest
0 голосов
/ 06 апреля 2020

Я столкнулся с некоторой ошибкой в ​​Unity, возможно, из-за того, что я почти новичок в этом: у меня есть объект MonoBehaviour, который правильно живет в памяти. Для организации кода у этого объекта есть два члена стандартных классов System.Object, которые должны быть созданы новым вызовом.

class A
{
     // ...
}
class B
{
    // ...
}
class Status : MonoBehaviour
{
    A m_AVar;
    B m_BVar;

    public A AVar
    {
        get {return m_AVar;}
        protected set { m_AVar = value; }
    }
    public B BVar
    {
        get { return m_BVar; }
        protected set { m_BVar = value; }
    }

    void Awake()
    {
         // SingletonImplementation
    }

    void Start()
    {
        m_AVar = new A();
        m_BVar = new B();
    }

В какой-то момент игры кто-то решает вызвать мой Status.ExecuteSomeAction ():

    public void ExecuteSomeAction()
    {
          AVar.DoSome();
          BVar.DoSomethingElse();
    }

и все go отлично. В то время как в конце UIButton.OnClickEvent:

    public void ExecuteOnClickAction()
    {
        AVar.Foo();
    }

Но независимо от того, какой результат AVar нулевой. Читая влево и вправо, я чувствую, что с этим System.Object есть что-то, чего я до сих пор не понимаю.

Где я делаю неправильно?

1 Ответ

0 голосов
/ 06 апреля 2020

У меня когда-то была похожая проблема go. Когда одноэлементный шаблон создает новый экземпляр этого класса (Status), ссылки на объекты пользовательского интерфейса не создаются.

Чтобы решить эту проблему, создайте класс, который отвечает за обработку пользовательского интерфейса. Затем этот класс будет вызывать ваш Status class.

Другой способ - изменить шаблон синглтона в соответствии с вашими потребностями. В моем случае я просто написал это:

public static Status Instance { get; set; }

public Awake()
{
   Instance = this;
}

Это может быть немного неаккуратно, потому что у меня будут проблемы, если существует более одного экземпляра этого класса, но он выполняет свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...