基于unity的回合制网游战斗系统的研究报告与实现.docx

上传人:b****2 文档编号:2209670 上传时间:2022-10-27 格式:DOCX 页数:38 大小:3.27MB
下载 相关 举报
基于unity的回合制网游战斗系统的研究报告与实现.docx_第1页
第1页 / 共38页
基于unity的回合制网游战斗系统的研究报告与实现.docx_第2页
第2页 / 共38页
基于unity的回合制网游战斗系统的研究报告与实现.docx_第3页
第3页 / 共38页
基于unity的回合制网游战斗系统的研究报告与实现.docx_第4页
第4页 / 共38页
基于unity的回合制网游战斗系统的研究报告与实现.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

基于unity的回合制网游战斗系统的研究报告与实现.docx

《基于unity的回合制网游战斗系统的研究报告与实现.docx》由会员分享,可在线阅读,更多相关《基于unity的回合制网游战斗系统的研究报告与实现.docx(38页珍藏版)》请在冰豆网上搜索。

基于unity的回合制网游战斗系统的研究报告与实现.docx

基于unity的回合制网游战斗系统的研究报告与实现

摘要本文主要阐述网络回合制战斗系统的实现,包括回合制战斗系统的整个流程(战斗开始、玩家下达战斗指令、战斗动画、战斗结束),和网络回合制战斗系统常见的主要功能(攻击、使用技能、使用物品)的实现,并且在游戏项目《PKer》中进行实践和测试。

