0%

有限状态机的Unity_C#实现

今天读了 Game Programming PatternsState 章节.深感改模式对我目前代码优化的帮助巨大.于是决定写个demo来实现一下

文章中是用C++作为描述语言的,而对于使用 Unity 引擎, C# 语言的我来说,需要做一些适应性的修改.

这个demo主要涉及的是玩家控制

FSM(有限状态机)

为什么要使用有限状态机

在回答这个问题之前,不妨想一想你自己之前是如何实现玩家控制的,就以跳跃为例

或许你会这样写

1
2
3
4
5
6
7
public void Jump()
{
if(Input.GetKeyDown(KeyCode.Space))
{
//跳跃
}
}

显然这个函数有个大问题,只要按下空格键,你就会一直往上跳,最后你的角色就飞了起来,这当然不是你想要的.最简单的修补办法是给他添加上一个isJumping或者isOnGround的布尔判断

再然后,你又想给你的角色添加一个冲刺的功能,如果你什么也不做,神奇的玩家或许会对冲刺中按下跳跃键后发生的事情感到啼笑皆非,这时候你又需要添加一个isDashing的布尔判断.然而实际开发中的需求可不会像上面的例子一样简单,你也不想你的代码里全是各种if else吧.

欢迎关注我的其它发布渠道