FSM有限状态机
1、什么是有限状态机
2、定义有限状态机基类
public class FSMStateBase {
//进入该状态时调用
public virtual void Enter() { }
//每帧调用
public virtual void Update() { }
//退出该状态时调用
public virtual void Exit() { }
}
3、定义一组具体状态
public class IdleState : FSMStateBase {
public override void Enter()
{
}
public override void Update()
{
}
public override void Exit()
{
}
}
public class WalkState : FSMStateBase
{
public override void Enter()
{
}
public override void Update()
{
}
public override void Exit()
{
}
}
public class AttackState : FSMStateBase
{
public override void Enter()
{
}
public override void Update()
{
}
public override void Exit()
{
}
}
4、有限状态机使用示例
public class FSMManager : MonoBehaviour {
public enum State {
Walk,
Idle,
Attack
}
private State curState;//当前状态
private Dictionary<State, FSMStateBase> fsmDict = new Dictionary<State, FSMStateBase>();
private void Start()
{
curState = State.Idle;
InitState();
}
//添加一组状态
public void InitState()
{
fsmDict.Add(State.Walk, new WalkState());
fsmDict.Add(State.Idle, new IdleState());
fsmDict.Add(State.Attack, new AttackState());
}
//转移状态
public void ChangeState(State state)
{
fsmDict[curState].Exit();
curState = state;
fsmDict[curState].Enter();
}
private void Update()
{
//模拟转换条件
if (Input.GetKeyDown(KeyCode.A))
{
ChangeState(State.Walk);
}
else if (Input.GetKeyDown(KeyCode.B))
{
ChangeState(State.Attack);
}
fsmDict[curState].Update();
}
}
5、最后
FSM有限状态机的更多相关文章
- Unity中FSM有限状态机
什么是FSM FSM 即有限状态机,它是一个状态管理系统,表示一个对象的几种状态在指定条件下转移行为,即随着条件的不断改变内部状态不断地切换. FSM用处或者使用背景 通常使用FSM去实现一些简单的A ...
- Unity——FSM有限状态机
FSM有限状态机 一.设计思路 1.共同的状态父类,提供可重写的进入,保持,退出该状态的生命周期方法: 2.状态机,管理所有状态(增删查改),状态机运行方法(Run): 3.在角色控制器中,实例化状态 ...
- Unity FSM 有限状态机
翻译了一下unity wiki上对于有限状态机的案例,等有空时在详细写一下.在场景中添加两个游戏物体,一个为玩家并修改其Tag为Player,另一个为NPC为其添加NPCControl脚本,并为其将玩 ...
- FSM有限状态机 ---C#、Unity
抽象类State public interface State//定义状态接口 { void Init();//初始化 int GetCurrentStateId();//返回当前状态Id void ...
- Lua中使用状态机FSM简单例子
FSM 有限状态机: 一个有限状态机是一个设备,或者是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操作,使得一个状态变换到另一个状态,或者是使一个输入或者一种行为的发生.一个有 ...
- 新FSM的一些思路
好久之前写过一篇关于状态机的小例子,可以看这里http://www.cnblogs.com/mawanli/p/5966080.html,这篇博客首先感谢需要感谢当时看到凉鞋的笔记博客, 凉鞋的博客地 ...
- U3D-FSM有限状态机的简单设计
http://coder.beitown.com/archives/592 在之前的文章里介绍了一个基础U3D状态机框架(Unity3D游戏开发之状态流框架)即大Switch的枚举状态控制.这种方法虽 ...
- Ejabberd源码解析前奏--配置
一.基本配置 配置文件将在你第一次启动ejabberd时加载,从该文件中获得的内容将被解析并存储到内部的ejabberd数据库中,以后的配置将从数据库加载,并且任何配置文件里的命令都会被添加到 ...
- keepalive学习
keepalive学习之软件设计 软件架构如下图所示: Keepalived 完全使用标准的ANSI/ISO C写出. 该软件主要围绕一个中央I/O复用分发器而设计,这个I/O复用分发器提供网络实时功 ...
随机推荐
- Elasticsearch 相关 api 操作
A. es 操作 1. 检查 es 集群健康状态 2. 获取集群中的节点列表 3. 创建索引 4. 获取索引 5. 索引文档 6. 查询文档 7. 删除索引 8. 更新文档 9. 删除文档 10. 批 ...
- 启用Nginx目录浏览功能的方法
location / { root /data/www/file //指定实际目录绝对路径: autoindex on; ...
- maven仓库地址配置
# 背景 maven中央存库在国外,访问缓慢,一般国内镜像,这里推荐阿里云的 http://maven.aliyun.com/nexus/content/groups/public 我之前采用的方式是 ...
- 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架
一.系列简述 本篇起,将通过一系列文章,去描述如何构建一个应用开发框架,并以作者开发的框架为例,逐个点展开分析,如何从零开始,构建自己的开发框架. 本系列文章的目的,是带领有一编程经验的人,通过动手, ...
- 创建自己的Code Snippet(代码模板)
一.名词解释 Code Snippet,代码模板,是一种快速生成代码的快捷方式,使用它可以有效地提高编程效率. 编程中可以使用Visual Studio提供的预先设置好的Code Snippet,也可 ...
- POI(java 操作excel,word等)编程
一.下载所需jar包 下载地址:http://poi.apache.org/download.html http://download.csdn.net/detail/likai22/534250 二 ...
- Python 将一个已知的 utc时间字符串 转换为东八区时间
先获取一个utc格式的时间 utc_time = datetime.datetime.utcnow() print(utc_time) 输出 2018-06-24T08:59:39Z 这里我们假设目前 ...
- hdoj1575 Tr A(矩阵快速幂)
简单的矩阵快速幂.最后求矩阵的秩. #include<iostream> #include<cstring> using namespace std; ; int n,k; s ...
- docker容器的基本操作
docker容器是独立运行的一个或一组应用,以及它们的运行态环境.下面具体介绍如何管理一个容器,包括容器的创建,启动和停止等. 启动容器 基于镜像新建一个容器并启动 将终止状态的容器重新启动 新建并启 ...
- 微信小程序redirect 到tab不刷新
// 更新2018/11/20:现在小程序的页面栈长度为10 更正 2018/11/20: 经过一段时间的实践,我发现以前方法存在很多问题,比如 getCurrentPages 方法并不在官方的 AP ...