FSM有限状态机(一)

来源:互联网 发布:如何彻底删除精选淘宝 编辑:程序博客网 时间:2024/05/16 05:15
FSM有限状态机(一)<12/10/10217>
为什么要学习FSM有限状态机:
1.状态机能够分离逻辑代码;
2.提高代码的重用性和可维护性.


什么是FSM有限状态机:
1有限状态机(FSM)简称状态机;

2.FSM的状态个数是有限的.


Switch状态机一般适用于状态比较少的状态机:(Switch放在Update中每帧检测对象状态)

1.使用枚举Enum来定义FSM中的状态;

2.Switch用来判断当前状态来决定逻辑代码的执行.

Switch状态机简单演示:

<1>一个脚本挂Cube身上:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class FSMlearning : MonoBehaviour{    public enum LightState    {        OpenLight,        CloseLight    }    public Light _light;    public LightState currentState = new LightState();    void Start()    {        currentState = LightState.CloseLight;    }    void Update()    {        switch (currentState)        {            case LightState.CloseLight:                print("CloseReady2Open");                OnOpenState();                break;            case LightState.OpenLight:                print("OpenReady2Close");                OnCloseState();                break;            default:                break;        }    }    private void OnOpenState()    {        if (Input.GetMouseButtonDown(0))//因为每帧都会执行switch检测,所以打开或关闭必有一个方法会被每帧都被执行        {            _light.intensity = 1;            currentState = LightState.OpenLight;        }    }    private void OnCloseState()    {        if (Input.GetMouseButtonDown(1))//因为每帧都会执行switch检测,所以打开或关闭必有一个方法会被每帧都被执行        {            _light.intensity = 0;            currentState = LightState.CloseLight;        }    }}
<2>然后实际效果: