基于Unity3D的射击类游戏设计研究
作者:王莉莉 周灵 王薪州
来源:《电脑知识与技术》2018年第19期
        摘要:随着数字媒体技术的发展,Unity3D引擎作为一款跨平台游戏引擎,已被广泛应用于游戏设计开发中。该文以《单兵作战》第一人称视角射击游戏为例,介绍基于Unity3D引擎的射击类游戏设计实现过程,主要包括场景系统、角系统、道具系统、状态系统、交互系统和得分系统等,经测试游戏运行流畅。
        关键词:射击类游戏;电子竞技游戏;Unity3D引擎
        中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)19-0104-03
        1 引言
        随着计算机技术、网络技术的发展,电子竞技产业已经受到世界各国的广泛关注。以《穿越火线》《CSGO》《绝地求生》等为代表的FPS(射击)类电子游戏,每年通过举办国际性
赛事吸引全球游戏迷强烈关注。据相关数据预测,到2019年我国电子竞技用户规模将达4.3亿人,他们的年龄大多是25岁以下,其中军事电子游戏因其独特的竞技性广受年轻一代的青睐。
        电子竞技游戏不仅是一种基于互联网平台的以智力对抗游戏为内容的体育活动,更是一种青少年普遍认同的文化娱乐形式,已成为一种新兴文化的传播媒介。设计开发一款能够开展国防教育和军事文化传播的电子竞技游戏是非常重要的课题。本文以Unity3D为开发引擎,以《单兵作战》游戏为例,介绍了军事类题材,射击类游戏的设计研究过程。
        2 Unity3D引擎简介
        Unity3D是由Unity Technologies开发的一款多平台综合游戏引擎,允许用户轻松创建交互式内容,如3D游戏、建筑可视化、三维动画等。它类似于Director、BlenderGame Engine、Virtools或Torque Game Builder等利用交互式图形开发环境为主要形式的软件,其编辑器可运行在Windows和Mac OS X操作系统下,可以发布游戏到Windows,Mac,Wii,iPhone,WebGL(需要HTML5),Windows Phone 8和Android平台。还可以使用Unity Web Player插件发布网页游戏,并支持Mac和Windows的网页浏览。因为这些优点,使得越
来越多的游戏开发人员选择Unity3D这款游戏引擎。本文通过Unity3D引擎实现了场景搭建、游戏交互等。
        3 游戏整体设计
        3.1 游戏策划
        游戏场景是热带雨林,玩家以解放军士兵身份被派遣至此。玩家进入游戏,自带初始体力值和弹药数,利用拾取道具增加体力值和弹药数。按Q键拾取弹药箱和补给箱,每拾取一个弹药箱,补充50枚弹药;每拾取一个补给箱,体力增加30。弹药的峰值为200,体力的峰值为100,当弹药数和体力数达到峰值时,拾取道具,弹药数和体力值均不会增加。当士兵的体力值大于0时,士兵的体力值会因受到攻击而减少。当体力值为0时,角死亡,跳转到重新开始界面。
        敌人有三种类型,一血型、二血型、三血型,分别能够承受1、2、3枚子弹。场景中的敌人是随机生成的,根据游戏难度,简单、困难、专家,敌人初始数量分别为200人、300人和500人。当敌人数量少于160人时,系统会自动增加敌人。敌人具备智能自由行走功能,在
行走中寻玩家所控制的士兵,当士兵与敌人在一定范围内,敌人会追击士兵,并调用攻击动画对士兵进行攻击。当敌人受到士兵攻击时,血量会减少,当血量为0时,调用倒地动画。子弹是否打中敌人,涉及碰撞检测,当子弹打中敌人时,敌人血量减少或者死亡,子弹销毁,当子弹并未打中敌人时,子弹自动销毁,释放内存,敌人血量不变。
        得分系统的设置,可增加游戏的竞技性。得分系统显示在游戏中和游戏结束时,实时提醒玩家得分情况。当系统中士兵体力值为0时,调用游戏结束界面,显示得分系统。
        3.2 游戏功能模块设计
        本游戏主要包括游戏主界面、场景系统、角系统、状态系统、道具系统、交互系统、得分系统五部分。游戏功能结构图如图1所示。
        4 游戏具体实现
        4.1 游戏主界面实现
        在Unity3D环境中,通过Image设置游戏主界面背景图片,设置三个按钮。设置游戏难
