基于Unity的冒险游戏设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Unity的冒险游戏设计与实现计算机游戏历经几十年的发展,由最初使用FOR⁃TRAN程序编写躲避遮挡物场景游戏开始,逐渐衍生出多人对战、扮演角色(RPG)、卡牌休闲、放置养成、横板闯关等各式各样的游戏;从平面2D游戏到立体生动的3D游戏,在玩法创意、游戏画面设计以及开发技术方面的发展水平都令人触目兴叹。

其中,多人冒险网络游戏是通过互联网将大量玩家即时联系起来,在虚拟世界中进行冒险。

它不仅能带给用户身临其境的游戏体验,也更注重游戏的互动性与趣味性。

1 Unity与Photon引擎结合开发冒险游戏
PUN(Photon Unity Networking)是一个Unity多人游戏插件包。

它提供了身份验证选项,并能够快速、可靠地通过Photon后端实现游戏内部通信。

PUN可以输出几乎所有Unity支持的平台,它提供了两个C#接口IPunCallbacks和IPunObservable,可以在类中实现。

本游戏软件采用Unity进行开发,分为客户端和服务器端。

客户端包含接口、数据、界面、资源、网络、房间和战斗管理系统等;服务器端处理游戏运行时产生的数据,包括玩家数据、房间数据和战场数据等,同时对网络通信进行管理。

游戏支持个人计算机(PC)运行终端,并且具有良好的自适应性[3]。

2 游戏设计与实现
2.1 游戏总体设计
针对冒险游戏的特点,采用Unity客户端与Photon服务器相结合的架构进行设计,通过Unity客户端之间的信息传递,实现同时多人在线游戏。

游戏整体框架设计如图1所示,游戏流程设计如图2所示。

在游戏功能的总体设计中,分
别设计客户端功能与服务器端功能,主要的功能模块可划分为四大模块,即战斗模块、界面模块、场景模块和网络模块。

游戏模块设计如图3所示。

对于多人在线的网络同步,采用玩家输入请求,然后通过客户端向服务器提交请求的方式来实现。

图1 游戏框架
图2 游戏流程
图3 游戏模块设计
2.2 游戏详细设计
基于游戏的总体设计,进行游戏各部分的详细设计,主要包括玩家模型、游戏场景、游戏天气、游戏界面、游戏管理器和关卡、玩家生命值、网络同步等功能。

2.2.1 玩家模型设计。

在Blender软件中建造好机器人模型后导入Unity,使其成为一个无须连接PUN就可以正常工作的预制体。

2.2.2 游戏场景设计。

该游戏拥有4个场景,根据玩家人数的不同分别加载不同的游戏竞技场景,不仅节省网络资源和硬件资源,而且满足不同玩家人数的场景设置需要。

当只有一名玩家时,进入等待大厅的游戏场景。

超过两人时,玩家进入多人竞技场场景,该场景设计仿照河南工业大学校园的一角,运用草地、云朵、小山、树木、小桥等多组模型搭建而成。

当玩家人数为三人或四人时,场景模型数量和场景架构也随之变化。

2.2.3 游戏天气设计。

利用Unity中的Particle Sys⁃tem组件模拟了雪天等特效。

2.2.4 游戏界面设计。

利用Canvas和Button等组件创建界面和按钮,并使用PlayerPrefs插件记住玩家名字,创建Player UI界面动态展示玩家生命值状态。

2.2.5 游戏管理器和关卡设计。

设计LoadArena()方法,将基于所在房间的PlayerCount属性加载至适当的房间。

利用GameManager脚本监听连接及断开连接的玩家情况。

2.2.6 游戏玩家设计。

获取Animator组件,编写玩家对于角色的控制,使玩家能够使用输入设备来操作该角色,完成行走、跑、跳跃、开火等多种动作互动。

2.2.7 玩家生命值设计。

当玩家被光束撞击时,整个光束撞击过程要实时显示生命值的减少过程。

另外,当对战时玩家的生命值降为0,系统将判定其游戏失败并退出房间。

进行代码设计时,先在GameManager脚本中创建一个离开房间的方法,然后在玩家脚本的Update方法中添加一个if(Health<=0f)判定方法,再通过调用GameManager脚本中的LeaveRoom()方法退出房间。

2.2.8 战斗系统设计。

游戏设计从机器人眼里发射出的激光作为战斗系统的武器,将激光束与机器人的头部绑定,玩家按下开火键时,激光束将从机器人眼里发射出来。

2.2.9 玩家相机设计。

根据增加的偏移量来计算所需的相机位置,达到跟随玩家的效果。

使用距离参数反映水平偏移,使用高度参数反映垂直偏移,然后使
用Le⁃rping平滑运动以赶上所需的位置,最后使用简单的Loo⁃kAt使相机始终指向播放器。

2.2.10 服务器端运行。

本游戏在运行客户端时必须连接Photon服务器,提前架设服务器端。

服务器引擎封装了一系列网络通信方法,通过调用这些方法,可以实现网络通信和网络同步。

2.2.11 网络同步设计。

通过Unity提供的Photon Transform View组件和Photon Animator View组件进行基础的同步。

因为激光武器只有在photonView.IsMine为真时才需要工作,为此在PlayerManager脚本中继承IPunOb⁃servable接口来手动同步IsFiring布尔值。

在IPunObserv⁃able.OnPhotonSerializeView方法中,获得一个变量流,判定玩家是本地玩家(即photonView.IsMine==true)时才能使用stream.SendNext()将IsFiring 值附加到数据流中写入,否则只能使用stream.ReceiveNext()阅读。

另外,生命值的网络同步方法和激光武器类似,同样使用变量流进行同步设计。

2.3 游戏实现效果
图4至图7展示了多名玩家登录、连接游戏客户端、等待到进行多人对战的整个过程。

实践证明,游戏运行效果良好。

图4 游戏登录
图5 游戏连接
图6 等待大厅
图7 多人游戏
3 结语
本文以Unity平台为基础,结合Photon引擎技术与Blender模型设计,采用C#语言进行开发和技术研究,实现了以机器人为主视角的网络对战冒险游
戏。

实践证明,Unity与Photon技术相结合可以高效地进行网络冒险游戏的开发,游戏运行状态和可操作性良好。

相关文档
最新文档