コード例 #1
0
        private void OnTriggerEntry(Collider2D col)
        {
            var col2d = obj.GetComponent <Collider2D>();

            if (col2d.IsTouchingLayers(1 << LayerMask.NameToLayer("BasicPlatform")))
            {
                Debug.Log("碰到地面");
                DestoryThis();
                return;
            }
            var ap = AbstractPerson.GetInstance(col.gameObject);

            if (ap == null)
            {
                return;
            }

            if (ap is Player && this.origin is Player)
            {
                Debug.Log("两个都是Player");
                return;
            }
            if (!(ap is Player) && !(this.origin is Player))
            {
                Debug.Log("两个都不是Player");
                return;
            }


            this.origin.OnCauseDamage(damage);
            ap.TakeBattleEffect(this.origin.AttackEffect);
            DestoryThis();
        }
コード例 #2
0
        private void OnTriggerEntry(Collider2D col)
        {
            var col2d = obj.GetComponent <Collider2D>();

            if (col2d.IsTouchingLayers(1 << LayerMask.NameToLayer("BasicPlatform")))
            {
//                Debug.Log("碰到地面");
                DestoryThis();
                return;
            }
            var ap = AbstractPerson.GetInstance(col.gameObject);

            if (ap == null)
            {
                return;
            }

            if (ap is Player && this.origin is Player)
            {
//                Debug.Log($"两个都是Player:[{ap.CharacterName}][{origin.CharacterName}]");
                return;
            }
            if (!(ap is Player) && !(this.origin is Player))
            {
//                Debug.Log($"两个都不是Player:[{ap.CharacterName}][{origin.CharacterName}]");
                return;
            }

//            Debug.Log(this.origin.CharacterName+" 攻击 "+ap.characterInfoInfo);

            this.origin.OnCauseDamage(damage);
            ap.PlayAcceptEffects(origin);
            DestoryThis();
        }
コード例 #3
0
        private void OnTriggerEnter(Collider2D col)
        {
            var hitPerson = AbstractPerson.GetInstance(col.gameObject);

            if (hitPerson == null)
            {
//                Debug.Log("打击人物为空");
                return;
            }
            else
            {
                Debug.Log("打击到”" + hitPerson.CharacterName);
            }

            switch (damageType)
            {
            case DamageType.PlayerToEnemy:
                if (hitPerson is Player)
                {
                    break;
                }
                hitPerson.PlayAcceptEffects(self);
                break;

            case DamageType.EnemyToPlayer:
                if (hitPerson is Player)
                {
                    hitPerson.PlayAcceptEffects(self);
                }

                break;
            }
        }
コード例 #4
0
 public override void OnStart()
 {
     player    = GlobalVar.G_Player;
     actor     = gameObject.GetComponent <Actor>();
     _animator = gameObject.GetComponent <Animator>();
     self      = AbstractPerson.GetInstance(gameObject);
     _animator.Play(Animator.StringToHash(walkAni));
 }
コード例 #5
0
 public override void OnStart()
 {
     base.OnStart();
     actor = gameObject.GetComponent <Actor>();
     self  = AbstractPerson.GetInstance(gameObject);
     gameObject.GetComponent <Animator>().Play(Animator.StringToHash(walkAni));
     timer = 0;
 }
コード例 #6
0
        public override void OnStart()
        {
            self = AbstractPerson.GetInstance(gameObject);
            SkillInfoAsset.Vector3Cache = GlobalVar.G_Player.Pos;
//			Debug.Log($"写入用户数据:【{SkillInfoAsset.skillName.StringValue}】" + SkillInfoAsset.Vector3Cache);
            self.RunSkill(SkillInfoAsset);
            timer = 0;
            gameObject.GetComponent <Actor>()._velocity = Vector3.zero;
        }
コード例 #7
0
    void OnTriggerExit2D(Collider2D col)
    {
        if (null == AbstractPerson.GetInstance <Player>(col.gameObject))
        {
            return;
        }
        Game.Const.DefaultData.PlayerPos = this.newPosition;

        SceneMgr.LoadScene(newSceneName, newUIName);
    }
コード例 #8
0
        private void OnTriggerEnter2D(Collider2D other)
        {
//            Debug.Log("有人碰我"+other.transform.name);
            var player = AbstractPerson.GetInstance(other.gameObject);

            if (player is Player)
            {
//                Debug.Log("Player碰我");
                player.PlayAcceptEffects(AbstractPerson.GetInstance(gameObject));
            }
        }
コード例 #9
0
        private void OnTriggerEnter(Collider2D col)
        {
            var hitPerson = AbstractPerson.GetInstance(col.gameObject);

            if (hitPerson == null)
            {
                Debug.Log("打击人物为空");
                return;
            }
            hitPerson.TakeBattleEffect(self.AttackEffect);
        }
コード例 #10
0
        public override TaskStatus OnUpdate()
        {
            var hit = Physics2D.Linecast(gameObject.transform.position,
                                         gameObject.transform.position + new Vector3(self.Dir * detectDistance.Value, 0, 0), LayerMask);


            if (hit && AbstractPerson.GetInstance(hit.transform.gameObject) is Player)
            {
//                Debug.Log("在检测范围内,开始追击");
                return(TaskStatus.Success);
            }

            return(TaskStatus.Failure);
        }
