Exemple #1
0
 private void BindUI()
 {
     offset    = transform.Find("offset").gameObject;
     horiMove  = offset.AddComponent <HoriMove>();
     bornPlace = transform.Find("offset/born");
     pointRoot = transform.Find("offset/points");
 }
Exemple #2
0
    public override void OnEnter()
    {
        //进入状态 播放对应状态动画
        animator.SetBool(aniName, true);

        //开始跳跃时 获取一次输入
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
        Vector3 move = new Vector3(h, 0, v);

        if (move != Vector3.zero) //有输入
        {
            //根据主摄像机 将direction转换为相对于相机的世界坐标
            move   = Camera.main.transform.TransformDirection(move);
            move.y = 0;                                         //y轴值清零
            move.Normalize();                                   //单位化向量大小 修正因摄像机Rotation导致的数值波动
            transform.rotation = Quaternion.LookRotation(move); //转向移动方向
        }

        //设定动画混合树数值 播放跳跃动画
        animator.SetFloat("BlendNum", Random.Range(0, 3));

        //水平移动 赋值给 最终移动方向
        move       *= speed;
        vertiMove.y = jumpSpeed;         //跳跃向上速度
        HoriMove.Set(move.x, 0, move.z); //水平移动速度

        onGround = true;                 //开始时在地面上
    }
    public override void OnEnter()
    {
        //进入状态 播放对应状态动画
        animator.SetInteger("Damage", 3);

        //冲击力 赋值
        HoriMove.Set(player.DamageImpact.x, 0, player.DamageImpact.z); //水平方向移动
        vertiMove.Set(0, player.DamageImpact.y, 0);                    //垂直方向移动 重力
    }
Exemple #4
0
    public override void OnEnter()
    {
        //播放对应动画
        animator.SetBool(aniName, true);
        //重置受伤触发
        enemy.damage_ = false;

        //冲击力 赋值
        HoriMove.Set(enemy.DamageImpact.x, 0, enemy.DamageImpact.z); //水平方向移动
        vertiMove.Set(0, enemy.DamageImpact.y, 0);                   //垂直方向移动 重力

        //播放粒子效果组
        particle.Play(enemyState);
    }
Exemple #5
0
    public override void OnEnter()
    {
        //进入状态 播放对应状态动画
        animator.SetBool(aniName, true);

        //开始跳跃时 获取一次输入
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");

        Vector3 move = new Vector3(h, 0, v);

        //判断动画 根据摄像机方向转换direction 玩家转向
        if (move != Vector3.zero) //有输入
        {
            //根据主摄像机 将direction转换为相对于相机的世界坐标
            move   = Camera.main.transform.TransformDirection(move);
            move.y = 0;                                             //y轴值清零
            move.Normalize();                                       //单位化向量大小 修正因摄像机Rotation导致的数值波动

            float angle = Vector3.Angle(move, transform.forward);   //计算闪避方向 与 玩家当前朝向 的角度

            if (angle < 140)                                        //非后方闪避
            {
                transform.rotation = Quaternion.LookRotation(move); //转向移动方向
                animator.SetFloat("BlendNum", 1);                   //设定 闪避动画 混合树数值
            }
            else //后方闪避
            {
                transform.rotation = Quaternion.LookRotation(-move); //转向移动方向的反方向
                animator.SetFloat("BlendNum", -1);                   //设定 闪避动画 混合树数值
            }
        }
        else
        {
            move = transform.forward;         //向当前Player前方闪避
            animator.SetFloat("BlendNum", 1); //设定动画混合树数值 播放跳跃动画
        }
        //水平移动 赋值给 最终移动方向
        move       *= speed;
        vertiMove.y = jumpSpeed;         //跳跃向上速度
        HoriMove.Set(move.x, 0, move.z); //水平移动速度

        //默认鼠标连击未按下
        nextCombo = false;

        //播放粒子效果组
        particle.Play(playerState);
    }
Exemple #6
0
    public override void OnExcute()
    {
        Gravity(); //模拟重力

        //状态保护 进入动画后才执行方法
        if (!animator.GetCurrentAnimatorStateInfo(0).IsName(aniName))
            return;

        //获取键盘输入
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
        Vector3 move = new Vector3(h, 0, v);

        if (move != Vector3.zero) //有输入
        {
            float walkSpeed; //走路模式速度

            if (inWalk) //走路模式
            {
                //设定动画混合树数值 播放走路动画
                animator.SetFloat("BlendNum", move.magnitude * -2.0f);
                walkSpeed = 0.3f; //设置移动速度
            }
            else
            {
                //设定动画混合树数值 播放奔跑动画
                animator.SetFloat("BlendNum", move.magnitude * 2.0f);
                walkSpeed = 1.0f;
            }

            //根据主摄像机 将direction转换为相对于相机的世界坐标
            move = Camera.main.transform.TransformDirection(move);
            move.y = 0; //y轴值清零
            move.Normalize();  //单位化向量大小 修正因摄像机Rotation导致的数值波动
            transform.rotation = Quaternion.LookRotation(move); //转向移动方向
            //水平移动
            move *= speed * walkSpeed;
            HoriMove.Set(move.x, 0, move.z); 
            cc.Move(HoriMove * Time.deltaTime);
        }
        else //无输入时清零水平移动
        {
            //设定动画混合树数值 播放Idle动画
            animator.SetFloat("BlendNum", move.magnitude);
        }
    }
Exemple #7
0
    public override void OnEnter()
    {
        if (player.StateActionCheck(PlayerState.Death))
        {
            //切换到 死亡状态
            manager.ChangeState <PlayerStateDeath>();
            return;
        }

        //进入状态 播放对应状态动画
        animator.SetInteger("Damage", 1);

        //冲击力 赋值
        HoriMove.Set(player.DamageImpact.x, 0, player.DamageImpact.z); //水平方向移动
        vertiMove.Set(0, player.DamageImpact.y, 0);                    //垂直方向移动 重力

        //转向冲击力反方向
        transform.rotation = Quaternion.LookRotation(-HoriMove);

        //播放粒子效果组
        particle.Play(playerState);
    }
Exemple #8
0
    public override void OnEnter()
    {
        //播放对应动画
        animator.SetBool(aniName, true);
        //重置受伤触发
        orcKing.damage_ = false;
        //是否死亡
        if (orcKing.Death)
        {
            //切换到 死亡状态
            if (manager.ChangeState <OrcKiStateDeath>())
            {
                return;
            }
        }

        //冲击力 赋值
        HoriMove.Set(orcKing.DamageImpact.x, 0, orcKing.DamageImpact.z); //水平方向移动
        vertiMove.Set(0, orcKing.DamageImpact.y, 0);                     //垂直方向移动 重力

        //开始时在地面
        onGround = true;

        //播放粒子效果组
        particle.Play(orcKiState);

        //兽人首领 冲击力过小 直接回到追逐状态
        if (orcKing.DamageImpact.magnitude < 20.0f)
        {
            //切换到追逐状态
            if (manager.ChangeState <OrcKiStateChase>())
            {
                return;
            }
        }
    }