Вызов Invoke в рамках функции * Unity c stati c - PullRequest
0 голосов
/ 01 февраля 2020

Я получаю ошибку, которую не понимаю. Упрощенная версия моего кода:

using UnityEngine;
public class RunLater : MonoBehaviour
{
    public static void Do()
    {
        Invoke("RunThisLater", 2.0f);
    }

    public void RunThisLater()
    {
        Debug.Log("This will run later");
    }

}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Вы можете передать его как параметр, подобный этому:

public class RunLater : MonoBehaviour
{            
    public static void Do(RunLater instance)
    {
        instance.Invoke("RunThisLater", 2.0f);
    }

    public void RunThisLater()
    {
       Debug.Log("This will run later");
    }
}
0 голосов
/ 01 февраля 2020

Один из подходов состоит в том, чтобы в классах * stati c хранилась ссылка MonoBehaviour. Вот так:

public class RunLater : MonoBehaviour
{
    public static RunLater selfReference = null;

    public static void Do()
    {
        InitSelfReference();
        selfReference.DoInstanced();
    }

    static void InitSelfReference()
    {
        if (selfReference == null)
        {
            // We're presuming you only have RunLater once in the entire hierarchy.
            selfReference = Object.FindObjectOfType<RunLater>();
        }
    }

    public void DoInstanced()
    {
        Invoke("RunThisLater", 2f);
    }

    void RunThisLater()
    {
        Debug.Log("This will run later");
    }
}

Теперь вы сможете вызывать RunLater.Do () из любого места в вашем коде других игровых объектов. Удачи!

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