本文主要是介绍轻松取到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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!