public override void EnterState() { base.EnterState(); cmd = aiCharacter.lastCmd; aiCharacter.blackboard[AIParam.SkillCmd] = new AIEvent() { cmd = cmd.proto }; var target = cmd.skillAction.Target; var targetPlayer = ObjectManager.objectManager.GetPlayer(target); activeSkill = GetAttr().GetComponent <SkillInfoComponent>().GetActiveSkill(); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position, targetPlayer); skillStateMachine.cmd = cmd.proto; var time = Util.FrameToFloat(aiCharacter.lastCmd.skillAction.RunFrame); var dir = cmd.skillAction.Dir; var physics = aiCharacter.GetAttr().GetComponent <IPhysicCom>(); physics.TurnToDir(dir); holdTime = time; var npcConfig = aiCharacter.attribute.npcConfig; var actConfig = npcConfig.GetActionBySkillId(cmd.proto.SkillAction.SkillId); if (actConfig == null) { Debug.LogError("NpcSkill:" + MobaUtil.PrintObj(npcConfig) + ":" + cmd.proto); } var aniName = actConfig.aniName; aiCharacter.PlayAniInTime(aniName, time); }
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); }
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); }
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()); } }
public override void EnterState() { base.EnterState(); cmd = aiCharacter.lastCmd; activeSkill = GetAttr().GetComponent <SkillInfoComponent>().GetActiveSkill(); var target = cmd.skillAction.Target; var targetPlayer = ObjectManager.objectManager.GetPlayer(target); skillStateMachine = SkillLogic.CreateSkillStateMachine(GetAttr().gameObject, activeSkill.skillData, GetAttr().transform.position, targetPlayer); var time = Util.FrameToFloat(aiCharacter.lastCmd.skillAction.RunFrame); var dir = cmd.skillAction.Dir; holdTime = time; }
/* * 伤害计算过程 * 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(); }