コード例 #11
0
        private void _Execute(AbstractPerson self)
        {
            //临时数据
            var mainc = self.obj.GetComponent <MainCharacter>();
            //面对方向
            var position = self.obj.transform.position;
            var p        = new Vector2(position.x, position.y);
            var target   = new Vector2(this.dir.x * self.Dir, this.dir.y) * this.len * self.Scanler;

            //调整身高偏移
            p += new Vector2(0, 0.1f * self.obj.transform.localScale.y);
            Debug.DrawLine(p, p + target, Color.red);
            var rescult = Physics2D.LinecastAll(p, p + target, this.layer);

            if (rescult.Length == 0)
            {
                return;
            }


            foreach (var r in rescult)
            {
                //对打击到的目标进行操作,添加各种效果
                var hitPerson = AbstractPerson.GetInstance(r.transform.gameObject);
                if (hitPerson == null)
                {
                    Debug.Log(r.transform.gameObject);
                    continue;
                }


                self.OnCauseDamage(GameMath.Damage(self.Attack));
                hitPerson.TakeBattleEffect(self.AttackEffect);


                //                hitPerson.TakeBattleEffect(new LockFrame());
            }
        }
コード例 #12
0
 public override void OnAwake()
 {
     base.OnAwake();
     player = GlobalVar.G_Player;
     self   = AbstractPerson.GetInstance(gameObject);
 }
コード例 #13
0
        public void Play(IEffector <AbstractPerson> ditascher, IEffector <AbstractPerson> receiver)
        {
            var dp = ditascher?.EffectPlayer;
            var rp = receiver?.EffectPlayer;

            switch (type)
            {
                #region Animation

            case EffectType.Animation:
                Assert.IsTrue(dp != null);

                var pos = new Vector3(dp.Dir * localPosition.x, localPosition.y, localPosition.z);

                var aniObj = GetPrefabGo(animationPrefab, dp.obj, pos, localScale);
//                    Debug.Log("Animator");

                var ani = aniObj.GetComponent <Animator>();

                if (causeDamage)
                {
                    var trigger = aniObj.GetComponent <TriggerInputer>();
                    if (trigger == null)
                    {
                        trigger = aniObj.AddComponent <TriggerInputer>();
                    }
                    trigger.Clear();
                    trigger.onTriggerEnterEvent += (col) =>
                    {
                        rp = AbstractPerson.GetInstance(col.gameObject);
                        if (rp != null)
                        {
                            dp.CauseDamageTo(rp);
                        }
                    };
                }


                ani.Play(clip.name);
                MainLoop.Instance.ExecuteLater(
                    () =>
                {
                    if (aniObj)
                    {
//                                Debug.Log("回收Animation");
                        GetPoor(animationPrefab).ReleaseObj(aniObj);
                    }
                }, clip.length);

                break;

                #endregion


                #region Partical

            case EffectType.Partical:
                var psObj = GetPrefabGo(particalPrefab, rp.obj);
                var ps    = psObj.GetComponent <ParticleSystem>();
//                    Debug.Log("Partical");
                ps.Stop();
                ps.Play();
                MainLoop.Instance.ExecuteUntilTrue(() => ps == null || ps.isStopped,
                                                   () =>
                {
                    if (psObj)
                    {
//                                Debug.Log("回收Partical");
                        GetPoor(particalPrefab).ReleaseObj(psObj);
                    }
                });
                break;

                #endregion

                #region Damage

            case EffectType.Damage:

                dp?.CauseDamageTo(rp);

                break;

                #endregion

                #region Audio

            case EffectType.Audio:
                switch (EffectInfoAsset.effectorType)
                {
                case EffectInfoAsset.EffectorType.Ditascher:
                    Assert.IsTrue(dp != null);
                    AudioMgr.Instance.PlayEffect(this.audioPath.StringValue, dp.Pos);
                    break;

                case EffectInfoAsset.EffectorType.Receiver:
                    Assert.IsTrue(rp != null);
                    AudioMgr.Instance.PlayEffect(this.audioPath.StringValue, rp.Pos);
                    break;
                }

                break;

                #endregion

                #region Shining

            case EffectType.Shining:
                Assert.IsTrue(rp != null);
                var sr    = rp.obj.GetComponent <SpriteRenderer>();
                var times = rp is Player ? rp.DefaultConstTime / shiningDuring : 0.8f;
                MainLoop.Instance.ExecuteEverySeconds(
                    render =>
                {
                    if (sr == null)
                    {
                        return;
                    }
                    sr.color = sr.color == shiningColor ? Color.white : shiningColor;
                }, times, shiningDuring, sr,
                    render =>
                {
                    if (sr == null)
                    {
                        return;
                    }
                    sr.color = Color.white;
                });
                break;

                #endregion

                #region Hitback

            case EffectType.HitBack:

                Assert.IsTrue(rp != null && dp != null);

                if (!rp.IgnoreHitback)
                {
                    var trans = rp.obj.transform;
//                        trans.position += new Vector3(dp.Dir * Mathf.Abs(dp.HitBackSpeed.x), dp.HitBackSpeed.y, 0);
                    var hitBack = new Vector2(dp.Dir * Mathf.Abs(dp.HitBackSpeed.x), dp.HitBackSpeed.y);
                    rp.Actor.ChangeVelBasedOnHitDir(hitBack, 15);
                }

                break;

                #endregion
            }
        }
