为什么我会得到以下日志?
public class ScoreAnimation : MonoBehaviour
{
private OpponentMotionReceiver cachedObject;
private void Start()
{
cachedObject = FindObjectOfType<OpponentMotionReceiver>();
}
private void OnDestroy()
{
var motionReceiver = FindObjectOfType<OpponentMotionReceiver>();
if (motionReceiver == null)
{
Debug.Log("motion receiver not found");
}
if(cachedObject != null)
{
//prints true, another proof that the gameObject is active
Debug.Log(cachedObject.gameObject.activeInHierarchy);
}
}
}
public class OpponentMotionReceiver : MonoBehaviour
{
private void Start()
{
Debug.Log("Start OpponentMotionReceiver");
}
private void OnDisable()
{
Debug.Log("OnDisable OpponentMotionReceiver");
}
private void OnDestroy()
{
Debug.Log("OnDestroy OpponentMotionReceiver");
}
}
P.S。这是代码的极简化版本,因此其余部分不会产生混淆。如果您需要更多详细信息,我很乐意回答您的问题!
答案 0 :(得分:1)
更改场景。只有在那个时候,统一才是这样的。无论我们正在寻找的对象是否有效,只需FindObjectOfType在游戏周期的这一点上不起作用。
答案 1 :(得分:0)
您是否尝试使用official document中所述的typeof即FindObjectOfType(typeof(OpponentMotionReceiver))
来调用方法?
答案 2 :(得分:0)
在组件中调用OnDestroy时,GameObject
已停用。它可能已经脱离了正常的等级。
此外,如果场景即将离开,则场景中未设置为GameObject
的所有DontDestroyOnLoad
个实例都会首先停用。
调用OnDestroy
时,您要查找的所有对象都已停用。