最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose

来源:懂视网 责编:小采 时间:2020-11-27 16:00:12
文档

unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose

unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose:引言: 1,游戏页面与页面的交互 (1)装备背包 (2)装备信息页面 在游戏开发中,2D页面之间,有时候少不了关联性,比如游戏的背包系统,玩家进入背包系统(见上图装备背包以及装备信息页面),点击装备,查看装备信息页面,一般卡牌类游戏这些信
推荐度:
导读unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose:引言: 1,游戏页面与页面的交互 (1)装备背包 (2)装备信息页面 在游戏开发中,2D页面之间,有时候少不了关联性,比如游戏的背包系统,玩家进入背包系统(见上图装备背包以及装备信息页面),点击装备,查看装备信息页面,一般卡牌类游戏这些信

引言:

1,游戏页面与页面的交互

(1)装备背包


(2)装备信息页面





在游戏开发中,2D页面之间,有时候少不了关联性,比如游戏的背包系统,玩家进入背包系统(见上图装备背包以及装备信息页面),点击装备,查看装备信息页面,一般卡牌类游戏这些信息页面都附带增加装备

属性值的功能,比如《放开那三国》里装备的强化功能,玩家花一定量的游戏货币强化了装备后,该装备信息页面里装备属性会随着刷新。但是关闭该装备信息页面后,背包系统

页面里对应的该装备描述也要随着改变,但是背包系统怎么知道装备信息页面里已经改变了原有的属性值呢,那这个就用到了事件的注册监听和派发。也就是说,如果装备完成了

强化,在关闭装备信息页面的时候,要向背包系统页面发一个消息,而背包系统在打开的时候注册了一个消息处理函数,以处理发过来的消息,当接收到信息页面发过来的消息的

时候,在消息处理函数中刷新背包系统页面。这就完成了数据的一致性


2.客户端与服务器的交互

在上面提到了,装备强化功能,这就牵涉到了客户端和服务器的交互,在玩家点击强化按钮的时候,是需要向服务器发送强化请求的,在发送之前,客户端需要注册一个消息处理函数,等待服务器强化成功后,接收服务器发给客户端强化成功与否的消息,客户端接收到消息后,进行强化成功特效播以及页面的刷新。


上面的两种情况,都牵涉到了游戏元素的交互性,其中页面与页面的消息传递,unity自带的消息处理机制可以胜任,但是服务器数据层和UI层的交互,则略显不足,因为数据是数据,UI是UI,UI只是数据的展示,所以在此统一定义了一套消息传递处理机制,用来处理UI层页面之间,客户端也服务器之间的交互



事件机制:

1,每一个事件用唯一的事件ID标识即EventID,每个EventID对应一个消息处理函数,事件ID用一个工具类来单词处理,代码EventID.as内容如下:


public sealed class EVENTID{ // public const int EID_WEAPON_STRONG = 1;//武器强化事件ID public const int EID_WAIT_SERVER_MSG = 2;//等待服务器消息传送事件ID }

2,每一个事件发送,都可能带有一定的消息数据,比如,把服务器传递过来的数据,直接抛给页面,所以需要定义一个,消息数据缓存类CoreEvent.as代码如下


public class CoreEvent {	protected int m_iEventId = 0; //消息处理码,比如m_iEventCode = 0,表示接受服务器消息成功,m_iEventCode = 1,服务器交互失败,当晚间游戏货币不足的时 //候,不能完成装备强化等功能,UI层根据不同的m_iEventCode,做相应的处理----强化成功或者失败的处理	protected int m_iEventCode = 0; protected Object m_EventParam = null;	public CoreEvent(int eventId, int eventCode = 0)	{	m_iEventId = eventId;	m_iEventCode = eventCode;	} public CoreEvent(int eventId, int eventCode, Object eventParam) { m_iEventId = eventId; m_iEventCode = eventCode; m_EventParam = eventParam; }	public int EventID	{	get { return m_iEventId; }	}	public int EventCode	{	get { return m_iEventCode; }	} public Object EventParam { get { return m_EventParam; } set { m_EventParam = value; } }}


3,下面的就是主要的消息注册和派发,消息移除核心代码,文件CoreEventDispatcher.as,代码如下:
public class CoreEventDispatcher { /*消息处理委托,每一个事件id,对应一个或多个消息处理函数*/	public delegate void EventHandler(CoreEvent evt);	private Dictionary mEventHandlerPool = new Dictionary(); /*消息注册函数*/	public void AddEventListener(int eventId, EventHandler handler)	{	EventHandler evtHandler = null;	if(mEventHandlerPool.ContainsKey(eventId))	{	evtHandler = mEventHandlerPool[eventId];	evtHandler += handler;	mEventHandlerPool[eventId] = evtHandler;	}	else mEventHandlerPool.Add(eventId, handler);	evtHandler = null;	} /*消息移除函数*/	public void RemoveEventListener(int eventId, EventHandler handler)	{	EventHandler evtHandler = null;	if(mEventHandlerPool.ContainsKey(eventId))	{	evtHandler = mEventHandlerPool[eventId];	evtHandler -= handler;	mEventHandlerPool[eventId] = evtHandler;	if(evtHandler == null) mEventHandlerPool.Remove(eventId);	}	evtHandler = null;	} /*消息派发函数*/ public void DispatchCoreEvent(CoreEvent evt)	{	if(evt != null && mEventHandlerPool.ContainsKey(evt.EventID))	{	EventHandler evtHandler = mEventHandlerPool[evt.EventID];	if( evtHandler != null)	{	evtHandler(evt);	}	}	}}




至此,整个自定义处理事件已经完成量,为了方便,在此用一个事件管理EventMgr类来统一管理该自定义事件消息机制:代码如下
public class EventMgr { 	private static EventMgr ins = null;	private CoreEventDispatcher m_EventDispatcher = new CoreEventDispatcher(); EventMgr() { } public static EventMgr Ins { get {	if(ins == null)	{ ins = new EventMgr();	} return ins; } }	public void AddEventListener(int eventId, CoreEventDispatcher.EventHandler handler)	{	m_EventDispatcher.AddEventListener(eventId, handler);	}	public void RemoveEventListener(int eventId, CoreEventDispatcher.EventHandler handler)	{	m_EventDispatcher.RemoveEventListener(eventId, handler);	}	public void DispatchCoreEvent(CoreEvent evt)	{	m_EventDispatcher.DispatchCoreEvent(evt);	}	}

文档

unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose

unity游戏开发之服务器与客户端或页面流转之自定义交互事件_html/css_WEB-ITnose:引言: 1,游戏页面与页面的交互 (1)装备背包 (2)装备信息页面 在游戏开发中,2D页面之间,有时候少不了关联性,比如游戏的背包系统,玩家进入背包系统(见上图装备背包以及装备信息页面),点击装备,查看装备信息页面,一般卡牌类游戏这些信
推荐度:
标签: 制作 自定义 网页
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top