基于Unity3D的ARPG游戏设计与实现

2020-12-01 03:17王艳华唯辰
电脑知识与技术 2020年29期
关键词:碰撞检测游戏

王艳 华唯辰

摘要:目前人们生活节奏快碎片化时间多,多数人更愿意利用碎片化时间玩一些不易沉迷的游戏。为了迎合现代人对游戏的需求,旨在开发一款不易让人沉迷、锻炼玩家快速反应能力的三维ARPG类游戏。基于Unity3D游戏开发技术在Visu-aIStudi02019平台、使用C#开发语言设计并实现了这款名为剑圣的三维ARPG游戏。首先分析选题背景,然后描述游戏开发的目的、玩法以及包含的功能模块,接着详细阐述游戏中关键技术的开发思路,最后展示了游戏的实现效果图。

关键词:Unity3D;ARPC;游戏;碰撞检测;人物交互

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2020)29-0199-03

1 概述

ARPG( Action Role-playing Game)即动作类角色扮演游戏,有很大一部分是单机游戏。在这类游戏中,用户控制某个角色并执行相应的动作(尤其是攻击动作)在特定环境中活动,AR-PC融合了动作游戏和传统RPG游戏的元素,将激烈的打斗场面融人其中,大大加快了游戏的节奏感和紧张感,更加容易调动用户的参与感,它增强了RPG游戏的交互性和动作感[1],也使得ARPG类游戏在中国受到越来越多人喜欢。

Unity3D作为目前主流的3D游戏开发引擎,集图形、音频、物理和网络等多功能为一体[2j,可以编辑地形、搭建3D场景、并通过脚本编写对角色进行控制,尤其他强大的物理引擎还能模拟出更加逼真的场景,使游戏更加真实[3]。所以本文基于Uni-ty3D技术和Visual Studi02019平台、使用C#语言开发一款AR-PG游戏系统。

当今社会发展飞速,人们生活节奏快碎片化时间比较多,多数人更愿意选择玩一些简单易操作又不易沉迷的游戏来休息与放松,所以本文开发的是一款只有刀光剑影、没有让人沉迷的故事情节、旨在锻炼玩家快速反应能力的ARPG类游戏。

2 游戏设计

2.1 游戏开发目的

本游戏旨在实现一个3D的ARPG单机闯关游戏。本游戏中人人都是剑圣,没有花里胡哨的法术,也没有一招必胜的绝招,有的只是以刀剑去会武林各路高手的豪迈、勇猛,主要考验玩家在极短时间内做出反应操作的能力,可以锻炼玩家的快速反应能力。

2.2 游戏玩法

本游戏共有2种角色:剑客和敌人,共4个关卡。玩家在进入游戏后,可以选择“开始新游戏”“继续游戏”和“退出游戏”。如果是新游戏,先是挑战一个教学关卡,成功后继续挑战剩下三个打斗关卡;如果是继续游戏,则继续使用上一次游戏退出时剑客的属性,比如体力值、攻击力等,跳过教学关卡,直接挑战三个打斗关卡。所有角色只有体力值没有生命值,角色一旦受到伤害只会削减体力值,剑客体力值为零则挑战失败,以武会友不伤性命。敌人被击败后会掉落增加剑客技能和攻击力的宝物。

2.3 游戏功能模块设计

本游戏包括三个功能模块:场景设计模块、人物功能模块、游戏功能模块,如图1所示。

1)场景模块包括了场景环境的搭建以及界面UI的显示,本游戏系统设计了四个场景:教学场景和三个打斗场景,和六个界面:开始界面、设置界面、剑客信息界面、胜利界面、失败界面、通关界面。

2)人物功能模块包括对剑客和敌人的控制功能模块。

剑客:剑客由玩家操控,在体力值大于0时,可以前后左右移动;在防御时,可以通过翻滚、格挡进行闪避,当剑客进行格挡时,敌人的普通攻击不会对其造成伤害,并且格挡在特定情况下会对敌人弹反,弹反成功会对敌人造成硬直;剑客在攻击时,在精力值不为0时,可进行普通攻击、连击和技能攻击;剑客受到伤害时会硬直,體力值会减少,当体力值变为0时,玩家挑战失败,游戏重新开始。

