Esempio n. 1
0
    void StrafeMove()
    {
        controller.moveSpeed = Player.walkSpeed;

        Player target = UnityHelper.GetLevelManager().GetPlayer(player.targetId);

        controller.faceYaw = CommonHelper.YawOfVector3(target.transform.position - player.transform.position);
        float moveYaw = controller.input.moveYaw;
        //strafe blend
        float aimYaw  = controller.aimYaw;
        float diffYaw = CommonHelper.AngleDiffClosest(moveYaw, aimYaw);

        targetStrafeForward = 1 - Mathf.Abs(diffYaw) / 180f * 2f;
        diffYaw             = CommonHelper.AngleDiffClosest(moveYaw, aimYaw + 90f);
        targetStrafeRight   = 1 - Mathf.Abs(diffYaw) / 180f * 2f;

        player.strafeForward = CommonHelper.FloatTowards(player.strafeForward, targetStrafeForward, Time.fixedDeltaTime * 5f);
        player.strafeRight   = CommonHelper.FloatTowards(player.strafeRight, targetStrafeRight, Time.fixedDeltaTime * 5f);

        PhysicsMove(moveYaw);

        if (upperAction == UpperAction.Empty)
        {
            if (player.blocking)
            {
                player.SetUpperAniState(Player.StateNameHash.blockIdle);
            }
            else
            {
                player.SetUpperAniState(Player.StateNameHash.meleeStrafe);
            }
        }
        player.SetLowerAniState(Player.StateNameHash.meleeStrafe);
    }
Esempio n. 2
0
    void StartSmoothYaw()
    {  //这里计算环形插值
        float diff = CommonHelper.AngleDiffClosest(this.faceYaw, smoothYaw);

        smoothYawStepLen = Mathf.Abs(diff) * 6f;
    }
Esempio n. 3
0
    public override void FixedUpdate()
    {
        if (!controller.grounded)
        {   //不在地面
            inAirTime += Time.fixedDeltaTime;
            if (inAirTime > 0.5f)
            {
                controller.IntoState(PlayerStateType.InAir);
            }
        }
        else
        {  //在地面
            inAirTime = 0;
            if (controller.input.jump)
            {
                if (controller.EnergyCost(Player.jumpEnergyCost) > 0)
                {
                    controller.IntoState(PlayerStateType.Jump);
                }
            }
            else if (controller.input.roll)
            {
                if (controller.EnergyCost(Player.rollEnergyCost) > 0)
                {
                    controller.IntoState(PlayerStateType.Roll);
                }
            }
            else if (!controller.input.offHand)
            {  //退出瞄准状态
                controller.IntoState(PlayerStateType.Move);
            }
            else
            {
                if (controller.input.mainHand)
                {
                    TimeSpan span = DateTime.Now - lastShootTime;
                    if (span.TotalMilliseconds > 300)
                    {
                        if (controller.EnergyCost(Player.shootEnergyCost) > 0)
                        {
                            Shoot();
                            lastShootTime = DateTime.Now;
                        }
                    }
                }

                if (!controller.input.hasMove) //没输入方向
                {
                    player.SetLowerAniState(Player.StateNameHash.aim);
                    controller.rigidBody.Sleep();
                    targetStrafeForward = 0f;
                    targetStrafeRight   = 0f;
                }
                else
                {
                    float moveYaw = controller.input.moveYaw;
                    float aimYaw  = controller.aimYaw;
                    float diffYaw = CommonHelper.AngleDiffClosest(moveYaw, aimYaw);
                    targetStrafeForward = 1 - Mathf.Abs(diffYaw) / 180f * 2f;
                    diffYaw             = CommonHelper.AngleDiffClosest(moveYaw, aimYaw + 90f);
                    targetStrafeRight   = 1 - Mathf.Abs(diffYaw) / 180f * 2f;

                    player.SetLowerAniState(Player.StateNameHash.aimStrafe, false, 1.5f);
                    player.strafeForward = CommonHelper.FloatTowards(player.strafeForward, targetStrafeForward, Time.fixedDeltaTime * 5f);
                    player.strafeRight   = CommonHelper.FloatTowards(player.strafeRight, targetStrafeRight, Time.fixedDeltaTime * 5f);

                    Vector3 moveDir    = CommonHelper.DirOnPlane(controller.groundNormal, moveYaw);
                    float   speedOnDir = Vector3.Dot(moveDir, controller.rigidBody.velocity);
                    controller.rigidBody.AddForce(moveDir * Player.moveForce);
                    if (speedOnDir > Player.strafeSpeed)
                    {
                        controller.rigidBody.velocity = moveDir * Player.strafeSpeed;
                    }
                }
            }
        }
    }