轻松取到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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧?现在的市面上有不少免费录屏的软件了。别看如软件是免费的,它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  这个软件的操作方式非常简单,打开软件之后从界面设计就能看出来这个软件操作的便捷性。界面的设计简单明了基本一打眼你就会轻松驾驭啦

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

Golang GUI入门——andlabs ui

官方不提供gui标准库,只好寻求第三方库。 https://github.com/google/gxui 这个gui库是谷歌内部人员提供的,并不是谷歌官方出品,现在停止维护,只好作罢。 第三方gui库 找了好多,也比较了好多,最终决定使用的是还是 https://github.com/andlabs/ui 相信golang gui还会发展的更好,期待更优秀的gui库 由于andlabs

【轻松上手postman】入门篇:如果根据接口文档写postman接口用例

在我们平时的测试工作中除了最基本的网页测试外,也会遇到没有页面但需要验证内部逻辑正确性的接口测试任务,在遇到没有网页的测试任务时,我们就要使用到接口测试工具来模拟对程序代码触发。 在接到接口测试任务时,一般都会拿到接口需求文档,没接触过接口测试的人看到接口文档正常反应一脸闷🤣不知如何下手怎么开始测试😓,下面我就来讲讲如何将接口文档上的一个个接口转换成postman用例 首先需要安装

移动UI:分类列表页、筛选页的设计揭秘。

移动UI的列表页设计需要考虑用户体验和界面美观性,以下是一些建议的设计要点: 1. 列表项的展示: 列表页应该清晰地展示各个列表项,包括标题、副标题、缩略图等内容,以便用户快速浏览和识别。可以使用卡片式布局或者简洁的列表布局。 2. 搜索和筛选: 如果列表项较多,应该提供搜索和筛选功能,方便用户查找感兴趣的内容。搜索框和筛选条件可以放置在页面顶部或者底部,以便用户方便操作。

UI自动化测试常见面试题

1、什么是UI自动化测试? UI自动化测试是一种通过模拟用户交互并自动执行UI操作的软件测试方法。它用于验证用户界面的功能和稳定性,以确保在不同的操作系统、浏览器和设备上的一致性。 2、UI自动化测试的优势和劣势是什么? 优势: 可以节省时间和成本,提高测试效率。 可以自动执行大量的重复测试任务,减少人为错误。 可以实现广泛的测试覆盖,包括不同的操作系统、浏览器和设备。 可以提供稳定

高效办公必备!图片转PDF功能,让工作更轻松

在数字化时代,将图片转换为PDF格式是一项非常实用的技能;无论是在工作、学习还是生活中,我们都可能遇到需要将图片转化为PDF格式的情况;今天通过这篇文章给大家分享四款好用的图片转pdf 的工具: 第一款:福昕转换器 这款专用于解决pdf与各种格式之间进行转换、合并以及音视频转文字等等各种需求的办公工具,其操作的界面非常简洁并直观,对新手伙伴非常友好;其次可以支持高达50个文件同时转换的意见批量