敌人:本游戏包含3种敌人:小怪、精英怪物和boss,具有追逐、自动躲避障碍、防御、进攻和反击等逻辑,敌人对剑客进行攻击,其中精英怪物和Boss能够对剑客的连续攻击和技能攻击进行格挡,如果敌人一直被剑客攻击会有一定概率的反击操作,如果剑客一直格挡敌人会看破。

3)游戏功能模块是本游戏系统的主体部分,包括音效管理、公共方法封装、流程控制、点击事件、传送逻辑、底层数据管理,该模块采用MVC框架进行设计[4]。

3 游戏关键技术

3.1 场景实现

由于场景建模不是本系统的重点内容,所以场景中的地图环境素材来源于网上的开源素材,导人到Unity3D项目的Assert文件夹中,将基本的素材(石头、青苔、树木、叶子、木板等)组合成一个prefab预制体(山体、树木、房屋),在场景中添加物体以及人物,并为场景中的物体、人物加载碰撞器( BoxColider)组件和刚体(RigidBody)组件,方便后续实现重力、碰撞等物理效果,最后烘焙场景光源和可到达区域[5]。

3.2 人物碰撞检测

本游戏系统主要涉及剑客与敌人间的攻击,为了呈现攻击碰撞时的真实性和准确性,需要为剑客和敌人设置碰撞检测。本系统采用Unity提供的BoxColider碰撞器组件、触发器进行碰撞检测[6]。

3.2.1剑客的攻击碰撞检测

剑客的攻击碰撞检测,是将BoxColider组件和PlayerSward-Attack脚本挂载到剑客人物模型的右手的剑上,并勾选Is Trig-ger属性[7-8]。当剑碰撞器接触到敌人躯体碰撞器时,物理上看剑会穿过敌人,在PlayerSwardAttack脚本中进入OnTriggerEnter方法,首先实例化剑客的攻击特效,并设置一个攻击参数is—CanAttack,判断玩家操控剑客时是否按下攻击键(即剑客是否正在攻击),如果没在攻击,比如人物移动时剑只是碰到敌人并没有攻击敌人,则直接退出方法,物理上没有任何效果,如果正在攻击,敌人则受到伤害,播放受伤动画并减少血量,同时获取敌人,将敌人挂载的enemySwardAttack脚本中的攻击参数设置为false,这样可以保证敌人在被攻击时自身的攻击碰撞器失效,避免攻击逻辑上的混乱。

3.2.2 敌人的攻击碰撞检测

敌人攻击碰撞器的实现原理与剑客攻击碰撞器的相同,只是组件和脚本被挂载到了一个透明的、立方体形状的游戏物体上,如图2所示,若剑客在这个碰撞器范围内,敌人便隔一定时间调用攻击方法,若不在碰撞器范围内,敌人根据距离来判断是否追踪剑客。

在敌人攻击剑客时,激活其攻击碰撞器,并实例化剑客被攻击的特效,重置攻击时间间隔attackTimer。因为剑客一直在攻击碰撞器范围内,所以先设置碰撞器关闭,当攻击间隔at-tackTimer到时才激活碰撞器对剑客进行攻击,这样不会一直对剑客造成伤害.实现敌人的间隔攻击。

3.2.3 敌人和剑客的躯体碰撞检测

在剑客和敌人的躯体模型上挂载BoxColider碰撞器组件,但均不勾选IsTrigger這个触发器属性,在游戏中称为“碰撞体积”,不勾选触发器属性的效果就如同现实生活中两个人面对面移动不可能直接穿过去而是会撞在一起一样,在游戏中剑客同样不能从一堆敌人中穿过去,而是会被包围。

3.3 人物间交互

在Unity3D中,实现虚拟交互的方式是编写能够实现交互功能的脚本,并将相应脚本挂载到相应的3D物体上。本游戏系统关键交互技术为:敌人智能追踪、剑客弹反和剑客连击。

3.3.1敌人智能追踪