度选项卡、音量调节功能,设置摄像机。针对三种难度,编写代码控制敌人初始数量、移动速度、血量等,完成主界面设计,如图2所示为游戏主界面。下面给出游戏难度为“简单”的相关代码:
        if (toggle.name == "简单") {Debug.Log("okokokok");
        PlayerPrefs.SetFloat("Count_Enemys", 200f);
        PlayerPrefs.SetFloat("moveSpeedX_Enemys0", 0.5f);
        PlayerPrefs.SetFloat("moveSpeedX_Enemys1", 1f);
        PlayerPrefs.SetFloat("Life_Reduce", 0.0001F); }
        4.2 游戏场景设计
        首先创建一个地形,调整地形大小,修改平面大小,调整地势的起伏,给地形贴材质、刷树木、花草、石子等,添加天空盒,创建好基础地形。再添加一些岩石、古遗迹模型、添加合适的音乐等使得地图更加逼真。如图3所示为游戏场景地形图。
        4.3 游戏角设计
        游戏角主要包括玩家控制的士兵和系统自动生成的敌人。
        4.3.1 士兵角设计
        将士兵模型导入Unity3D后,通过编写代码控制其行走、奔跑、跳跃等动作,再通过设置相应的动作动画使其更逼真。士兵的移动,通过官方自带的FPSController组件来设置,可实现人物的移动方式、鼠标锁定、视角跟随、WSAD控制上下左右移动,空格跳跃等。如图4所示为人物角属性界面。人物跑动的相关代码需单独设置如下:
        if (Input.GetKey(KeyCode.LeftShift))
        moveDirection *= fasterMoveSpeed;
        else
        moveDirection *= moveSpeed;
        4.3.2 敌人角设计
        导入敌人资源包,即可完成敌人的模型和动画设置。通过animator组件设置角动画调用,如图5所示为敌人属性界面。通过代码实现敌人智能行走,首先定义一个随机的X和Y轴,然后规定行动范围。敌人在行走中需要寻玩家所控制的士兵,当士兵与敌人在一定范围内,敌人将追击士兵,调用攻击动画对士兵进行攻击。部分代码如下:
游戏网页界面设计
        if ((ansform.position -GameObject.Find("Police").transform.position).magnitude > 30)
        {moveDirection = new Vector3(randomX, 0, randomZ);
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection *= moveSpeedX;
        transform.localEulerAngles = Vector3.Lerp(transform.localEulerAngles, new Vector3(0, rotationY, 0), 0.1f);}
        4.4 状态系统
        首先,建立一个名为AddBoxesAndLife的C#脚本,里面设定士兵的体力值,弹药数,体力最大值,弹药最大值,拾取补给箱所补充的体力值和拾取弹药箱所补充的弹药数。再根据士兵体力值和弹药数来编写脚本,当士兵的弹药数大于0时,每次射击发射一枚子弹,当士兵的弹药数等于0时,射击不发射子弹。按Q键拾取弹药箱,每拾取一个弹药箱补充50枚弹药。当士兵的体力值大于0时,士兵的体力值会因受到攻击而减少,按Q键拾取补给箱,每拾取一个补给箱补充30体力值,当士兵的体力值等于0的,角死亡,跳转到重新开始界面。
        建立一个名为Attack的C#脚本,对子弹进行碰撞检测,当子弹打到敌人时,敌人生命值减少或死亡,子弹销毁,碰到其他道具物品时,子弹自动销毁,释放内容。
        4.5 道具系统
        道具系统主要包括弹药箱、补给箱。导入道具模型后,将道具实例化的位置放在高处,营造空投效果。为道具添加刚体和碰撞器。当玩家走进道具并按Q键时,拾取并使用道具。
        4.6 交互系统
        在游戏主场景中可显示人物所处的位置和实时状态,在此界面创建小地图、血量条、弹药条、得分四个模块。当体力值、弹药数发生变化时,血量、子弹数、得分将实时反应在界面上。如图6所示为游戏主场景。实现的部分代码如下:
        public void UpdHealth(){Transform.sizeDelta = new Vector2(maxBarLength * (playerHealth / maxPlayerHealth), Transform.sizeDelta.y); }
        public void UpdStrength(){ Transform.sizeDelta = new Vector2(maxBarLength * (playerStrength / maxPlayerStrength), Transform.sizeDelta.y); }
        4.7 得分系统
        得分系统主要显示玩家所获得的积分数,显示在游戏主场景和游戏结束页面。当检测到一血的敌人血量减为0时,环境中的敌人数量减1,相应的得分系统加10分。主要通过在敌人状态控制脚本中添加Camera.main.GetComponent().score += standardScore;实现得分系统。如图7所示为游戏结束界面。
        经测试,游戏运行流畅,角控制流畅,道具系统、状态系统、得分系统计算正确。
        5 结束语
        本文阐述了基于Unity3D游戏引擎设计射击类游戏策划、功能模块设计、系统实现的过程。玩家可以第一人称视觉控制游戏中的士兵消灭系统自动产生的敌人,来获得分值。通过射击游戏可模拟战场,训练士兵射击能力,与敌作战的策略,可模拟经典战场建设场景,帮助玩家了解历史战争中的经典故事,传播历史文化和军事文化。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。