示例#1
0
    /// <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);
    }
示例#2
0
    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);
        }
    }
示例#3
0
    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;
    }