/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); if (OnDestroy != null) { m_BeginDieTime += Time.deltaTime; if (m_BeginDieTime > AppConst.MonsterDieDestroyTime) { OnDestroy(); } } if (!IsChangeOver) { CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Die.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Die); //如果动画执行了一遍 就切换待机 //if (CurrRoleAnimatorStateInfo.normalizedTime > 1 && CurrRoleFSMMgr.CurrRoleCtrl.OnRoleDie != null) //{ // CurrRoleFSMMgr.CurrRoleCtrl.OnRoleDie(CurrRoleFSMMgr.CurrRoleCtrl); //} IsChangeOver = true; } } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorName.Idle_Fight.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleState.Idle); } }
/// <summary> 实现基类 执行状态 </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Dali_Selected.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Dali_Selected); //如果动画执行了一遍 就切换待机 if (CurrRoleAnimatorStateInfo.normalizedTime > 1) { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); } } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorName.Die.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleState.Die); //如果动画执行了一遍,就切换死亡 if (CurrRoleAnimatorStateInfo.normalizedTime > 1) { CurrRoleFSMMgr.CurrRoleCtrl.OnRoleDie(CurrRoleFSMMgr.CurrRoleCtrl); } } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Hurt.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Hurt); //如果动画执行了一遍 就切换待机 if (CurrRoleAnimatorStateInfo.normalizedTime > 1) { //CurrRoleFSMMgr.CurrRoleCtrl.IsRigidity = false; CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(RoleIdleState.IdleFight); } } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorName.Run.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleState.Run); } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } if (Vector3.Distance(new Vector3(CurrRoleFSMMgr.CurrRoleCtrl.TargetPos.x, 0, CurrRoleFSMMgr.CurrRoleCtrl.TargetPos.z), new Vector3(CurrRoleFSMMgr.CurrRoleCtrl.transform.position.x, 0, CurrRoleFSMMgr.CurrRoleCtrl.transform.position.z)) > 0.1f) { Vector3 direction = CurrRoleFSMMgr.CurrRoleCtrl.TargetPos - CurrRoleFSMMgr.CurrRoleCtrl.transform.position; direction = direction.normalized; //归一化 direction = direction * Time.deltaTime * CurrRoleFSMMgr.CurrRoleCtrl.Speed; direction.y = 0; //transform.LookAt(new Vector3(m_TargetPos.x, transform.position.y, m_TargetPos.z)); //让角色缓慢转身 if (m_RotationSpeed <= 1) { m_RotationSpeed += 10f * Time.deltaTime; m_TargetQuaternion = Quaternion.LookRotation(direction); CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation = Quaternion.Lerp(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion, m_RotationSpeed); if (Quaternion.Angle(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion) < 1) { m_RotationSpeed = 0; } } CurrRoleFSMMgr.CurrRoleCtrl.CharacterController.Move(direction); } else { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorName.PhyAttack1.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleState.Attack); //如果动画执行了一遍,就切换待机 if (CurrRoleAnimatorStateInfo.normalizedTime > 1) { Debug.Log("攻击结束"); CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); } } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorName.Run.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleState.Run); } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } /************A星寻路相关***************/ //说明没有可走路 if (CurrRoleFSMMgr.CurrRoleCtrl.AStarPath == null) { //切换角色为idle状态 CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); return; } //如果整个路径走完了 就把角色切换为idle状态 if (CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPoint >= CurrRoleFSMMgr.CurrRoleCtrl.AStarPath.vectorPath.Count) { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); CurrRoleFSMMgr.CurrRoleCtrl.AStarPath = null; return; } //角色行走方向 Vector3 direction = Vector3.zero; //角色临时下一个目标点 Vector3 temp = new Vector3(CurrRoleFSMMgr.CurrRoleCtrl.AStarPath.vectorPath[CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPoint].x, CurrRoleFSMMgr.CurrRoleCtrl.gameObject.transform.position.y, CurrRoleFSMMgr.CurrRoleCtrl.AStarPath.vectorPath[CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPoint].z); //开始计算角色真正行走方向 direction = temp - CurrRoleFSMMgr.CurrRoleCtrl.gameObject.transform.position; //向量归一化处理 direction = direction.normalized; //开始计算真正行走的速度 direction = direction * Time.deltaTime * CurrRoleFSMMgr.CurrRoleCtrl.Speed; direction.y = 0; //让角色缓慢转身 if (m_RotationSpeed <= 1) { m_RotationSpeed += 10f * Time.deltaTime; m_TargetQuaternion = Quaternion.LookRotation(direction); CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation = Quaternion.Lerp(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion, m_RotationSpeed); if (Quaternion.Angle(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion) < 1) { m_RotationSpeed = 0; } } //判断是不是要向下一个目标点移动 float distance = Vector3.Distance(CurrRoleFSMMgr.CurrRoleCtrl.gameObject.transform.position, temp); //默认这个条件就到达目标点 if (distance <= direction.magnitude + 0.1f) { //开始更换下一个目标点 CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPoint++; } CurrRoleFSMMgr.CurrRoleCtrl.CharacterController.Move(direction); }
/// <summary> /// 实现基类 执行状态 /// </summary> public override void OnUpdate() { base.OnUpdate(); if (CurrRoleFSMMgr.CurrRoleCtrl.AStartPath == null) { CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Run.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Run); } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } return; } //以上为测试数据 CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Run.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Run); } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } //如果没有路 切换待机 if (CurrRoleFSMMgr.CurrRoleCtrl.AStartPath == null) { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); return; } //如果整个路径走完了 切换待机 if (CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPointIndex >= CurrRoleFSMMgr.CurrRoleCtrl.AStartPath.vectorPath.Count) { CurrRoleFSMMgr.CurrRoleCtrl.AStartPath = null; if (CurrRoleFSMMgr.CurrRoleCtrl.LastFightTime == 0 || Time.time > CurrRoleFSMMgr.CurrRoleCtrl.LastFightTime + 30f) { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); } else { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(RoleIdleState.IdleFight); } return; } //方向 Vector3 direction = Vector3.zero; //临时目标路径点 Vector3 temp = new Vector3(CurrRoleFSMMgr.CurrRoleCtrl.AStartPath.vectorPath[CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPointIndex].x, CurrRoleFSMMgr.CurrRoleCtrl.transform.position.y, CurrRoleFSMMgr.CurrRoleCtrl.AStartPath.vectorPath[CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPointIndex].z ); //计算方向 direction = temp - CurrRoleFSMMgr.CurrRoleCtrl.transform.position; direction = direction.normalized; //归一化 direction = direction * Time.deltaTime * CurrRoleFSMMgr.CurrRoleCtrl.Speed; direction.y = 0; if (direction == Vector3.zero) { CurrRoleFSMMgr.CurrRoleCtrl.ToIdle(); return; } //让角色缓慢转身 if (m_RotationSpeed <= 1) { m_RotationSpeed += 10f * Time.deltaTime; m_TargetQuaternion = Quaternion.LookRotation(direction); CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation = Quaternion.Lerp(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion, m_RotationSpeed); if (Quaternion.Angle(CurrRoleFSMMgr.CurrRoleCtrl.transform.rotation, m_TargetQuaternion) < 1) { m_RotationSpeed = 0; } } //判断是否应该向下一个点移动 float dis = Vector3.Distance(CurrRoleFSMMgr.CurrRoleCtrl.transform.position, temp); //当到达了临时目标点 索引+1 if (dis <= direction.magnitude + 0.1f) { CurrRoleFSMMgr.CurrRoleCtrl.AStartCurrWayPointIndex++; } CurrRoleFSMMgr.CurrRoleCtrl.CharacterController.Move(direction); }
/// <summary> 实现基类 执行状态 </summary> public override void OnUpdate() { base.OnUpdate(); if (CurrRoleFSMMgr.CurrRoleCtrl.CurrRoleType == RoleType.MainPlayer) { if (!IsChangeOver) { if (CurrRoleFSMMgr.CurrIdleState == RoleIdleState.IdleNormal) { //普通休闲 CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (!m_IsSelectPose) { //在状态机激活的状态名字是否与Idle匹配 if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Idle.ToString())) { //设置当前动画状态条件的目的是 防止频繁进入相同的动画状态 CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Idle); m_RuningTime += Time.deltaTime; if (m_RuningTime > 0.1f) { IsChangeOver = true; } } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } } else { if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Marry.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Marry); IsChangeOver = true; } } } else { //战斗休闲 CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Idle_Fight.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Idle_Fight); m_RuningTime += Time.deltaTime; if (m_RuningTime > 0.1f) { IsChangeOver = true; } } else { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } } } if (CurrRoleFSMMgr.CurrIdleState == RoleIdleState.IdleNormal && SceneMgr.Instance.CurrentSceneName != ConstDefine.Scene_SelectRole) { if (Time.time > m_NextChanteTime) { m_NextChanteTime = Time.time + m_ChangeStep; m_IsSelectPose = true; IsChangeOver = false; CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetBool(ToAnimatorCondition.ToIdleNormal.ToString(), false); CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.ToPose.ToString(), 4); } if (m_IsSelectPose) { CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Marry.ToString()) && CurrRoleAnimatorStateInfo.normalizedTime > 1) { m_IsSelectPose = false; IsChangeOver = false; CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.ToPose.ToString(), 0); CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetBool(ToAnimatorCondition.ToIdleNormal.ToString(), true); } } } } else { //如果是怪 CurrRoleAnimatorStateInfo = CurrRoleFSMMgr.CurrRoleCtrl.Animator.GetCurrentAnimatorStateInfo(0); if (CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Idle.ToString()) || CurrRoleAnimatorStateInfo.IsName(RoleAnimatorState.Idle_Fight.ToString())) { CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), (int)RoleAnimatorState.Idle_Fight); m_RuningTime += Time.deltaTime; if (m_RuningTime > 0.1f) { IsChangeOver = true; } } else { //防止怪原地跑 CurrRoleFSMMgr.CurrRoleCtrl.Animator.SetInteger(ToAnimatorCondition.CurrState.ToString(), 0); } } }