首页 > 解决方案 > Unity 2018 C# - Fbx 使用输入运行动画缩放?

问题描述

我已经想出了如何在我的冒险游戏中为我的角色在 Unity 中制作 fbx 动画,但现在我希望我的角色的运行动画移动,其运动速度与 xbox 控制器上控制杆的输入相关.

另外,当我将来添加行走动画时,我希望为控制杆输入设置一个阈值,以便在控制杆输入最少时角色行走,当控制杆输入更多时角色运行。有什么建议吗?

这是我的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCharacterController : MonoBehaviour {

    static Animator anim;

    public bool walking;

    public GameObject playerModel, Hero;


    //Transforms
    public Transform playerCam, character, centerPoint;

    private Vector3 moveDirection;

    //character controller declaration
    CharacterController player;

    //Mouse Rotation
    private float rotX, rotY;

    //Mouse Y Position
    public float mouseYPosition = 1f;

    //Mouse Sensitivity
    public float Sensitivity = 10f;

    //Mouse Zoom
    private float zoom;
    public float zoomSpeed = 2;

    //Clamping Zoom
    public float zoomMin = -2f;
    public float zoomMax = -10f;

    public float rotationSpeed = 5f;

    //Move Front Back left & Right
    private float moveFB, moveLR;

    //Movement Speed
    public float Speed = 2f;

    //Velocity of Gravity
    public float verticalVelocity;

    //Jump Distance
    public float jumpDist = 5f;

    //Multiple Jumps
    int jumpTimes;

    //To use with Dialogue Manager
    public DialogueManager DiagM;

    public AudioClip jumpSound;
    public AudioClip HurtSound;

    AudioSource audioSource;

    //knockback

    public float knockBackForce;
    public float knockBackTime;
    private float knockBackCounter;


    // Use this for initialization
    void Start ()



    {
        //character controller
        player = GameObject.Find("Player").GetComponent<CharacterController> ();

        anim = GetComponent<Animator>();


        //mouse zoom
        zoom = -3;

        centerPoint.transform.position = playerCam.transform.position;
        centerPoint.transform.parent = null;

        audioSource = GetComponent<AudioSource>();

    }

    // Update is called once per frame

    void Update ()

    {

        //if (DiagM.StartDialogue)
        //{ return; }

        //Mouse Zoom Input
        zoom += Input.GetAxis ("Mouse ScrollWheel") * zoomSpeed;
        if (zoom > zoomMin)
            zoom = zoomMin;
        if (zoom < zoomMax)
            zoom = zoomMax;

        //Mouse Camera Input
        playerCam.transform.localPosition = new Vector3 (0, 0, zoom);

        //Mouse Rotation

        rotX += Input.GetAxis ("Mouse X") * Sensitivity;
        rotY -= Input.GetAxis ("Mouse Y") * Sensitivity;      

        //Clamp Camera

        rotY = Mathf.Clamp (rotY, -60f, 60f);
        playerCam.LookAt (centerPoint);
        centerPoint.localRotation = Quaternion.Euler (rotY, rotX, 0);




        //Movement Speed
        if (knockBackCounter <= 0)
     {   
        moveDirection = (transform.forward * Input.GetAxis("Vertical")) + (transform.right * Input.GetAxis("Horizontal"));
        moveDirection = moveDirection * Speed;
        moveDirection.y = verticalVelocity;

        player.Move(moveDirection * Time.deltaTime);



        //Movement Rotation

        centerPoint.position = new Vector3 (character.position.x, character.position.y + mouseYPosition, character.position.z);


            //knockback disable


            //Movement Input
            if (Input.GetAxis("Vertical") != 0 || Input.GetAxis("Horizontal") != 0)

            {

                transform.rotation = Quaternion.Euler(0f, centerPoint.rotation.eulerAngles.y, 0f);
                Quaternion turnAngle = Quaternion.LookRotation(new Vector3(moveDirection.x, 0f, moveDirection.z));
                playerModel.transform.rotation = Quaternion.Slerp(playerModel.transform.rotation, turnAngle, Time.deltaTime * rotationSpeed);

                if (player.isGrounded == true)

                {
                    anim.Play("Running");                 
                }
            }
            else
            {
                if (player.isGrounded == true)
                { anim.Play("Idle"); }
            }

            if (player.isGrounded == true)

            {
                jumpTimes = 0;
                verticalVelocity = -Physics.gravity.y * Time.deltaTime;       
            }

            else

            {
                verticalVelocity += Physics.gravity.y * Time.deltaTime;
            }

            if (Input.GetButtonDown("Submit"))
            {
                anim.Play("Hello");
            }

            if (jumpTimes < 1)

            {
                if (Input.GetButtonDown("Jump"))
                {
                    verticalVelocity += jumpDist;
                    anim.Play("Jump");
                    audioSource.PlayOneShot(jumpSound, 1F);
                    jumpTimes += 1;
                }
            }
        }
        else
        {
            knockBackCounter -= Time.deltaTime;
        }

    }

    public void Knockback(Vector3 direction)
    {

        knockBackCounter = knockBackTime;
        anim.SetTrigger("isJumping");
        audioSource.PlayOneShot(HurtSound, 50F);
        moveDirection = direction * knockBackForce;
        moveDirection.y = knockBackForce;
    }


}

标签: c#unity3d

解决方案


推荐阅读