在开发环境方面,服务器采用国IOCP高性能开源框架“HP-Socket”(Windows平台),并且连接到Mysql数据库,客户端采用近年比较火热的强大跨平台引擎Unity3D(2D,C#)并且使用Sqlite作为嵌入式数据库。

除此以外,本文还对战斗系统实现所涉及到的相关技术如Unity引擎的协同程序、单例设计模式和分包算法进行简要介绍。

关键词回合制战斗系统,网络游戏,Unity3D,协同程序,游戏编程

ABSTRACTThisarticlemainlyexpoundstheimplementationofnetworkturn-basedcombatsystem,includingthewholeprocessofturn-basedcombatsystem(battlebegins,theplayersfightinginstructions,combatanimation,battleends),andthemainfunctionofcommon(attack,usingskills,usingitems)implementation,andinthegame"PKer"inpracticeandtestoftheproject.Intheaspectofdevelopmentenvironment,C++IOCPserverwithWindowsplatformandconnecttotheMysqldatabase,theclientusesUnity3D(2D,C#)andusesSqliteasanembeddeddatabase.Inadditiontothis,thisarticlealsoinvolvedtocombatsystemrelatedtechnologiessuchastheUnityenginecoroutines,singletondesignpatternandthesubcontractalgorithmarebrieflyintroduced.

KEYWORDSTurn-basedcombatsystem,onlinegame,Unity3D,Coroutine,Singletondesignpattern

前言

随着网络的普及与迅速发展,网络游戏已经成为电子游戏中的主流。

网络游戏的战斗系统主要可分为即时制和回合制两种模式。

即时制战斗系统侧重于刺激、反应、操作性,战斗节奏快。

而回合制战斗系统侧重于休闲、战略、配合,战斗节奏慢。

早期的电子游戏由于设备硬件条件有限,大多采用回合制战斗系统。

随着科技的发展和设备硬件的提升,如今回合制游戏的数量比例有所下降,但回合制游戏在国游戏市场依旧占据着想当大的份额,仍有大量玩家热衷这种战斗模式,几款众所周知的国产单机游戏如《轩辕剑》系列、《仙剑奇侠传》系列、《古剑奇谭》系列以及国在线人数最多的MMORPG《梦幻西游》均是采用回合制战斗系统的游戏。

本人也是热衷于回合制战斗系统的玩家之一,可纵观近年来国回合制游戏的发展,国回合制游戏一直止步不前,《轩辕剑》系列、《仙剑奇侠传》系列、《古剑奇谭》销量下降,MMORPG《梦幻西游》也有降温迹象,甚至国大多回合制网游只是复制在《梦幻西游》或“换皮”,缺少创新和突破。

本人希望在研究和实现回合制战斗系统的基础上,能够找到突破和创新点。

同时在游戏编程方面,即时制逻辑较为简单明了清晰,而回合制则比较繁琐复杂,而且在Unity引擎上实现回合制战斗系统的相关资料较少。

综上原因,本人撰写本文,希望能对志同道合者有所启发,同时也寻求学术交流。

项目将在2017年6月开源,开源地址https:

//pan.baidu./share/home?

uk=1017424337

By江正觊

2016.6

第1章绪论

1.1回合制游戏简介

1.1.1广义上的回合制游戏

凡“我方与敌方在单个回合轮流行动,只有轮到我方(自己)的回合或者是新的回合开始时,才可进行行动”的游戏,都可归类为广义上的回合制游戏,而且绝大大多数情况下,单个回合敌我双方行动次数相同。

从广义上来说,回合制游戏围非常广,棋牌、卡牌、战棋策略、回合制战斗模式都能归为此类。

1.1.2狭义上的回合制游戏

狭义上的回合制游戏,是从广义回合制游戏中细分,特指回合制战斗模式的游戏,与即时制战斗模式相对。

1.2回合制战斗系统简介

在回合制战斗模式下,每个回合开始时,敌我双方各自为双方战斗角色下达战斗指令,待双方所有角色下达完战斗指令或超过时限(回合制网络游戏均会设置下达战斗指令的时间限制)后双方所有角色开始行动,一般根据角色自身“速度(敏捷)”的属性数值轮流行动,期间若果某一方符合战败条件(某方全体阵亡或全体人物阵亡)则战斗结束,如所有角色行动完后敌我双方均没符合战败条件,则进入下回合,如此循环。

1.3实践项目《PKer》简介

《PKer》是一个以回合制竞技和社交为卖点的PC和移动端跨平台网络游戏,是游戏与社交APP的融合体。

游戏主要玩法是玩家与玩家之间的回合制战斗PK。

通过移动设备GPS定位功能(PC端无法使用),能够快速搜索在你身边的游戏房间和玩家,与其开展战斗。

游戏提供一定数量的基础装备和宠物让玩家任意领取,故玩家可以随时更换装备和宠物,新玩家也能以此为基础投入到战斗中。

更强的装备和稀有的宠物通过合成、付费租用等渠道获得。

角色的属性和职业也可以随时更改,以便随时改变战术和改变在队伍里中的定位。

第2章开发环境和部分涉及技术简介

2.1开发环境简介

本文实践项目的服务器采用国IOCP开源框架“HP-Socket”,并且连接到Mysql数据库,客户端采用近年比较火热的强大跨平台引擎Unity3D(2D,C#)并且使用Sqlite作为嵌入式数据库。

2.2Unity协同程序

2.2.1Unity协同程序简介

协同程序(Coroutine),通常简称“协程”,顾名思义,是一段协助的程序(方法),很多人以为它是另开一个线程执行一段程序,其不然,实际上它是从主线程每帧或每隔一定时间调用的程序。

当协程创建后,主线程中创建协程的语句后面的代码块会“挂起”,直到协同程序结束后,才会继续执行创建协程语句后面的代码。

当协程中的代码执行完或者使用yieldbreak语句时,协程才会结束,并且返回到主线程中的创建该协程的语句的位置,继续执行后面的代码。

协程中使用yieldreturn帧数/newWaitForSeconds(秒数)语句可以实现隔多少帧或多少秒后再执行后续代码。

另外协程可以嵌套协程,利用协程的特点和嵌套,可以实现很多复杂和有趣的功能,十分强大。

2.2.2Unity协同程序的运用

协程广泛地运用在计时、延迟、控制物体运动、等待物体状态的改变、有顺序地让物体执行一系列动作等方面上。

根据协程的特点,协程中可以使用“循环+条件判断+yieldreturn帧数/newWaitForSeconds(秒数)”实现每隔多少帧或者多少秒后再次执行条件判断语句,当判断语句满足跳出循环,从而让协程代码执行完结束,回到主线程继续执行后续代码,利用此功能,可以很方便地实现某物体达到某状态后再执行程序。

示例代码:

主线程代码

StartCoroutine(actor.Move(getAttackPosition(nTargetIndex)));

Inti=0;

协同程序Move方法

publicIEnumeratorMove(Vector3destPos)

{

while(transform.localPosition!

=destPos)

{

transform.localPosition=Vector3.MoveTowards(transform.localPosition,destPos,GlobalData.BATTLE_SPRITE_MOVE_SPEED*Time.deltaTime);

yieldreturn0;

}

}

上述代码中,主线程StartCoroutine方法创建一个协程Move,待协程Move执行完成返回后,主线程才执行i=0语句。

可是协程Move的返回条件有点特殊,yieldreturn0语句表示协程运行到此处挂起,等下一帧再从本语句继续运行,由于yieldreturn0在while循环,所以不管yieldreturn0多少次,都依然在while循环,而且while循环每一帧循环一次。

直到while不满足循环条件(即transform.localPosition==destPos),则协程能够完成使命执行完成并返回。

可以猜测到,所控制的物体可能通过Update方法或者其他方法每帧在移动,直到移动到目标地点,才执行主线程后面的代码。

2.3单例设计模式

2.3.1单例设计模式

单例设计模式是常见和简单的一种软件设计模式,单例模式下的类能确保在整个工程项目中只允许存在最多一个实例对象。

单例模式下的类通常不能直接通过构造函数new出一个实例,而且构造函数通常会设置成私有,外部不可访问。

只有通过类的一个静态方法可以创建或获取有且只有唯一一个的对象实例。

2.3.2单例设计模式的运用

单例设计模式下的类往往具有通用性或全局性,用于保存全局数据,需要访问其变量的外部类只需要通过单例类的静态方法即可获得其唯一的实例,从而访问其部变量。

示例代码:

publicclassClientSocket//单例类ClientSocket

{

privatestaticClientSocket_client_socket;//保存本类的唯一实例

privatestaticMessageManager_msg_mgr;

privatestaticSocket_socket;

privatestring_web="";

privateIPAddress_ip;

privateint_port=8000;

privatebyte[]_buf=newbyte[1024];

privateCircularBuffer_circularBuf=newCircularBuffer(4096);

privateClientSocket(){

}

publicstaticClientSocketgetInstance()

{

if(_client_socket==null)//若实例不存在则创建,实例已存在则直接返回

{

_client_socket=newClientSocket();

_msg_mgr=MessageManager.getInstance();

}

return_client_socket;

}

……

}

2.3.3单例设计模式在Unity中的运用

在Unity中使用单例设计模式,有时会有额外的意义。

在Unity中,通常一个类会作为一个组件挂载到一个物体上,可是如果进行了场景切换,当前场景所有物体以及物体所挂载的所有组件都会被销毁,这

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1