public void MakeClone() { if (_activateCloneGo != null && _activateClonePs != null) { _activateCloneGo.transform.position = transform.position; _activateClonePs.Play(); } var clone = Instantiate(TargetGameObject, TargetGameObject.transform.position, TargetGameObject.transform.rotation); foreach (var comp in clone.GetComponentsInChildren <Component>()) { if (!(comp is Renderer) && !(comp is Transform) && !(comp is MeshFilter)) { Destroy(comp); } } var cloneDestroyer = clone.AddComponent <SFX_SelfDestroyer>(); cloneDestroyer.LifeTime = CloneLifeTime; cloneDestroyer.Run(); if (CloneParticleSystem != null) { var go = Instantiate(CloneParticleSystem, TargetGameObject.transform.position, TargetGameObject.transform.transform.rotation); var ps = go.GetComponent <ParticleSystem>(); if (MeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(ps, MeshRenderer, 0f); } else if (SkinnedMeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(ps, SkinnedMeshRenderer, 0f); } ps.gameObject.SetActive(true); ps.Play(); } Destroy(clone, CloneLifeTime); }
public override void Setup() { base.Setup(); if (ReplaceMaterialInMotion) { var rends = TargetGameObject.GetComponentsInChildren <Renderer>(); foreach (var rend in rends) { _rendererToSharedMaterials[rend] = rend.sharedMaterials; } } if (ActivateCloneParticleSystem != null) { _activateCloneGo = Instantiate(ActivateCloneParticleSystem, Vector3.zero, Quaternion.identity); _activateClonePs = _activateCloneGo.GetComponent <ParticleSystem>(); _activateCloneGo.SetActive(true); _activateCloneGo.transform.parent = TargetGameObject.transform; if (MeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_activateClonePs, MeshRenderer, 0f); } else if (SkinnedMeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_activateClonePs, SkinnedMeshRenderer, 0f); } } if (TrailParticleSystem != null) { _trailGo = Instantiate(TrailParticleSystem, Vector3.zero, Quaternion.identity); _trailPs = _trailGo.GetComponent <ParticleSystem>(); _trailGo.SetActive(true); _trailGo.transform.parent = TargetGameObject.transform; if (MeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_trailPs, MeshRenderer, 0f); } else if (SkinnedMeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_trailPs, SkinnedMeshRenderer, 0f); } } if (FinishMotionParticleSystem != null) { _finishGo = Instantiate(FinishMotionParticleSystem, Vector3.zero, Quaternion.identity); _finishPs = _finishGo.GetComponent <ParticleSystem>(); _finishGo.SetActive(true); _finishGo.transform.parent = TargetGameObject.transform; if (MeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_finishPs, MeshRenderer, 0f); } else if (SkinnedMeshRenderer != null) { SFX_ParticleSystemMeshAttacher.Attach(_finishPs, SkinnedMeshRenderer, 0f); } } }