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(); }
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(); }
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; } }
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)); }
public override void OnStart() { base.OnStart(); actor = gameObject.GetComponent <Actor>(); self = AbstractPerson.GetInstance(gameObject); gameObject.GetComponent <Animator>().Play(Animator.StringToHash(walkAni)); timer = 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; }
void OnTriggerExit2D(Collider2D col) { if (null == AbstractPerson.GetInstance <Player>(col.gameObject)) { return; } Game.Const.DefaultData.PlayerPos = this.newPosition; SceneMgr.LoadScene(newSceneName, newUIName); }
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)); } }
private void OnTriggerEnter(Collider2D col) { var hitPerson = AbstractPerson.GetInstance(col.gameObject); if (hitPerson == null) { Debug.Log("打击人物为空"); return; } hitPerson.TakeBattleEffect(self.AttackEffect); }
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); }
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()); } }
public override void OnAwake() { base.OnAwake(); player = GlobalVar.G_Player; self = AbstractPerson.GetInstance(gameObject); }
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 } }
public override void OnStart() { base.OnStart(); self = AbstractPerson.GetInstance(gameObject); }
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); }