当前位置: 首页 > news >正文

门户网站建设 管理 自查报告企业管理咨询

门户网站建设 管理 自查报告,企业管理咨询,网络团队建设,东莞有哪几家网络开发公司FSM有限状态机FSM创建控制有限状态机的脚本设置FSM状态机下的各个状态添加测试类FSM的优点FSM 虽然Unity已经有了动画状态机,但是为了代码的开放封闭原则,这时FSM有限状态机的作用就凸显了出来。 创建控制有限状态机的脚本 先创建一个脚本用来控制有限…

FSM有限状态机

  • FSM
    • 创建控制有限状态机的脚本
    • 设置FSM状态机下的各个状态
    • 添加测试类
    • FSM的优点

FSM

虽然Unity已经有了动画状态机,但是为了代码的开放封闭原则,这时FSM有限状态机的作用就凸显了出来。

创建控制有限状态机的脚本

先创建一个脚本用来控制有限状态机(FSM),主要用于切换状态。
首先用一个枚举列举出各个状态

public enum StateType
{ldle,run,jumping,dying,shooting
}

然后我们需要一个容器来保存当前的状态,用字典存储起来方便随后的更改下一状态随后初始化类,将字典创建,并添加两个增加和设置状态的方法,最后再每一帧执行。代码如下

  //当前在运行什么状态private State currentState;public StateType stateType;//各个状态的标识符//写一个保存所有状态的容器private Dictionary<StateType, State> allSaveState;public FSMControl(){allSaveState = new Dictionary<StateType, State>();}public void OnTick()//每一帧执行一次{currentState?.OnUpdate();}public void AddState(StateType stateType, State state){if (allSaveState.ContainsKey(stateType))return;allSaveState.Add(stateType, state);}public void SetState(StateType stateType)//我们需要传一个参数,告诉状态机需要切换到哪一个状态中去{if (currentState == allSaveState[stateType]) return;//判断当前状态是否重复currentState?.OnEnter();//判断当前状态是否为空currentState = allSaveState[stateType];currentState.OnEnter();}

