手机版
网站地图
美文美图
最新动态
你好,欢迎访问
好美文阅读网
个性皮肤
搜索
网站首页
美文
文章
散文
日记
诗歌
小说
故事
句子
作文
签名
祝福语
情书
范文
读后感
文学百科
美文摘抄
节日文章
名家散文
网名大全
座右铭
口号大全
面试技巧
说说大全
阅读答案
诗词默写
流言蜚语
节日祝福
好句子
经典台词
谚语大全
亲情故事
友情故事
表白情书
工作报告
活动总结
心得体会
专题汇总
美文网首页
Unity3D游戏开发
状态机用法
状态机用法
作者:
我家菇凉
| 来源:发表于
2019-08-14 21:26 被阅读0次
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//状态抽象类 -- 由各个状态继承该状态类,衍生出各种状态
public abstract class StateBase {
//当前状态所对应的的ID号 --
//比如继承自该状态衍生出来的IDLE状态,ID为2,则在判断是否为该状态时提供依据
abstract public int ID { get; }
//抽象函数,由继承自该类的其他状态重写
//在第一次进入的时候运行该函数,该函数在改状态第一次运行的时候,只运行一次
abstract public void Enter(StateEventData stateData);
//当状态一直停留在该状态的时候,每帧都会运行一次该函数
abstract public void Execute(StateEventData stateData);
//当该状态运行完毕,离开之前,运行一次该函数
abstract public void Exit(StateEventData stateData);
}
//*****************************************************************************************//
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 单例
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingleTon<T> where T :class ,new()
{
private static T instance;
public static T GetT
{
get
{
if (instance == null)
{
instance = new T();
}
return instance;
}
}
}
//**********************
/// <summary>
/// 单例
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingleTon<T> where T :class ,new()
{
private static T instance;
public static T GetT
{
get
{
if (instance == null)
{
instance = new T();
}
return instance;
}
}
}
//*****************************************************************************************//
/// <summary>
/// 状态执行机
/// </summary>
public class FsmCore
{
//当前状态
public StateBase CurrentState = null;
///上一个状态
public StateBase PrevState = null;
//携带的数据体/内容
public StateEventData Data = null;
//设置状态机题主运行的标志位
//是否让该状态机停止
public bool IsStop = false;
public StateBase GetStateByPlayerBattle(PlayerBattle plBattleIndex)
{
switch (plBattleIndex)
{///让每个状态对应自己的状态类
case PlayerBattle.Idle:
return new Stationary_state();
case PlayerBattle.Wath:
return new Random_movement_state();
case PlayerBattle.Run:
return new Follow_state();
case PlayerBattle.Attack:
return new Attack_state();
case PlayerBattle.Death:
return new Death_state();
default:
return new Stationary_state();
}
}
//改变当前状态机运行的状态
public void ChangeState(
//当前要变成的具体状态
StateBase state,
//当前状态所携带的数据
StateEventData paramData,
//上一个状态推出时应该携带的数据
StateEventData prevData)
{
if (paramData == null && state.ID == CurrentState.ID)
{//如果数据为空 如果当前状态等于当于当前状态
return;
}
if (PrevState != null)
{
PrevState.Exit(paramData);//传进来的上一个数据给上一个数据
}
PrevState = CurrentState;//当前状态赋值给上一个状态
CurrentState = state;//当前状态变成当前状态
Data = paramData;//传进来的数据附给现在的数据
CurrentState.Enter(Data);
}
public void UpdateState()
{
if (CurrentState == null) { return; }
else
{
CurrentState.Execute(Data);
}
}
public void Start(StateBase state, StateEventData paramData, StateEventData prevData)
{
ChangeState(state, paramData, prevData);
}
}
public enum PlayerBattle
{
Idle,
Wath,
Run,
Attack,
Death
}
相关文章
网友评论
Unity3D游戏开发
本文标题:
状态机用法
本文链接:
https://www.haomeiwen.com/subject/awqnjctx.html
延伸阅读
那年盛夏诗歌
环境监察队工作总结范文
优秀教师学习心得范文
华胥引的读后感300字
《Its red》教学反思范文
农资购销的合同范本
竞选中队委优秀演讲稿
辞金蹈海的成语解释
《世纪宝鼎》公开课教案设计
因为爱你,所以牵挂
今生今世红尘醉——美到
一个90后的内心独白
致已逝去的高中年华
深度阅读
您也可以注册成为美文阅读网的作者,发表您的原创作品、分享您的心情!
情人节
母亲节
重阳节
清明节
端午节
植树节
元宵节
妇女节
愚人节
圣诞节
父亲节
教师节
儿童节
劳动节
青年节
建军节
万圣节
平安夜
光棍节
中秋节
国庆节
感恩节
腊八节
更多话题
栏目导航
Unity3D游戏开发
摄影
故事
互联网
读书
旅行
热点阅读
8.14感恩
十字路口
我和鲜果圈的相遇…
小女子有才
preg_replace_callback 替换img src实
cookie获取不到的原因
设计样式详解-信息流
女儿第一天学舞
八七电视剧的误导
Mila米拉塔罗占卜占星,十二星座,好运到!快来看看也有你哦
Unity3D游戏开发
有限状态机概念
状态机用法
游戏后期优化
网络框架
Unity 3D 游戏优化
代码优化
unity-遮挡剔除OcclusionCulling
行为树(Behavior Tree)
行为树(behavior tree)
DoTween
网友评论