```csharp
private GameObject _random_object;
public GameObject RandomObject
{
get
{
if (_random_object == null)
{
_random_object = / 我自己通常是在这里找health组件,i.e. 使用GetComponent、FindObjectByType等方法 / ;
}
return _random_object;
}
}

我最近发现了这个 "属性模式"(不知道如何称之),现在我就把它应用到了游戏项目中。以前我主要是在Awake方法中加载所有内容,缓存游戏对象和组件,但是Awake方法不能被非激活的Monobehaviours调用的,所以我才开始使用它

这样做的好处是缓存了对象到私有变量中,好像对性能也有贡献 ?

有没有此模式的已知缺点? 我使用的是很多,所以希望知道模式的缺点

我还使用它来从其他MonoBehaviour的Awake方法中获取单例变量,如此:
private static GameManager _static_instance;
public static GameManager StaticInstance
{
get
{
if (_static_instance == null)
{
_static_instance = GameObject.FindFirstObjectByType();
}
return _static_instance;
}
}

我们公司也在使用这个模式吗?是否存在更好的方法来实现?