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(); } } } }
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); } }