Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }