class A
{
public static A Instance {get; private set;}
protected virtual void Awake()
{
Instance = this;
}
}
class B : A
{
protected override void Awake()
{
base.Awake();
}
public void Bmethod()
{
//do smth
}
}
class C
{
private void SomeMethod()
{
B.Instance.Bmethod();
}
}
所以,这是一个例子。我知道这是不可能的。 我的问题是如何以类似的方式实现这一目标,而不是太久?
我提出了一个想法,但仍然认为必须有另一个,更好。
class C
{
private void SomeMethod()
{
B.Instance.gameObject.GetComponent<B>().Bmethod();
}
}
答案 0 :(得分:1)
我总是有一个通用类来创建我的单身人士。我首先创建一个抽象类,如下所示:
using UnityEngine;
public abstract class MySingleton<T> : ClassYouWantToInheritFrom where T : MySingleton<T>
{
static T _instance;
public static T Instance
{
get
{
if(_instance == null) _instance = (T) FindObjectOfType(typeof(T));
if(_instance == null) Debug.LogError("An instance of " + typeof(T) + " is needed in the scene, but there is none.");
return _instance;
}
}
protected void Awake()
{
if ( _instance == null) _instance = this as T;
else if(_instance != this ) Destroy(this);
}
}
现在,您将此脚本放在项目中的某个位置,而不再触摸它。
要创建一个继承ClassYouWantToInheritFrom的单例,可以使您的类继承自MySingleton&lt; MyClass&gt;而不只是ClassYouWantToInheritFrom,因为MySingleton已经继承了它。 因此:
public class MyClass : MySingleton<MyClass>
{
}
而不是
public class MyClass : ClassYouWantToInheritFrom
{
}
希望这会有所帮助:)