IEnumerator CastSkill(GameObject targetPlayer) { GetAttr().GetComponent <SkillInfoComponent> ().SetRandomActive(); var activeSkill = GetAttr().GetComponent <SkillInfoComponent>().GetActiveSkill(); var skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position, targetPlayer); Log.AI("Skill SetAni " + activeSkill.skillData.AnimationName); var realAttackTime = activeSkill.skillData.AttackAniTime / GetAttr().GetSpeedCoff(); var rate = GetAttr().animation[activeSkill.skillData.AnimationName].length / realAttackTime; SetAni(activeSkill.skillData.AnimationName, rate, WrapMode.Once); var physic = GetAttr().GetComponent <PhysicComponent>(); while (GetAttr().animation.isPlaying&& !quit) { if (CheckEvent()) { break; } //自动向目标旋转 Vector3 dir = targetPlayer.transform.position - GetAttr().transform.position; dir.y = 0; var newDir = Vector3.Slerp(GetAttr().transform.forward, dir, Time.deltaTime * FastRotateSpeed); physic.TurnTo(newDir); yield return(null); } skillStateMachine.Stop(); }
/// <summary> /// 初始化特定事件发生时候的技能层 /// 或者 创建孩子技能 /// </summary> /// <param name="item">Item.</param> /// <param name="evt">Evt.</param> void InitLayout(SkillDataConfig.EventItem item, MyEvent evt) { if (item.layout != null) { var g = Instantiate(item.layout) as GameObject; g.transform.parent = transform; //陷阱粒子效果 位置是 当前missile爆炸的位置 //瞬间调整SkillLayout的方向为 攻击者的正方向 g.transform.localPosition = InitPos; var y = attacker.transform.localRotation.eulerAngles.y; g.transform.localRotation = Quaternion.Euler(new Vector3(0, y, 0)); g.transform.localScale = Vector3.one; var runner = g.AddComponent <SkillLayoutRunner>(); runner.stateMachine = this; runner.Event = item; runner.triggerEvent = evt; allRunners.Add(g); Log.AI("SkillLayout " + item.layout.name); } else if (item.childSkillId != 0 && item.childSkillId != -1) { Log.AI("Create Child Skill " + item.childSkillId); SkillLogic.CreateSkillStateMachine(attacker, Util.GetSkillData(item.childSkillId, 1), evt.missile.position); } }
public override void EnterState() { base.EnterState(); Log.AI("Enter Skill State "); //启动技能状态机 启动动画 activeSkill = GetAttr().GetComponent <SkillInfoComponent> ().GetActiveSkill(); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position); //GetAttr ().GetComponent<AnimationController> ().SetAnimationSampleRate (100); }
public override void EnterState() { base.EnterState(); Log.AI("Enter Pet Skill State "); //启动技能状态机 启动动画 activeSkill = GetAttr().GetComponent <SkillInfoComponent>().GetActiveSkill(); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position, null); SetAni(activeSkill.skillData.AnimationName, 1f, WrapMode.Once); }
void OnEvent(MyEvent evt) { if (evt.type == MyEvent.EventType.HitTarget) { var target = evt.target; //在目标身上立即添加这个武器Buff造成的伤害Buff //Hurt Direct 但是伤害数值0 WeaponDamagePCT= 0 var skmachine = SkillLogic.CreateSkillStateMachine(obj, Util.GetSkillData( System.Convert.ToInt32(affix.GetPara(PairEnum.Abs)), 1), Vector3.zero, target); } }
public override void EnterState() { base.EnterState(); Log.AI("sentry Enter Skill State "); activeSkill = GetAttr().GetComponent <SkillInfoComponent>().GetActiveSkill(); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position, aiCharacter.GetEnemy()); SetAni(activeSkill.skillData.AnimationName, 1f, WrapMode.Once); if (GetAttr().ObjUnitData.AttachToMaster) { GetAttr().StartCoroutine(TraceMaster()); } }
IEnumerator DamageNear() { while (!IsDie) { yield return(new WaitForSeconds(3)); BackgroundSound.Instance.PlayEffect("skill/fireimp1"); var stateMachine = SkillLogic.CreateSkillStateMachine(obj, Util.GetSkillData(129, 1), obj.transform.position, null); if (affix.fireParticle != null) { var evt = new MyEvent(MyEvent.EventType.SpawnParticle); evt.particleOffset = new Vector3(0, 1, 0); evt.particle2 = affix.fireParticle; evt.boneName = null; evt.player = obj; MyEventSystem.myEventSystem.PushEvent(evt); } } }
/* * 伤害计算过程 * 1:伤害对象判定 客户端做 * 2:伤害数值确定 服务端 或者客户端 * 3:伤害效果施展 例如击退 服务端 或者 客户端 */ //TODO:增加摇杆控制攻击方向功能 这样人物会根据摇杆方向来确定攻击目标 IEnumerator WaitForAttackAnimation(Animation animation) { var playerMove = GetAttr().GetComponent <MoveController>(); var camRight = playerMove.camRight; var camForward = playerMove.camForward; var vcontroller = playerMove.vcontroller; var physics = playerMove.GetComponent <PhysicComponent>(); var rd = Random.Range(1, 3); BackgroundSound.Instance.PlayEffect("onehandswinglarge" + rd); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position); Log.AI("Wait For Combat Animation"); //GameObject enemy = NearestEnemy (); float passTime = 0; //var transform = GetAttr ().transform; bool hitYet = false; do { if (!hitYet && GetEvent().onHit) { hitYet = true; } if (CheckEvent()) { break; } float v = 0; float h = 0; if (vcontroller != null) { h = vcontroller.inputVector.x; //CameraRight v = vcontroller.inputVector.y; //CameraForward } if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f) { Vector3 moveDirection = playerMove.transform.forward; Vector3 targetDirection = h * camRight + v * camForward; if (targetDirection != Vector3.zero) { moveDirection = Vector3.RotateTowards(moveDirection, targetDirection, rotateSpeed * Time.deltaTime, 0); } moveDirection = moveDirection.normalized; //playerMove.transform.rotation = Quaternion.LookRotation (moveDirection); physics.TurnTo(moveDirection); var movement = moveDirection * walkSpeed; physics.MoveSpeed(movement); } if (passTime >= animation [attackAniName].length * 0.8f / animation [attackAniName].speed) { break; } passTime += Time.deltaTime; var vhValue = Mathf.Abs(v) + Mathf.Abs(h); if (hitYet && vhValue > 0.2f) { //stopAttack = true; break; } yield return(null); } while(!quit); Log.Ani("Animation is Playing stop " + attackAniName); skillStateMachine.Stop(); }
void Start() { ai.ChangeState(AIStateEnum.IDLE); SkillLogic.CreateSkillStateMachine(gameObject, Util.GetSkillData(128, 1), transform.position, null); }