当前位置: 首页 > news >正文

unity DontDestroyOnLoad后跳转场景后不会出现重复物体

记录一下在DontDestroyOnLoad后,反复来回跳转场景确保物体的唯一性,话不多说看代码

public class Manager : MonoBehaviour
{private static Manager Instance;public static Manager GetInstance(){return Instance;}private void Awake(){if (Instance == null){Instance = this;MaskCanvas = TraverseAllObjects("MaskCanvas").gameObject;Brake = TraverseAllObjects("BrakeCanvas").gameObject;DontDestroyOnLoad(gameObject);DontDestroyOnLoad(MaskCanvas);DontDestroyOnLoad(Brake);}else{if (Instance != this){Destroy(TraverseAllObjects("MaskCanvas").gameObject);Destroy(TraverseAllObjects("BrakeCanvas").gameObject);Destroy(gameObject);}}
}    public static Transform TraverseAllObjects(string name){Transform s = null;try{// 获取场景中所有的根物体GameObject[] rootObjects = SceneManager.GetActiveScene().GetRootGameObjects();// 遍历所有根物体和它们的子物体foreach (GameObject rootObject in rootObjects){//   print(rootObject);TraverseHierarchy(rootObject.transform, name, ref s);}return s;}catch (System.Exception e) { return s; }}private static void TraverseHierarchy(Transform parent, string name, ref Transform returnObj){try{if (parent.name == name){returnObj = parent;}}catch (System.Exception) { }// 遍历当前父物体下的所有子物体foreach (Transform child in parent){// 处理子物体,这里可以添加你的逻辑try{//  print(child.name+"   "+ name);if (child.name == name){returnObj = child;}}catch (System.Exception){TraverseHierarchy(child, name, ref returnObj);}// 递归调用遍历子物体的子物体TraverseHierarchy(child, name, ref returnObj);}}
}

上面代码中不仅保留了物体的唯一性,还加入了一个查找Hierarchy面板物体的功能,查找范围在主场景中。

相关文章:

  • linux rsyslog综合实战2
  • 没收到Win11 23H2正式版的推送怎么升级到23H2
  • Android 10-13鼠标右键返回功能适配
  • 观察者模式的运用——消息队列
  • 代码随想录算法训练营第三十一天| 455 分发饼干 376 摆动序列 53 最大子数组和
  • 探索 Material 3:全新设计系统和组件库的介绍
  • js进阶笔记之构造函数
  • 如何在 ASP.NET Core 中使用 Quartz.NET
  • adb server version (19045) doesn‘t match this client (41); killing.的解决办法
  • 华为ac+fit漫游配置案例
  • 计算机算法分析与设计(24)---分支限界章节复习
  • 苍穹外卖—解决前端时间属性显示问题
  • TS类型全解
  • Qt中简单的并发方式QtConcurrent::run() 方法
  • 科技赋能,创新发展!英码科技受邀参加2023中国创新创业成果交易会
  • JS 中的深拷贝与浅拷贝
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【EOS】Cleos基础
  • java2019面试题北京
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Next.js之基础概念(二)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python打包系统简单入门
  • python学习笔记-类对象的信息
  • SpringBoot几种定时任务的实现方式
  • 程序员该如何有效的找工作?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 计算机常识 - 收藏集 - 掘金
  • 简单易用的leetcode开发测试工具(npm)
  • 入门到放弃node系列之Hello Word篇
  • 试着探索高并发下的系统架构面貌
  • 数据结构java版之冒泡排序及优化
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一道面试题引发的“血案”
  • 用jquery写贪吃蛇
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragma预处理命令
  • #WEB前端(HTML属性)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (1)(1.9) MSP (version 4.2)
  • (C语言)逆序输出字符串
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (七)Java对象在Hibernate持久化层的状态
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)shell调试方法
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .describe() python_Python-Win32com-Excel
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net mvc部分视图
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net经典笔试题