对状态机的介绍
说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释,如有错误,请多包涵)
基本的Player状态机组成
基本的Player状态机,我认为由4个部分组成
1.Player脚本,与Player组件绑定,能提供Unity自带的MonoBehavior来实现游戏内的更新与初始化。
2.PlayerState脚本,作为所有的状态,例如游戏角色奔跑状态,静止状态的父脚本,提供一个最基础的框架
3.PlayerStateMachine脚本,作为在一定条件下,转换一个角色的状态的机器。及从奔跑状态转移到静止状态的脚本
4.Player-XX-State脚本,继承了PlayerState脚本,但是实际上表示了真正的具体的动作的脚本。
简单实例说明
源代码
Player.cs
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class Player : MonoBehaviour
{
#region 定义States
public PlayerStateMachine stateMachine { get; private set; }
public PlayerIdleState idleState { get; private set; }
public PlayerMoveState moveState { get; private set; }
#endregion
private void Awake()
{
stateMachine = new PlayerStateMachine();
//通过构造函数,在构造时传递信息
idleState = new PlayerIdleState(this, stateMachine, "Idle");
moveState = new PlayerMoveState(this, stateMachine, "Move");
//this 就是 Player这个类本身
}//Awake初始化所以State,为所有State传入各自独有的参数,及animBool,以判断是否调用此动画(与animatoin配合完成)
private void Start()
{
stateMachine.Initialize(idleState);
}
private void Update()//在mano中update会自动刷新但其他没有mano的不会故,需要在这个up