Example #1
0
        /// <summary>
        ///显示粒子效果的时候出现在特定位置
        /// </summary>
        /// <returns>The particle.</returns>
        IEnumerator ShowParticle()
        {
            var skillConfig = Event.layout.GetComponent <SkillLayoutConfig>();
            var particle    = Event.layout.GetComponent <SkillLayoutConfig>().particle;

            //NGUITools.AddMissingComponent<RemoveSelf> (particle);
            Log.Sys("Init Particle for skill Layout " + particle + " " + skillConfig + " bone name " + skillConfig.boneName);
            if (particle != null)
            {
                if (skillConfig.delayTime > 0)
                {
                    yield return(new WaitForSeconds(skillConfig.delayTime));
                }

                //var g = GameObject.Instantiate(particle) as GameObject;
                var g = ParticlePool.Instance.GetGameObject(particle, ParticlePool.InitParticle);

                /*
                 * var xft = g.GetComponent<XffectComponent>();
                 * if (xft != null)
                 * {
                 *  xft.enabled = false;
                 * }
                 */

                var dm = NGUITools.AddMissingComponent <DumpMono>(g);
                dm.StartCoroutine(ParticlePool.CollectParticle(g, 2));


                if (skillConfig.boneName != "")
                {
                    Log.Sys("add particle to bone " + skillConfig.boneName);
                    //g.transform.parent = transform;
                    var par = Util.FindChildRecursive(stateMachine.attacker.transform, skillConfig.boneName);
                    if (par == null)
                    {
                        par = stateMachine.attacker.transform;
                    }

                    //g.transform.parent =
                    g.transform.localPosition = skillConfig.Position + par.transform.position;
                    g.transform.localRotation = Quaternion.identity;
                    g.transform.localScale    = Vector3.one;
                }
                else
                {
                    Log.Ani("Particle TargetPos " + Event.TargetPos);
                    if (Event.TargetPos)
                    {
                        if (stateMachine.target != null)
                        {
                            stateMachine.MarkPos      = stateMachine.target.transform.position;
                            g.transform.position      = stateMachine.target.transform.position + skillConfig.Position;
                            g.transform.localRotation = Quaternion.identity;
                            g.transform.localScale    = Vector3.one;
                        }
                    }
                    else if (Event.AttachToTarget)
                    {
                        if (stateMachine.target != null)
                        {
                            g.transform.parent        = stateMachine.target.transform;
                            g.transform.localPosition = skillConfig.Position;
                            g.transform.localRotation = Quaternion.identity;
                            g.transform.localScale    = Vector3.one;
                        }
                    }
                    else if (Event.UseMarkPos)
                    {
                        g.transform.position      = stateMachine.MarkPos + skillConfig.Position;
                        g.transform.localRotation = Quaternion.identity;
                        g.transform.localScale    = Vector3.one;
                    }
                    else
                    {
                        g.transform.parent        = transform;
                        g.transform.localPosition = skillConfig.Position;
                        g.transform.localRotation = Quaternion.identity;
                        g.transform.localScale    = Vector3.one;
                    }
                }

                //火焰哨兵的激光直接给目标造成伤害
                if (Event.SetBeamTarget)
                {
                    Log.AI("SetBeamTarget is " + stateMachine.target.transform.position);
                    var bt = Util.FindChildrecursive <BeamTarget>(g.transform);
                    if (bt != null)
                    {
                        bt.transform.position = stateMachine.target.transform.position + Event.BeamOffset;
                    }
                    BeamTargetPos = stateMachine.target.transform.position + Event.BeamOffset;
                }

                /*
                 * if (xft != null)
                 * {
                 *  StartCoroutine(EnableXft(xft));
                 * }
                 */
            }
        }