基本信息
文件名称:探秘Unity游戏开发中的状态设计模式.docx
文件大小:18.39 KB
总页数:9 页
更新时间:2025-05-31
总字数:约5.73千字
文档摘要

探秘Unity游戏开发中的状态设计模式

目录一、状态模式定义二、实现范例三、使用状态模式(state)实现游戏场景的转换四、使用状态模式的优点

一、状态模式定义

状态模式(state)在GoF中的解释:

让一个对象的行为随着内部状态的改变而改变,而该对象也想换了类一样。

二、实现范例

结构图:

Context(状态拥有者)

///summary

///Describe:状态拥有者

///Note:是一个具有“状态”属性的类,可以制定相关的接口,让外界能够得知状态的改变或通过操作让状态改变。

///比如:游戏角色有潜行,攻击、施法等状态;好友上线,脱机、忙碌等状态;

///GoF使用TCP联网为例,有已连接、等待连接、短线等状态;

////summary

publicclassContext

Statestate=null;

publicvoidRequest(intValue)

state.Handle(Value);

publicvoidSetState(Statestate)

this.state=state;

}

State(状态接口类)

///summary

///Describe:状态接口类

///Note:指定状态的接口,负责规范Context(状态拥有者)在特定状态下要表现的行为。

////summary

publicabstractclassState

protectedContextm_Context=null;

publicState(Contextcontext)

m_Context=context;

publicabstractvoidHandle(intValue);

}

ConcreteState(具体状态类)

/*

Describe:具体状态类

Note:

1、继承自State(状态接口类)

2、实现Context(状态拥有者)在特定状态下该有的行为。

//状态A

publicclassConcreteStateA:State

publicConcreteStateA(Contextcontext):base(context)

publicoverridevoidHandle(intValue)

if(Value10)

m_Context.SetState(newConcreteStateB(m_Context));

//状态A

publicclassConcreteStateB:State

publicConcreteStateB(Contextcontext):base(context)

publicoverridevoidHandle(intValue)

if(Value10)

m_Context.SetState(newConcreteStateC(m_Context));

//状态A

publicclassConcreteStateC:State

publicConcreteStateC(Contextcontext):base(context)

publicoverridevoidHandle(intValue)

if(Value10)

m_Context.SetState(newConcreteStateA(m_Context));

}

三、使用状态模式(state)实现游戏场景的转换

场景结构示意图:

ISceneState场景类接口

///summary

///Describe:场景类接口

///Note:定义场景转换和执行时需要调用的方法。

////summary

publicclassISceneState

//状态名称

privatestringm_StateName=ISceneState;

publicstringStateName

get=m_StateName;

set=m_StateName=value;

//控制者

protectedSceneStateControllerm_Contro