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

相关文章

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

轻松上手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 进行更