以下是一个简单的Unity角色状态FSM有限状态机的C#代码示例:

using UnityEngine;

public class CharacterStateMachine : MonoBehaviour
{
    // 定义状态枚举
    public enum State
    {
        Idle,
        Walking,
        Running,
        Jumping
    }

    // 当前状态
    public State currentState = State.Idle;

    // 跳跃高度
    public float jumpHeight = 5f;

    // 速度
    public float walkSpeed = 2f;
    public float runSpeed = 6f;

    // 重力
    public float gravity = 10f;

    // 移动方向
    private Vector3 moveDirection = Vector3.zero;

    // 引用组件
    private CharacterController characterController;
    private Animator animator;

    void Start()
    {
        // 获取组件
        characterController = GetComponent<CharacterController>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 更新状态
        UpdateState();

        // 根据当前状态执行对应的操作
        switch (currentState)
        {
            case State.Idle:
                Idle();
                break;
            case State.Walking:
                Walk();
                break;
            case State.Running:
                Run();
                break;
            case State.Jumping:
                Jump();
                break;
        }

        // 应用移动
        characterController.Move(moveDirection * Time.deltaTime);
    }

    // 更新状态
    void UpdateState()
    {
        // 检测是否在地面上
        if (characterController.isGrounded)
        {
            // 根据移动速度切换状态
            if (moveDirection.magnitude > 0)
            {
                currentState = Input.GetKey(KeyCode.LeftShift) ? State.Running : State.Walking;
            }
            else
            {
                currentState = State.Idle;
            }

            // 检测是否跳跃
            if (Input.GetKeyDown(KeyCode.Space))
            {
                currentState = State.Jumping;
            }
        }
        else
        {
            // 处理跳跃过程
            if (currentState != State.Jumping)
            {
                currentState = State.Idle;
            }
        }
    }

    // 空闲状态
    void Idle()
    {
        moveDirection = Vector3.zero;
        animator.SetFloat("Speed", 0f);
    }

    // 行走状态
    void Walk()
    {
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection *= walkSpeed;
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection.y -= gravity * Time.deltaTime;
        animator.SetFloat("Speed", moveDirection.magnitude);
    }

    // 跑步状态
    void Run()
    {
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection *= runSpeed;
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection.y -= gravity * Time.deltaTime;
        animator.SetFloat("Speed", moveDirection.magnitude);
    }

    // 跳跃状态
    void Jump()
    {
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection *= walkSpeed;
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection.y = jumpHeight;
        animator.SetTrigger("Jump");
    }
}

此代码使用了CharacterController组件来处理角色的移动和跳跃,使用Animator组件来处理角色的动画。角色状态根据移动速度和是否在地面上来切换状态。在Walk、Run和Jump方法中,根据输入的方向和速度计算出移动方向,并将其应用到角色身上。在Jump方法中,将移动方向的Y轴设为跳跃高度,并播放跳跃动画

使用C#代码创建一个简单的Unity角色状态FSM有限状态机

原文地址: https://www.cveoy.top/t/topic/haGK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录