您当前的位置: 首页 > 

野奔在山外的猫

暂无认证

  • 7浏览

    0关注

    85博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【解决】MissingReferenceException: The object of type ‘GameObject‘ has been destroyed...

野奔在山外的猫 发布时间:2022-09-21 22:00:00 ,浏览量:7

开发平台:Unity 编程平台:Visual Studio 2020以上 使用语言:C#  

问题描述 描述英文MissingReferenceException: The object of type ‘GameObject’ has been destroyed。中文丢失的偏好异常:GameObject 类型的对象已经被销毁

  备注:这是一个 Warning 类型的错误警告,对项目稳定性基于使用情况给予 可忽略/有影响 两种BUFF。  

解决方案:示例
public void Awake() { EventDispacther.AddListener($"{MessageCommand.Hello}", OnResponsedMessage); }

public void OnResponsedMessage(object[] obj) { Debug.Log("Hello World"); }
  • 如上所示,使用事件分发器注册监听 MessageCommand.Hello 消息。其内部方式使用 委托订阅方式进行。
  • 现在 包含改内容 的脚本所挂载的对象被制作成 Prefab 预制体。用于其他脚本的调用。
  • 在其他脚本中,例如:
public class ItemCreator : MonoBehaviour
{
	public Transform Parent;
	public GameObject Prefab;

	public IEnumerator CreateAndDelete()
	{
		yield return new WaitForSeconds(2f);
		var thisPrefab = GameObject.Instante(Prefab, Parent);
		yield return new WaitForSeconds(2f);
		DestroyImmediate(thisPrefab);

		EventDispatcher.DispatchEvent($"{MessageCommand.Hello}");
	}
}

  在 创建与销毁 过程中,我们为该对象的组件中执行了 EventDispatcher 的事件注册。特别的,在销毁过程中,并未对该对象因自身销毁问题而注销事件监听。导致 事件分发器 中任然保留这一部分事件被执行,但对象已经出现丢失(销毁)。

解决方法:检查生命周期

  注意 Unity 生命周期,若销毁对象,则需移除其自身所有注册信息。例如,在组件销毁阶段注销事件监听。

public void OnDestroy()
{
	EventDispatcher.RemoveObserver($"{MessageCommand.Hello}");
}
关注
打赏
1659777066
查看更多评论
立即登录/注册

微信扫码登录

0.0345s