敌人智能追踪是使用Navigation导航系统实现的[9],在Nav-igation系统中先烘焙地图上的导航网格确定哪些地方是可达到的(Walkable),再使用NavMeshAgent组件控制角色的移动。敌人具有转身速度、仇恨距离、攻击距离、攻击间隔等属性,在敌人这个G ameObject上挂载的EnemyController脚本中实例化导航系统,在Awake方法中调用NavMeshAgent里的API获取剑客的实时位置坐标,并得出剑客与敌人的距离,若该距离在敌人的仇恨距离内追击玩家,当进入攻击距离后开始根据攻击间隔攻击玩家。

3.3.2 剑客弹反

敌人攻击的同时若玩家能在指定之间内按下空格键便可进行弹反。在敌人的碰撞器脚本中,当敌人进行攻击时,将弹反机会参数isCanOpenPlayProtect设置为true,进入弹反判断,计算玩家按下空格键的反应时间,设置控制玩家弹反的判定时间(例如1s),此时考验和锻炼玩家反应速度的时候到了,当玩家反应时间大于判定时间时则弹反失败,剑客受到伤害;若玩家反应时间小于判定时间则弹反成功,效果如图3所示,调用Tools单例中取消敌人伤害的方法,并实例化弹反的特效,播放弹刀的音效,并重置敌人的攻击时间,播放敌人受伤动画,即敌人产生硬直,效果如图4。

3.3.3 剑客连击

剑客攻击时会消耗精力值,在调用攻击方法前,先判断剑客当前的精力值是否大于攻击消耗的精力,若大于则调用攻击方法、播放攻击动画、AudioController设置攻击音效,并进行是否连击的判断。若玩家本次与上一次的攻击间隔小于系统设定的攻击间隔attackTimer则认为是连击,再根据连击次数thi-sAttacklndex获取连击进度,再依据连击进度播放不同的攻击动画和音效。

4 游戏实现

部分游戏实现效果,如图5所示。

5 结语

本文基于Unity3D技术和VisualStudi02019平台、使用C#开发语言设计并实现了这款ARPG游戏。游戏只有剑客与敌人间的对战,不易让人沉迷其中,尤其是弹反系统的设计,更好的考验、锻炼了玩家的反应能力,但游戏场景不够华丽、界面也不够美观,在这个方面还有很大提升空间。

参考文献:

[1]邓增强,基于Unity3D的轻量级ARPG手机游戏系统研究与应用[D].广州:广东工业大学,2017.

[2]尹大伟,张熙若,李欢欢,等,基于Unity3D的虚拟校园漫游系统及其关键技术研究[J].软件工程,2019,22(9):17-19.

[3]朱晴.Unity3D开发工具在3D游戏开发中的应用[Jl,电子技术与软件工程,2019(22):58-59.

[4]马春江,张明祯.Unity3d游戏开发中的面向组件思想和MVC框架[J].信息与电脑,2017(18):70-72.

[5]张策.基于Unity3D的三维游戏场景设计与实践[D].合肥:合肥工业大学,2016.

[6]俞磊,韩春香.基于Unity3D和3DSMax的虚拟医院漫游系统的设计与实现[J].长春大学学报,2020,30(4):40-44.

[7]朱喜基,冯振辉,基于Unity3D虚拟校园漫游碰撞检测的研究[J].江苏科技信息,2018(11):66-68.

[8]武桐,王晓雨.Unity3D中碰撞检测问题的研究[J].电子测试,2018(1):83-84.

[9]袁科,高启文,闫永航.基于Unidy3D的角色扮演游戏设计与实现[J].软件导刊,2019。18(8):75-79.

【通联编辑:梁书】

作者简介:王艳(1985-),江苏徐州人,研究生,助理实验师,研究方向:软件工程;华唯辰(1997-),江苏苏州人,本科。

猜你喜欢
碰撞检测游戏
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
Unity3D中碰撞检测问题的研究
空间遥操作预测仿真快速图形碰撞检测算法
爆笑游戏
BIM技术下的某办公楼项目管线碰撞检测
双臂钻车钻臂与巷道的碰撞检测方法研究