/// <summary> /// 取得预制体,失败返回null /// </summary> /// <param name="entityType">实体类型(是怪物,还是人物..)</param> /// <returns></returns> public static GameObject GetPrefab(ENTITY_TYPE entityType) { if (!bInit) { return(null); } if (m_PrefabMap.ContainsKey(entityType)) { PrefabNode prefabNode = m_PrefabMap[entityType]; if (prefabNode.m_PrefabList.Count > 0) { GameObject go = prefabNode.m_PrefabList.Dequeue(); go.SetActive(true); go.transform.SetParent(null); go.name = entityType.ToString(); return(go); } else { GameObject go = prefabNode.Instantiate(entityType); go.SetActive(true); go.transform.SetParent(null); go.name = entityType.ToString(); return(go); } } return(null); }
public static void CachePrefab(ENTITY_TYPE entityType, GameObject prefab) { if (!bInit) { return; } //如果还有子节点,删一下,避免带给下一个实体 if (prefab != null && prefab.transform.childCount > 0) { for (int i = prefab.transform.childCount - 1; i >= 0; i--) { UnityEngine.Object.Destroy(prefab.transform.GetChild(i).gameObject); } } if (m_PrefabMap.ContainsKey(entityType)) { prefab.name = entityType.ToString() + "--cache"; PrefabNode prefabNode = m_PrefabMap[entityType]; prefab.SetActive(false); prefab.transform.SetParent(PrefabCacheRoot.transform); // prefab.transform.localPosition = Vector3.zero; prefabNode.m_PrefabList.Enqueue(prefab); } }
private static void InsertToMap(ResNode obj, ENTITY_TYPE entityType) { PrefabNode prefabNode = new PrefabNode(); prefabNode.OrginalObj = obj; int cacheCount = 0; //如果是怪物,缓存 if (entityType == ENTITY_TYPE.TYPE_MONSTER) { cacheCount = monsterInitCacheCount; } else { cacheCount = playerInitCacheCount; } for (int i = 0; i < cacheCount; i++) { prefabNode.m_PrefabList.Enqueue(prefabNode.Instantiate(entityType)); } prefabNode.m_Type = entityType; m_PrefabMap.Add(entityType, prefabNode); obj = null; }