Exemplo n.º 1
0
    void ChangedState(cGlobalData.StateOfTheWorld State)
    {
        bool Invisibility = (State == InvisibilityState);

        MeshRenderer[]        ChildMeshObj        = transform.GetComponentsInChildren <MeshRenderer>();
        SkinnedMeshRenderer[] ChildSkinnedMeshObj = transform.GetComponentsInChildren <SkinnedMeshRenderer>();

        foreach (MeshRenderer ChildMesh in ChildMeshObj)
        {
            ChildMesh.renderer.enabled = !Invisibility;
        }

        foreach (SkinnedMeshRenderer ChildMesh in ChildSkinnedMeshObj)
        {
            ChildMesh.renderer.enabled = !Invisibility;
        }

        if (DisebledColliders)
        {
            Collider[] Colliders = transform.GetComponents <Collider>();

            foreach (Collider ThisCollider in Colliders)
            {
                ThisCollider.enabled = !Invisibility;
            }

            Collider[] ChildColliders = transform.GetComponentsInChildren <Collider>();

            foreach (Collider ChildCollider in ChildColliders)
            {
                ChildCollider.enabled = !Invisibility;
            }

            if (ItIsPlatform)
            {
                cPlatformController[] Scripts = transform.GetComponents <cPlatformController>();
                foreach (cPlatformController Script in Scripts)
                {
                    Script.enabled = !Invisibility;
                }
            }
        }

        if (DisebledParticles)
        {
            ParticleSystem[] ChildParticles = transform.GetComponentsInChildren <ParticleSystem>();

            foreach (ParticleSystem ChildParticle in ChildParticles)
            {
                if (Invisibility)
                {
                    ChildParticle.Pause();
                    ChildParticle.Clear();
                }
                else
                {
                    ChildParticle.Play();
                }
            }
        }
    }
Exemplo n.º 2
0
            public ParticleDetail(Object obj, ParticleChecker checker) : base(obj, checker)
            {
                Object[] dependencys = EditorUtility.CollectDependencies(new Object[] { obj });
                foreach (var o in dependencys)
                {
                    if (o is ParticleSystem)
                    {
                        ParticleSystem ps    = o as ParticleSystem;
                        ChildParticle  child = new ChildParticle();
                        child.name     = ps.name;
                        child.maxCount = (int)GetParticleEmissionCount(ps);
#if UNITY_5_5_OR_NEWER
                        child.maxSize = ps.emission.enabled ? ps.main.startSize.constantMax : 0;
#else
                        child.maxSize = ps.emission.enabled ? ps.startSize : 0;
#endif
                        child.psObject    = o;
                        child.active      = CheckIsRefObjectActive(ps.gameObject);
                        refObjectEnabled &= child.active;
                        childParticles.Add(child);
                    }
                    else if (o is TrailRenderer)
                    {
                        TrailRenderer      tr    = o as TrailRenderer;
                        ChildTrailRenderer child = new ChildTrailRenderer();
                        child.name = tr.name;
#if UNITY_5_5_OR_NEWER
                        child.minVertexDistance = tr.minVertexDistance;
#else
                        child.minVertexDistance = 0;
#endif
                        child.time        = tr.time;
                        child.trailObject = tr;
                        child.active      = CheckIsRefObjectActive(tr.gameObject);
                        refObjectEnabled &= child.active;
                        childTrails.Add(child);
                    }
                }
                //根物体最大粒子数等于相加总和
                int totalMaxCount = 0;
                foreach (var p in childParticles)
                {
                    totalMaxCount += p.maxCount;
                }
                checkMap.Add(checker.particleMaxCount, totalMaxCount);
                //根物体的大小等于子物体中最大的
                float totalMaxSize = 0.0f;
                foreach (var p in childParticles)
                {
                    if (p.maxSize > totalMaxSize)
                    {
                        totalMaxSize = p.maxSize;
                    }
                }
                checkMap.Add(checker.particleMaxSize, totalMaxSize);
                checkMap.Add(checker.particleComponentCount, childParticles.Count);
                checkMap.Add(checker.trailRendererCount, childTrails.Count);
                checkMap[checker.activeItem] = refObjectEnabled.ToString();
                //没有的不显示了
                if (childParticles.Count == 0 && childTrails.Count == 0)
                {
                    checker.CheckList.Remove(this);
                }
            }