An open API service indexing awesome lists of open source software.

https://github.com/shaun-fong/sfsm

A Simple Finite State Machine for unity.
https://github.com/shaun-fong/sfsm

finite-state-machine fsm unity unity3d

Last synced: 2 months ago
JSON representation

A Simple Finite State Machine for unity.

Awesome Lists containing this project

README

        

# SFSM

一个非常简单易用的有限状态机

![image](https://github.com/user-attachments/assets/ac59c156-5efe-45b4-9272-d79d474def11)

# 安装

![image](https://github.com/user-attachments/assets/5bbf5eb7-2d22-4ec4-9bff-5ff3d74ab064)

or

自行解压至Packages目录

# 使用

示例可通过PackageManager导入

![image](https://github.com/user-attachments/assets/e661c2eb-db1f-432e-95e4-997d40609db6)

## 状态

使用该状态机首先需要先定义状态

如:

```
[StatePath("SFSMTest/State1")]
public class State1 : SFSMStateBase
{

public override void OnEnter(object userData)
{
//进入调用
}

public override void OnUpdate(float deltaTime, float fixedDeltaTime)
{
//轮询调用
}

public override void OnExit()
{
//离开调用
}
}
```

状态可通过 `FSM.ChangeState<类型>();` 进行切换

`StatePath`是用来定义在下拉列表中的路径的,有效的归类现有的状态。

## 初始状态

如果是在可序列化类中声明可直接通过下拉菜单选择初始状态

比如示例中使用了状态机数组

![image](https://github.com/user-attachments/assets/53691297-0af9-4893-ab05-4b9c9738be83)

这意味着你可以任意地方使用状态机,甚至状态机嵌套也是可以做到的。

手动设置状态机的初始状态,如`FSM.SetDefaultState<类型>();`

## 初始化

之后便可在任意位置声明状态机,如`public SFSM FSM = new SFSM();`

使用前进行初始化 `FSM.Initialize();`

除此之外还需要进行状态机的轮询调用 `FSM.Update(Time.deltaTime, Time.fixedDeltaTime);`