FSM有限状态机(一)
2017-10-12 17:01
363 查看
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
4000
= LightState.CloseLight;
}
}
}
<2>然后实际效果:
为什么要学习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
4000
= LightState.CloseLight;
}
}
}
<2>然后实际效果:
相关文章推荐
- [python]有限状态机(FSM)简单实现
- 有限状态机(FSM)的设计与实现(一)
- FSM有限状态机运用分析系列一 —— 文本处理一
- 有限状态机(FSM)的设计与实现(1)
- 有限状态机—— FSM(finite-state machine)
- erlang gen_fsm(有限状态机)
- cocos2d-x 游戏开发之有限状态机(FSM) (二)
- Unity3D架构系列之- FSM有限状态机设计(二)
- Unity3D有限状态机(FSM)学习笔记【4】FiniteStateMachine类
- 有限状态机(FSM)
- U3D架构系列之- FSM有限状态机设计五
- 2017-12-11战斗有限状态机FSM -第二天
- React.js - 有限状态机 Finite-state machine, FSM
- 有限状态机FSM详解及其实现
- 有限状态机(FSM)的设计与实现(二)
- U3D-FSM有限状态机的简单设计
- cocos2d-x 游戏开发之有限状态机(FSM) (一)
- Unity3D架构系列之- FSM有限状态机设计(三)
- Unity3D有限状态机(FSM)学习笔记【5】FSEvent类