轻松取到UI上面的GameObject

2024-08-29 07:18

本文主要是介绍轻松取到UI上面的GameObject,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

           最近因为换工作,又有好几天没有写了,诶, 换个工作人都累的半死,so,跳槽有风险,需谨慎呀!

           下面写了一个我们在实际开发中会经常用到的组件,可以轻松的取到我们游戏界面中你想要的Gameobject,告别繁琐的Gameobject的超长的绝对路径。

 

 public class GameObjectRef : MonoBehaviour, IEnumerable<KeyValuePair<string, GameObject>>{public GameObject[] Refs;public string[]     Names;private Dictionary<string, GameObject> refMaps;public void Awake(){//Init();}public void Init(){int len = Refs != null ? Refs.Length : 0;refMaps = new Dictionary<string, GameObject>(len);for (int i = 0; i < len; i++)refMaps.Add(Names[i], Refs[i]);}public GameObject this[string key]{get{if (refMaps == null)Init ();if (refMaps != null && refMaps.ContainsKey(key))return refMaps[key];return null;}set{if (refMaps == null)refMaps = new Dictionary<string, GameObject>(Refs != null ? Refs.Length : 0);if (refMaps.ContainsKey(key)){int idx = Array.IndexOf(Names, key);if (idx != -1){refMaps[key] = value;//Names[idx] = key;Refs[idx] = value;}}else{int lenNames = Names != null ? Names.Length : 0;int lenRefs = Refs != null ? Refs.Length : 0;var newNames = new String[lenNames + 1];var newRefs = new GameObject[lenRefs + 1];if (Names != null && Refs != null){Array.Copy(Names, newNames, lenNames);Array.Copy(Refs, newRefs, lenRefs);}newNames[lenNames] = key;newRefs[lenRefs] = value;refMaps.Add(key, value);Names = newNames;Refs = newRefs;}}}public IEnumerator<KeyValuePair<string, GameObject>> GetEnumerator(){return refMaps.GetEnumerator();}IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}public void Remove(string key){if (refMaps == null || ! refMaps.ContainsKey(key))return;if (Names == null || Names.Length <= 0 ||Refs == null || Refs.Length <= 0)return;int idx = Array.IndexOf(Names, key);if (idx == -1)return;var newNames = new string[Names.Length - 1];var newRefs = new GameObject[Refs.Length - 1];Array.Copy(Names, 0, newNames, 0, idx);Array.Copy(Refs, 0, newRefs, 0, idx);if (idx < Names.Length - 1){Array.Copy(Names, idx + 1, newNames, idx, Names.Length - idx - 1);Array.Copy(Refs, idx + 1, newRefs, idx, Refs.Length - idx - 1);}refMaps.Remove(key);Names = newNames;Refs = newRefs;}public void ChangeName(string oldName, string newName){if (refMaps == null || ! refMaps.ContainsKey(oldName))return;if (Names == null || name.Length <= 0)return;int idx = Array.IndexOf(Names, oldName);if (idx == -1)return;GameObject go = refMaps[oldName];refMaps.Remove(oldName);refMaps.Add(newName, go);Names[idx] = newName;}public void Add(string name, GameObject go){int lenNames = Names != null ? Names.Length : 0;int lenRefs = Refs != null ? Refs.Length : 0;var newNames = new String[lenNames + 1];var newRefs = new GameObject[lenRefs + 1];if (Names != null && Refs != null){Array.Copy(Names, newNames, lenNames);Array.Copy(Refs, newRefs, lenRefs);}newNames[lenNames] = name;newRefs[lenRefs] = go;//refMaps.Add(name, go);Names = newNames;Refs = newRefs;}}

            真的很实用,希望能帮到你们!

------------------------------------------------------广告之后马上回来--------------------------------------------------

这篇关于轻松取到UI上面的GameObject的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117209

相关文章

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息