unity状态机实现

刚看了浅墨大神的文章让我对状态机有了进一步的理解

具体实现见装载的状态机文章

首先得有个总状态HeroineBaseState接口,其里面的方法主要是与行为相关的方法,让继承此接口的类来实现的

具体的状态写成其分支4个类,他们是需要去具体实现接口方法,并且会拿到Heroine的对象

Heroine拿到HeroineBaseState 对象,可以让其使用SetHeroineState方法来转换各种状态,这种转换方法是通过new其不同分支来进行转换的,其方法具体的调用是通过四个分支里拿到的Heroine对象调用SetHeroineState方法来实现的

这种做法实现了在一种状态里面就只能做该状态所规定做的一些事情,无法做不该做的事情

比如说一个人在地上,在地上你可以跳跃和下蹲,如果你跳跃了,那么进入跳跃状态这个类里面,但是在跳跃这个类里面只定义了下斩的方法,那么你在跳跃状态时只能做下斩操作,做不了其他操作

这就是该状态机实现的思路

工程下载地址 :http://files.cnblogs.com/files/sanyejun/FSM.zip

时间: 2024-11-05 13:25:08

unity状态机实现的相关文章

简单实用的 Unity 状态机设计

状态机是非常常用的游戏编程模式,状态机的设计也有简单或复杂的区别. 我脑海里的状态机 状态机是什么样的?这是一个非常典型的状态机设计(随手写的): // 状态类 class State { // 保存的状态机引用 StateMachine _machine; // 构造状态,保存状态机引用 public State(StateMachine machine) { _machine = machine; } // 进入状态 public virtual void OnEnter() { } //

UNITY 状态机 + SVN + 码云 下篇

上篇说到自己写的一个FSM状态机,这篇写怎么把代码和码云联系在一起! 首先,我们应该知道为什么使用码云? 码云是开源中国社区2013年推出的基于 Git 的完全免费的代码托管服务,这个服务是基于 Gitlab 开源软件所开发的,我们在 Gitlab 的基础上做了大量的改进和定制开发,目前已经成为国内最大的代码托管系统,致力于为国内开发者提供优质稳定的托管服务. 码云除了提供最基础的 Git 代码托管之外,还提供代码在线查看.历史版本查看.Fork.Pull Request.打包下载任意版本.Is

unity 状态机 + svn + 码云 上篇

最近一直在实习,忙于公司一个c++ 项目 ,一直想写博客来着,没时间写今天熬夜打算先献上自己前几天自己封装的一个fsm状态机 话不多说,直接上正题,这篇博客主要是在学校的时候状态机一直使用的是player maker插件或者是自己使用if else (switch  case)来实现自己的状态机 所谓的状态机不过是一种数据结构,可以遵循一定的顺序的状态循环而已 (PS:自己能力有限,有不对的地方欢迎大家指出) public delegate void FsmEvent(); public cla

Unity状态机的实现,以《塔防》为例

什么是有限状态机? 通俗点讲,有限状态机是:将对象的状态(攻击.闲置.晕眩)的实现代码,提取出来,封装成状态.由状态机负责在各个状态之间调度. 对象持有状态管理类(状态机)的引用,与具体的状态解耦. OK,那接下来开始设计一个塔的状态,我们有一个父类FiniteState,状态机只和父类交互,屏蔽了状态具体实现 塔与状态是一对一的关系,也就是说,在塔创建的时候,全部状态已经生成好了(GenerateStateList方法), 我们根据状态的枚举类进行切换. using System.Collec

Unity动画状态机学习

在Unity4.x之前,动画位移,上楼梯下楼梯等动作都需要自己写模块实现,包括人物转向等等.Unity状态机的出现解决了这个问题.它有一个Apply Root Motion的选项,勾选之后即可应用根骨骼的位移. Unity的状态机大致有如下知识点: 1.Hellow world 2.如何驱动 有时间继续写... Default State 默认状态,在视图里呈现为橙色 Any State 不管处于什么状态,只要条件满足,必然触发. 一般用于死亡的判断

游戏开发面试题

面试第一次知识总结: 一.Unity基本操作 1.unity提供哪几种光源? 点光源.平行光.聚光灯.区域光. 2.物体发生碰撞的必要条件什么? 两个物体必须有碰撞体Collider组件,一个物体上必须有刚体组件Rigidbody. 3.碰撞体和触发器区别与联系 触发器是碰撞体上的一个属性,如果不勾选触发器,两个物体是不可以别击穿:有了触发器后是可以被击穿的. 检测碰撞体方法:OnCollisionEnter/Stay/Exit() 检测触发器方法:OnTriggerEnter/Stay/Exi

Unity Animator动画状态机 深入理解(一)

接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我这就不是Animator么. 对啊,Animator其实是由Animation组成的.比如在Animator没有出现的时候有些公司写的动画状态机其实就是代码版的Animator. Animator其实就是把Animation统一管理和逻辑状态管理的组件,而Animation就是每一个动画. 动画状态

Unity框架之状态机

1.vs 注解快捷键? 2.接口 方法.属性.字段? 3.生命周期(awake .enable.start.update.fixedupdate.lateupdate.ongui)? 4.[HideInInspector] 第一步:IState 初步定义 1 using UnityEngine; 2 using System.Collections; 3 4 public interface IState{ 5 //获取状态机状态 6 uint GetStateID(); 7 8 //void

Unity c# 状态机的简单入门

状态机模式在unity中作用是非常大的,可以实现角色的移动和场景的跳转,包括一些动画的播放,在很多unity框架中也是很常见的,发散思维广阔,下面是简单的状态机的实现,有注释 using System.Collections;using System.Collections.Generic;using UnityEngine;public enum StateType{ Idle, Die, Move,} public abstract class StateObject{ protected