Обычно я вызывал бы метод из другого Monobehaviour таким образом
[SerializeField]
private OtherScript s;
private void Start()
{
s.DoSomething();
}
И я думал о чем-то вроде этого
public class OtherScript : MonoBehaviour
{
public static OtherScript Instance { get { return this; } }
public void DoSomething()
{
Debug.Log("Call");
}
}
Тогда я мог бы вызвать метод из других сценариев таким образом
OtherScript.Instance.DoSomething();
Но я не могу вернуть this
как статическое свойство.Обходной путь будет следующим:
public class OtherScript : MonoBehaviour
{
private static OtherScript instance;
public static OtherScript Instance { get { return instance; } }
private void Start()
{
instance = this;
}
public void DoSomething()
{
Debug.Log("Call");
}
}
При использовании этого кода могут возникнуть некоторые проблемы, так как экземпляр установлен в методе Start
.Это может быть слишком поздно, если другие компоненты нуждаются в ссылке при выполнении своего собственного Start
метода.
Все уникальные монобиевости, такие как GameManager
, GameObserver
, IngameMenu
и т. Д., Должны иметь статическое значение.экземпляр, потому что они существуют только один раз в сцене, и мне не нужно настраивать поле инспектора для этой ссылки несколько раз.
Есть ли лучший способ использовать статический экземпляр?