コード例 #1
0
    /// <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;
            }
        }
    }
コード例 #2
0
ファイル: RoleStateIdle.cs プロジェクト: tuita520/MMORPG-2
    /// <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);
        }
    }
コード例 #3
0
 /// <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();
         }
     }
 }
コード例 #4
0
ファイル: RoleStateDie.cs プロジェクト: WuHaiqiang/MMOPRG
    /// <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);
            }
        }
    }
コード例 #5
0
ファイル: RoleStateHurt.cs プロジェクト: tongxingyang/MMORPG
    /// <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);
            }
        }
    }
コード例 #6
0
ファイル: RoleStateRun.cs プロジェクト: WuHaiqiang/MMOPRG
    /// <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();
        }
    }
コード例 #7
0
ファイル: RoleStateAttack.cs プロジェクト: WuHaiqiang/MMOPRG
    /// <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);
        }
    }
コード例 #8
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);
    }
コード例 #9
0
    /// <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);
    }
コード例 #10
0
    /// <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);
            }
        }
    }