private void GroupLoadItems(UIInfoBase[] infoList) { for (int i = 0; i < infoList.Length; i++) { UIInfoBase item = infoList[i]; GameObject prefab = null; if (item is PrefabUIInfo) { prefab = (item as PrefabUIInfo).prefab; } else if (item is BundleUIInfo) { var guid = (item as BundleUIInfo).guid; var path = AssetDatabase.GUIDToAssetPath(guid); prefab = AssetDatabase.LoadAssetAtPath <GameObject>(path); } if (item.instanceID != 0) { continue; } if (prefab == null) { UnityEditor.EditorUtility.DisplayDialog("空对象", "找不到预制体" + item.panelName, "确认"); } else { GameObject go = PrefabUtility.InstantiatePrefab(prefab) as GameObject; if (target is PanelGroup) { if (go.GetComponent <Transform>() is RectTransform) { go.transform.SetParent((target as PanelGroup).transform, false); } else { go.transform.SetParent((target as PanelGroup).transform, true); } } else { if (go.GetComponent <Transform>() is RectTransform) { var canvas = UnityEngine.Object.FindObjectOfType <Canvas>(); go.transform.SetParent(canvas.transform, false); } else { go.transform.SetParent(null); } } item.instanceID = go.GetInstanceID(); } } }
/// <summary> /// 创建对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="panelName"></param> /// <param name="onCreate"></param> public void CreatePanel(UIInfoBase itemInfo, UnityEngine.Events.UnityAction <GameObject> onCreate) { if (_cansaleKeys.Contains(itemInfo.panelName)) { _cansaleKeys.RemoveAll(x => x == itemInfo.panelName); } if (!_loadingKeys.Contains(itemInfo.IDName)) { _loadingKeys.Add(itemInfo.IDName); var bInfo = itemInfo as BundleUIInfo; var pInfo = itemInfo as PrefabUIInfo; var rInfo = itemInfo as ResourceUIInfo; if (pInfo != null) { var go = GetGameObjectInfo(pInfo); if (onCreate != null) { onCreate.Invoke(go); } } else if (rInfo != null) { var go = GetGameObjectInfo(rInfo); if (onCreate != null) { onCreate.Invoke(go); } } else if (bInfo != null) { if (bundleLoader != null) { bundleLoader.LoadAssetAsync <GameObject>(bInfo.bundleName, bInfo.panelName, (x) => { if (x != null) { var instence = CreateInstance(x, bInfo); if (onCreate != null) { onCreate.Invoke(instence); } _loadingKeys.Remove(bInfo.IDName); } }); } else { Debug.LogError("请先设置AssetBundle加载时的规则!"); } } } }
/// <summary> /// 获取对象实例 /// </summary> protected GameObject CreateInstance(GameObject prefab, UIInfoBase nodeInfo) { if (_cansaleKeys.Contains(nodeInfo.panelName)) { _cansaleKeys.Remove(nodeInfo.panelName); return(null); } if (prefab == null || nodeInfo == null) { return(null); } GameObject go = GameObject.Instantiate(prefab); go.name = nodeInfo.panelName; go.SetActive(true); return(go); }