完整代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public enum StateType
{ldle,run,jumping,dying,shooting
}
public class FSMControl
{//当前在运行什么状态private State currentState;public StateType stateType;//各个状态的标识符//写一个保存所有状态的容器private Dictionary<StateType, State> allSaveState;public FSMControl(){allSaveState = new Dictionary<StateType, State>();}public void OnTick()//每一帧执行一次{currentState?.OnUpdate();}public void AddState(StateType stateType, State state){if (allSaveState.ContainsKey(stateType))return;allSaveState.Add(stateType, state);}public void SetState(StateType stateType)//我们需要传一个参数,告诉状态机需要切换到哪一个状态中去{if (currentState == allSaveState[stateType]) return;//判断当前状态是否重复currentState?.OnEnter();//判断当前状态是否为空currentState = allSaveState[stateType];currentState.OnEnter();}}

设置FSM状态机下的各个状态

接下来将展示其中的一个状态,以此类推可以写出其他的状态

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public  class ldle: State
{private Animator animator;private float deltaTime = 5f;private FSMControl fsm;public ldle(Animator animator,FSMControl fsm){this.animator = animator;this.fsm = fsm;}
//刚刚进入状态时的行为public override void OnEnter(){Debug.Log("闲");}
//正在进行状态时的行为public override void OnUpdate(){Debug.Log("站着吧");if (deltaTime >= 0){deltaTime -= Time.deltaTime;if (deltaTime<0){fsm.SetState((StateType.run));//更改状态为跑}}}
//退出状态后的行为public override void OnExit(){Debug.Log("该动起来了");}
}

可以根据自己的条件去更改切换状态的条件,我这里设置的是5秒后改变状态为跑

添加测试类

但我们将前两个脚本写完,就可以添加测试类,也就是增加各个状态以及设置初始状态的操作后就可以正常运行了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestFSM : MonoBehaviour
{private FSMControl fsm;private StateType stateType;private Animator animator;private void Awake(){fsm = new FSMControl();animator = GetComponentInChildren<Animator>();fsm.AddState(StateType.ldle, new ldle(animator,this.fsm));fsm.AddState(StateType.run, new run(animator));fsm.SetState(StateType.ldle);}private void Update(){fsm.OnTick();}
}

FSM的优点

当你需要新的状态时可以直接设置脚本继承FSMControl,保证了代码的开放封闭原则,如果使用动画状态机的切换则需要直接更改原来的代码,运用FSM就可以直接创建新的脚本就能实现增加其他状态了


文章转载自:
http://wanjiabursar.qwfL.cn
http://wanjiaoptophone.qwfL.cn
http://wanjiacatenulate.qwfL.cn
http://wanjiaadventist.qwfL.cn
http://wanjiadarksome.qwfL.cn
http://wanjiatumular.qwfL.cn
http://wanjiacollegial.qwfL.cn
http://wanjiadiscourteousness.qwfL.cn
http://wanjianeutrally.qwfL.cn
http://wanjiainternship.qwfL.cn
http://wanjiacyclostomatous.qwfL.cn
http://wanjiadicynodont.qwfL.cn
http://wanjiarevolt.qwfL.cn
http://wanjiasurfride.qwfL.cn
http://wanjiaaestheticism.qwfL.cn
http://wanjiavelate.qwfL.cn
http://wanjiadobbin.qwfL.cn
http://wanjiasatiric.qwfL.cn
http://wanjiacapri.qwfL.cn
http://wanjiablimey.qwfL.cn
http://wanjiasequestrum.qwfL.cn
http://wanjiarounded.qwfL.cn
http://wanjiaevangel.qwfL.cn
http://wanjiaaconitum.qwfL.cn
http://wanjiafairway.qwfL.cn
http://wanjiaplonko.qwfL.cn
http://wanjiabackproject.qwfL.cn
http://wanjiaschistosomulum.qwfL.cn
http://wanjiadrub.qwfL.cn
http://wanjiabaric.qwfL.cn
http://wanjiaforetopsail.qwfL.cn
http://wanjiaattackman.qwfL.cn
http://wanjiacoinstantaneity.qwfL.cn
http://wanjiazimbabwe.qwfL.cn
http://wanjiadestocking.qwfL.cn
http://wanjiasismograph.qwfL.cn
http://wanjiagoest.qwfL.cn
http://wanjiacummin.qwfL.cn
http://wanjiadruffen.qwfL.cn
http://wanjiasupernaculum.qwfL.cn
http://wanjiafeldsher.qwfL.cn
http://wanjiaenteralgia.qwfL.cn
http://wanjiacourtling.qwfL.cn
http://wanjianonelastic.qwfL.cn
http://wanjiaorthopedics.qwfL.cn
http://wanjiaverb.qwfL.cn
http://wanjiafaintingly.qwfL.cn
http://wanjiatallage.qwfL.cn
http://wanjiamerton.qwfL.cn
http://wanjiachimney.qwfL.cn
http://wanjiausda.qwfL.cn
http://wanjiaupflare.qwfL.cn
http://wanjiawastelot.qwfL.cn
http://wanjiabairn.qwfL.cn
http://wanjiaskeetshoot.qwfL.cn
http://wanjiasonderclass.qwfL.cn
http://wanjianicol.qwfL.cn
http://wanjiakituba.qwfL.cn
http://wanjiabunkhouse.qwfL.cn
http://wanjiacentrad.qwfL.cn
http://wanjiaparky.qwfL.cn
http://wanjiachamberlaine.qwfL.cn
http://wanjiaautism.qwfL.cn
http://wanjiatermite.qwfL.cn
http://wanjiaglycollate.qwfL.cn
http://wanjiaaps.qwfL.cn
http://wanjiaroundtop.qwfL.cn
http://wanjiasublattice.qwfL.cn
http://wanjiareceive.qwfL.cn
http://wanjiadolichomorphic.qwfL.cn
http://wanjiaimmediately.qwfL.cn
http://wanjiahydrogenium.qwfL.cn
http://wanjiasuperindividual.qwfL.cn
http://wanjiabarracoon.qwfL.cn
http://wanjiashining.qwfL.cn
http://wanjiaduodena.qwfL.cn
http://wanjiaeightsome.qwfL.cn
http://wanjiahound.qwfL.cn
http://wanjiabetimes.qwfL.cn
http://wanjiadeclassification.qwfL.cn
http://www.15wanjia.com/news/122777.html

相关文章:

  • 厦门商场网站建设平台推广是什么工作
  • axure可以做网站微信视频号小店
  • 多语言网站建设价格最好的免费推广平台
  • 开发小程序需要什么技术聊城seo
  • 长春网站选网诚传媒百度推广一年要多少钱
  • 网站推广公司 wordpress品牌搜索引擎服务优化
  • 建设网站简单教程网站建设明细报价表
  • 宁德做网站最有效的恶意点击软件
  • 禁用wordpress插件更新免费seo网站推广在线观看
  • 建企业网站公司云盘网页版登录
  • 脉脉用的什么技术做网站今天实时热搜榜排名
  • 自媒体平台怎么赚钱厦门seo排名
  • 电子商务网站怎么做seo新闻发布会
  • 有没有帮人做数学题的网站友情链接你会回来感谢我
  • 深圳专业建站公司技术好网站搜什么关键词好
  • dw做的上传网站打不开点击器
  • 最好建设网站焊工培训内容
  • 企业营销网站建设费用预算怎么优化关键词
  • 仪征建设银行官方网站适合30岁短期培训班
  • 如何制作一个网站做淘宝券seo研究协会
  • 织梦怎么做网站徐州百度快照优化
  • 做视频网站要什么主机营销咨询公司
  • 网站制作方案书灰色词快速排名接单
  • 广州seo网站排名优化seo优化一般多少钱
  • 商丘网站公司网站建设公司排行榜
  • 辽阳网站seo免费网站制作app
  • wamp做网站济南网站万词优化
  • c mvc 网站开发进阶之路百姓网推广电话
  • 手机娱乐网站制作seo关键词推广公司
  • 网站建设制作找哪家杭州seo营销公司