Unity3D有限状态机(FSM)学习笔记【5】FSEvent类

本系列笔记转载自游戏蛮牛专栏作家Jackel的论坛文章,详细介绍了FSM的创建与使用,特与众分享。链接:http://www.manew.com/thread-37136-1-1.html

FSEvent类实现了FiniteStateMachine中三个委托的定义。该类主要用于事件的处理。定义一个枚举用于处理有限状态机的状态,以及使用System的Func类。核心功能是处理FSState的Enter、Push、Pop。代码如下:

using System;

public class FSEvent
{
	protected FiniteStateMachine.EnterState mEnterDelegate;
	protected FiniteStateMachine.PushState	mPushDelegate;
	protected FiniteStateMachine.PopState	mPopDelegate;
	
	protected enum EventType { NONE, ENTER, PUSH, POP };
	protected string mEventName;
	protected FSState mStateOwner;
	protected string mTargetState;
	protected FiniteStateMachine mOwner;
	protected EventType eType;
	public Func<object,object,object,bool> mAction = null;
	
	public FSEvent( string name, string target, FSState state, FiniteStateMachine owner, FiniteStateMachine.EnterState e, FiniteStateMachine.PushState pu, FiniteStateMachine.PopState po )
	{
		mStateOwner 	= state;
		mEventName 		= name;
		mTargetState 	= target;
		mOwner			= owner;
		eType			= EventType.NONE;
		mEnterDelegate	= e;
		mPushDelegate	= pu;
		mPopDelegate	= po;
	}
	
	public FSState Enter( string stateName )
	{
		mTargetState 	= stateName;
		eType			= EventType.ENTER;
		return mStateOwner;
	}
	
	public FSState Push( string stateName )
	{
		mTargetState 	= stateName;
		eType 			= EventType.PUSH;
		return mStateOwner;
	}
	
	public void Pop()
	{
		eType = EventType.POP;	
	}
	
	public void Execute( object o1, object o2, object o3 )
	{
		if( eType == EventType.POP )
		{
			mPopDelegate();	
		}
		else if( eType == EventType.PUSH )
		{
			mPushDelegate( mTargetState, mOwner.CurrentState.StateName );
		}
		else if( eType == EventType.ENTER )
		{
			mEnterDelegate( mTargetState );	
		}
		else if( mAction != null )
		{
			mAction( o1, o2, o3 );	
		}
	}
}
通过调用FSEvent的Execute对Enter、Push、Pop状态的切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值