public void destroyAllUnitBodyEffect()
    {
        foreach (KeyValuePair <string, Dictionary <string, Stack <ParticleResizeContainer> > > kv in bodyEffectPool)
        {
            if (kv.Value != null)
            {
                if (kv.Value != null)
                {
                    foreach (KeyValuePair <string, Stack <ParticleResizeContainer> > kv2 in kv.Value)
                    {
                        while (kv2.Value != null && kv2.Value.Count > 0)
                        {
                            ParticleResizeContainer p = kv2.Value.Pop();
                            p.destroy();
                            resizerContainerPool.Push(p);
                        }
                    }
                }
            }
        }


        foreach (KeyValuePair <string, Dictionary <string, string> > kv in bodyEffectInfo)
        {
            if (kv.Value != null)
            {
                foreach (KeyValuePair <string, string> kv2 in kv.Value)
                {
                    ResourceManager.instance.destroyPrefab(kv2.Value);
                }
            }
        }
    }
    public void removeBodyEffect(Monster mon)
    {
        if (mon != null && mon.bodyEffects != null)
        {
            while (mon.bodyEffects.Count > 0)
            {
                ParticleResizeContainer p = mon.bodyEffects.Pop();
                if (p != null && p.gameObject != null)
                {
                    p.gameObject.SetActive(false);
                    bodyEffectPool[mon.resourceId][p.gameObject.name].Push(p);
                    p.gameObject.transform.parent = GameManager.me.assetPool;
                }
            }

            bodyEffectListPool.Push(mon.bodyEffects);
            mon.bodyEffects = null;
        }
    }
    IEnumerator checkUnitBodyEffectCT(Monster mon, bool isLobby)
    {
        if (isLobby == false)
        {
            if (GameManager.me.effectManager.isCompleteLoadEffect == false)
            {
                if (GameManager.me.effectManager.didStartLoadEffect == false)
                {
                    GameManager.me.effectManager.startLoadEffects(true);
                }
            }
        }

        while (GameManager.me.effectManager.isCompleteLoadEffect == false)
        {
            yield return(null);
        }
        ;

        // unitmonster 중 s급 캐릭터의 transform 이름으로 effect를 찾는다.
        if (mon.unitData != null && ((mon.unitData.rare >= RareType.SS && isLobby) || (mon.unitData.rare >= RareType.S && isLobby == false)))
        {
            Transform[] trs;

            if (bodyEffectInfo.ContainsKey(mon.monsterData.resource) == false)
            {
                while (GameManager.me.effectManager.isCompleteLoadEffect == false)
                {
                    yield return(null);
                }
                ;

                bodyEffectInfo.Add(mon.monsterData.resource, new Dictionary <string, string>());
                bodyEffectPool.Add(mon.monsterData.resource, new Dictionary <string, Stack <ParticleResizeContainer> >());

                trs = mon.transform.GetComponentsInChildren <Transform>();
                string n;

                foreach (Transform tr in trs)
                {
                    if (string.IsNullOrEmpty(tr.name) == false)
                    {
                        Util.stringBuilder.Length = 0;
                        Util.stringBuilder.Append("E_");
                        Util.stringBuilder.Append(mon.resourceId.ToUpper());
                        Util.stringBuilder.Append("_EFF_");
                        Util.stringBuilder.Append(tr.name.ToUpper());
                        n = Util.stringBuilder.ToString();

                        if (GameManager.info.effectData.ContainsKey(n))
                        {
                            bodyEffectInfo[mon.monsterData.resource].Add(tr.name, n);
                            bodyEffectPool[mon.monsterData.resource].Add(n, new Stack <ParticleResizeContainer>());
                        }
                    }
                }
            }

            bool hasBodyEffect = false;

            foreach (KeyValuePair <string, string> kv in bodyEffectInfo[mon.monsterData.resource])
            {
                hasBodyEffect = true;
                GameManager.me.effectManager.addLoadEffectData(kv.Value);
            }

            startLoadEffects(true);

            while (GameManager.me.effectManager.isCompleteLoadEffect == false)
            {
                yield return(null);
            }
            ;

            if (hasBodyEffect && mon.gameObject.activeSelf)
            {
                trs = mon.transform.GetComponentsInChildren <Transform>();
                string n;

                Stack <ParticleResizeContainer> effectList;

                if (bodyEffectListPool.Count > 0)
                {
                    effectList = bodyEffectListPool.Pop();
                }
                else
                {
                    effectList = new Stack <ParticleResizeContainer>();
                }

                foreach (Transform tr in trs)
                {
                    if (bodyEffectInfo[mon.monsterData.resource].ContainsKey(tr.name))
                    {
                        ParticleResizeContainer p;

                        if (bodyEffectPool[mon.monsterData.resource][bodyEffectInfo[mon.monsterData.resource][tr.name]].Count > 0)
                        {
                            p = bodyEffectPool[mon.monsterData.resource][bodyEffectInfo[mon.monsterData.resource][tr.name]].Pop();
                            p.gameObject.SetActive(true);
                        }
                        else
                        {
                            p = new ParticleResizeContainer(GameManager.info.effectData[bodyEffectInfo[mon.monsterData.resource][tr.name]].getPrefabEffect());
                            p.gameObject.name = bodyEffectInfo[mon.monsterData.resource][tr.name];
                        }

                        p.gameObject.transform.parent        = tr;
                        p.gameObject.transform.localPosition = Vector3.zero;
                        p.gameObject.transform.localScale    = Vector3.one;
                        _q.eulerAngles = Vector3.zero;
                        p.gameObject.transform.localRotation = _q;

                        effectList.Push(p);

                        if (isLobby)
                        {
                            p.resize(1.0f / (110.0f / mon.uiSize2) * 0.6f);
                        }
                        else
                        {
                            p.resize(1.0f);
                        }
                    }
                }



                if (effectList.Count > 0)
                {
                    mon.bodyEffects = effectList;
                }
            }
        }
    }