private void OnTriggerEnter(Collider2D col) { var hitPerson = col.gameObject.GetPersonInfo() as IHighFivePerson; if (hitPerson == null) { // Debug.Log($"打击人物为空:{col.name}"); return; } // else // { // Debug.Log("打击到”" + hitPerson.CharacterName); // } switch (damageType) { case DamageType.PlayerToEnemy: if (hitPerson is IHighFiveCharacter) { break; } self.TryAttack(hitPerson); break; case DamageType.EnemyToPlayer: if (hitPerson is IHighFiveCharacter) { self.TryAttack(hitPerson); } break; } }
public void RunTriggerUnit(IHighFivePerson self, params object[] args) { if (!enable) { return; } this.self = self; if (self == null || !self.IsAlive) { return; } var tempDegree = GetSuitableDegree(self); var dir = new Vector2(Mathf.Cos(Mathf.Deg2Rad * tempDegree), Mathf.Sin(Mathf.Deg2Rad * tempDegree)); MainLoop.Instance.ExecuteLater(() => { 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.gameObject.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.gameObject != null) { AudioMgr.Instance.PlayEffect(this.audioName.StringValue, self.gameObject.transform.position); } break; #endregion #region SingleBullet case TriggerType.SingleBullet: var bulletObj = ResourceMgr.InstantiateGameObject(bulletName.StringValue, GetSuitablePosition(self)); var bullet = bulletObj.GetComponent <SingleBullet>(); if (!bullet) { throw new Exception($"{bulletObj.name}没有DirectBullet组建"); } bullet.initialSpeed = speed * new Vector2(self.Dir * dir.x, dir.y).normalized; bullet.damageScale = damageScale; bullet.gravityScale = gravityScale; bullet.maxLife = maxLife; bullet.Init(self); break; #endregion #region CurvedBullet case TriggerType.CurvedBullet: var curveBulletObj = ResourceMgr.InstantiateGameObject(bulletName.StringValue, self.position + new Vector3(0, 0.3f, 0)); var curveBullet = curveBulletObj.GetComponent <CurvedBullet>(); if (!curveBullet) { throw new Exception($"{curveBulletObj.name}没有curveBulletObj组建"); } curveBullet.aniX = aniX; curveBullet.aniY = aniY; curveBullet.xDir = reverseX ? -self.Dir : self.Dir; curveBullet.yDir = reverseY ? -1 : 1; curveBullet.damageScale = damageScale; curveBullet.gravityScale = gravityScale; curveBullet.maxLife = maxLife; curveBullet.Init(self); break; #endregion #region RayDamage case TriggerType.RayDamage: //面对方向 var position = self.gameObject.transform.position; var p = new Vector2(position.x, position.y); var target = this.rayLength * new Vector2(dir.x * self.Dir, dir.y); //调整身高偏移 p += new Vector2(0, 0.1f * self.gameObject.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 = result.transform.gameObject.GetPersonInfo() as IHighFivePerson; if (hitPerson == null) { Debug.Log(result.transform.gameObject); continue; } self.TryAttack(hitPerson); } break; #endregion #region Trigger2D case TriggerType.Trigger2D: if (Mathf.Abs(preLastTime) < 0.01f) { preLastTime = lastTime; } lastTime /= self.AttackSpeed; if (self.gameObject == null) { break; } var sword = self.gameObject.transform.Find(triggerPath.Path); var trigger = sword.GetOrAddComponent <TriggerInputer>(); trigger.onTriggerEnterEvent2D += this.OnTriggerEnter; // Debug.Log("添加监听"); MainLoop.Instance.ExecuteLater(() => { // Debug.Log("移除监听"); trigger.onTriggerEnterEvent2D -= this.OnTriggerEnter; }, lastTime); break; #endregion #region LightSword case TriggerType.LightSword: var swordObj = ResourceMgr.InstantiateGameObject(swordPrefabName.StringValue); var lightSword = swordObj.GetComponent <LightSword>(); if (!lightSword) { throw new Exception($"{swordObj.name}没有LightSword组建"); } lightSword.anchorMode = anchorMode; lightSword.damageScale = damageScale; lightSword.delayTime = delayTime; lightSword.easeType = easeType; lightSword.startSize = startSize; lightSword.targetSize = targetSize; lightSword.widenTime = widenTime; lightSword.HandlePosition = GetSuitablePosition(self); lightSword.RotateDegree = GetSuitableDegree(self); lightSword.Init(self); break; #endregion } }, this.startTime); }