コード例 #14
0
 public override void OnStart()
 {
     base.OnStart();
     self = AbstractPerson.GetInstance(gameObject);
 }
コード例 #15
0
        public void RunTriggerUnit(AbstractPerson self)
        {
            if (!enable)
            {
                return;
            }
            this.self = self;
            MainLoop.Instance.ExecuteLater(() =>
            {
//                Debug.Log("运行Trigger单元:" + this.type);
                switch (type)
                {
                    #region Effect

                case TriggerType.Effect:
                    Debug.Log("技能系统——TriggerType.Effect");
                    self.PlayAttackEffects(attackEffects);
                    break;

                    #endregion

                    #region Animation

                case TriggerType.Animation:
                    if (self == null)
                    {
                        throw new Exception("SkillCore为空");
                    }

                    var animator = GameAnimator.GetInstance(self.obj.GetComponent <Animator>());

                    if (animator == null)
                    {
                        throw new Exception(self.CharacterName + "没有Animator组件");
                    }

                    animator.speed = this.animationSpeed * self.AttackSpeed;


                    animator.Play(Animator.StringToHash(this.animationName.StringValue), AnimationWeight.High);


                    break;


                    #endregion

                    #region Audio

                case TriggerType.Audio:
                    if (self.obj != null)
                    {
                        AudioMgr.Instance.PlayEffect(this.audioName.Path, self.obj.transform.position);
                    }
                    break;

                    #endregion

                    #region Bullet

                case TriggerType.Bullet:
                    this.dir = new Vector2(self.Dir * Mathf.Abs(this.dir.x), this.dir.y);
                    new DirectLineBullet(GameMath.Damage(self.BaseAttack), this.dir, self.Pos + new Vector3(0, 0.3f * self.Scanler, 0)
                                         , self, this.bulletName.Path, speed: this.bulletSpeed, maxLife: this.maxLife);
                    break;

                    #endregion

                    #region Parabloa


                case TriggerType.Parabloa:
                    switch (targetType)
                    {
                    case TargetType.Vector3Offset:
                        new ParabloaBullet(this.damage, this.bulletSpeed, this.timeToTarget, self.Pos + offset,
                                           self.Pos, self, this.bulletName.Path, this.maxLife);
                        break;

                    case TargetType.GetFromCache:
//                                Debug.Log($"SkillAsset【{skillAsset.skillName.StringValue}】.Vector3Cache:"+skillAsset.Vector3Cache);
                        new ParabloaBullet(this.damage, this.bulletSpeed, this.timeToTarget, skillAsset.Vector3Cache,
                                           self.Pos, self, this.bulletName.Path, this.maxLife);
                        break;
                    }

                    break;

                    #endregion

                    #region RayDamage

                case TriggerType.RayDamage:
                    //面对方向
                    var position = self.obj.transform.position;
                    var p        = new Vector2(position.x, position.y);

                    var target = this.rayLength * self.Scanler * new Vector2(this.dir.x * self.Dir, this.dir.y);

                    //调整身高偏移
                    p += new Vector2(0, 0.1f * self.obj.transform.localScale.y);
                    Debug.DrawLine(p, p + target, Color.red);
                    var results = Physics2D.LinecastAll(p, p + target, this.rayTestLayer);

                    if (results.Length == 0)
                    {
                        return;
                    }

                    foreach (var result in results)
                    {
                        //对打击到的目标进行操作,添加各种效果
                        var hitPerson = AbstractPerson.GetInstance(result.transform.gameObject);
                        if (hitPerson == null)
                        {
                            Debug.Log(result.transform.gameObject);
                            continue;
                        }
                        self.OnCauseDamage(GameMath.Damage(self.BaseAttack));
                        hitPerson.PlayAcceptEffects(self);
                    }
                    break;

                    #endregion

                    #region Trigger2D

                case TriggerType.Trigger2D:
                    if (Mathf.Abs(preLastTime) < 0.01f)
                    {
                        preLastTime = lastTime;
                    }
                    lastTime /= self.AttackSpeed;
                    if (self.obj == null)
                    {
                        break;
                    }
                    var sword   = self.obj.transform.Find(triggerPath);
                    var trigger = (sword.GetComponent <TriggerInputer>() ??
                                   sword.gameObject.AddComponent <TriggerInputer>());

                    trigger.onTriggerEnterEvent += this.OnTriggerEnter;
//                        Debug.Log("添加监听");
                    MainLoop.Instance.ExecuteLater(() =>
                    {
//                            Debug.Log("移除监听");
                        trigger.onTriggerEnterEvent -= this.OnTriggerEnter;
                    }, lastTime);

                    break;

                    #endregion
                }
            }, this.startTime);
        }