APP下载

基于Unity3D射击游戏的设计与实现

2019-09-10谢宏兰

现代信息科技 2019年24期
关键词:游戏设计

摘  要:本文使用Unity中的NetWork组件实现局域网的互联,搭建游戏场景,在场景中以第一人称视角控制人物角色,进行游戏对战。在游戏设计过程中,添加了人物视野,使人物能够自由切换视角。游戏中人物的每个动作有相应的动画,做下一个动作后,会取消之前的动画,当给人物添加枪支后,能产生子弹、发射子弹,并设计了子弹的移动路线,当子弹射出时,有闪光动画以及子弹射到物体上的弹痕效果,实现了人物的血量和子弹的伤害值计算,在游戏中找到敌人并将他射死,那么游戏就会结束。这款3D射击游戏最终实现了局域网多人对战,相对于以往的射击游戏有着更加良好的视听效果以及丰富的游戏体验。

关键词:射击游戏;角色控制;Unity3D;游戏设计

中图分类号:TP317      文献标识码:A 文章编号:2096-4706(2019)24-0089-04

Abstract:The paper uses the Unity of network components for LAN interconnection,build game scenes in the scene to control the characters in the first person perspective,the game play against. In the game design process,it adds character vision,so that people can be free to switch perspective. In the game,characters each action there is a corresponding animation,do the next action,cancels the previous animation;when people add to firearms,to produce bullets,firing bullets,bullet design movement routes;when a bullet was fired,there is a flash animation and effects bullet strikes on the object;people realized the damage value calculated blood and bullets;find the enemy in the game and he was shot,then the game will end. The 3D shooter ultimately LAN multiplayer,compared with the previous shooter has more good visual effects and a rich gaming experience.

Keywords:shooting game;character control;Unity3D;game design

0  引  言

目前,網络以及人们生活品质飞速发展、提升,越来越多的人开始尝试用各种享受生活的方式,游戏就是其中一种。游戏平台有家用主机、掌上主机、个人电脑等。现有的游戏固然让人爱不释手,但随着科技的不断发展、人们对游戏画质品质要求的提高,以及对游戏体验的高标准,促进了3D游戏时代的来临。3D游戏采用了立体空间的概念,相对于2D游戏有着更好的游戏体验。3D游戏更加真实,在操作上也更加人性化,有很强的随意性,让玩家尽情发挥自己的思维,畅游在游戏世界中,享受游戏。

1  游戏概述

本文设计的基于Unity3D射击游戏的具体要求为:

(1)登录界面设有IP地址、客户端以及服务器端。服务器端创建游戏,客户端可以通过查询IP地址来连接游戏。

(2)搭建游戏场景,添加游戏人物。

(3)完成人物的射击动画,碰撞检测,添加弹痕以及射击的闪光效果,完成人物视角的移动,以及人物在场景中的移动。

(4)实现局域网信息传递,添加人物血量,设计子弹伤害,完善游戏逻辑。

当服务器创建游戏后,玩家进入到游戏中,其他玩家在游戏登录界面选择连接服务器,这样就可以进入到同一个房间中。进入游戏以后,会第一人称视角来进行移动,能够看到四周的物体,人物角色手中的枪可以用来射击,当射击时会看到子弹的闪光效果以及射击到物体上的弹痕效果,弹痕效果会在一段时间后自动消失。玩家在游戏场景中控制角色移动,在场景中寻找敌人,当发现敌人时就可以开枪射击,会设置游戏人物的血量以及子弹的伤害,这样可以准确地判断射击到目标时所造成的伤害值,当射击的伤害足以杀死对手时游戏结束,射死对手的人获得胜利,被射死的人物游戏失败。在游戏结束时,会出现两个按钮:重新开始按钮和退出游戏按钮。这种FPS游戏,每局的对战时间都不会很长,在游戏胜利或者失败后,点击重新开始,就会有一局新的对战等待着玩家。

在游戏界面设计过程中,用到了Unity3D中所自带的NGUI组件,类似于C#中的控件功能,可以让开发人员轻松地将控件拖到界面中,自由而简便地设计界面,再通过函数调用,达到实现功能的目的。游戏登录界面比较简单,一个IP地址,用来创建服务器端的地址,下面两个按钮则是服务器端玩家和客户端玩家的选择按钮,用来进入到一局相同的房间内进行对战。下面的图则是在Unity中对人物模型进行调整,包括模型的材质、碰撞域的大小以及人物以第一人称视角观察时的相机位置、相机角度的调整。在场景中以第一人称视角观察到了其他玩家也在场景中出现,这时就可以开枪射击敌人,玩家操控的人物可以在场景中自由移动,随意切换视角,使玩家可以容易地上手这款游戏。一个游戏的界面设计,以及整个游戏的风格都会对玩家的游戏体验有很大的影响,设计出一款人性化的游戏是每个游戏开发者的目标。

2  游戏核心功能实现

游戏包含的类主要为:MyNetwork.cs、Bullet.cs、CS

Flash.cs、CSBulletHole.cs、CSBulletGenerator.cs、Game Controller.cs、MyCube.cs、Player.cs、PlayAnimation.cs,游戏核心类如图1所示。

MyNetwork类:实现数据通信,进行状态同步和PRC(远程过程调用)。

Bullet类:实现子弹的创建,控制子弹速度以及伤害。

CSFlash类:子弹的闪光效果控制。

CSBulletHole类:子弹的弹痕效果以及弹痕消除的速度及时间。

CSBulletGenerator类:控制子弹的射击方向,调用闪光函数,判断是否正在开火。

GameController类:实现界面设计布局,控制游戏音乐,游戏人物在场景中的位置。

MyCube类:创建的物体在场景中的速度控制。

Player类:实现人物视角的控制,人物移动,射击控制,添加人物的血量。

PlayerAnimation类:控制玩家动画,实现玩家的动态效果。

2.1  控制人物动画

人物在进行动画时,身体的位置会不断进行更改,而那些添加在人物关节上的物体也会跟着一起更改,这样就有着比较真实的效果。随后对人物添加了行走、跳跃、下落以及举枪射击的动画,当人物进行其中一个动作时,就会停止其他动作的动画,比如人物在行走过程中按到了跳跃功能,那么此时人物就会停止做行走的动画,转而去播放跳跃动画,在人物下落时,设置了人物的静止动画,设置中人物会有0.2秒的缓冲时间,也就是说,当人物下落后,如果不再继续对人物进行操作,那么人物会自动播放静止动画,原地待命。当在Unity中添加了soldier后,Unity会自动添加Animation组件,其功能就是来控制人物的动画效果。在soldier文件下找到Animation,其中包含了人物所带的所有动画。人物的动画控制的都是骨骼关节,包括头盔、衣服、眼镜、枪支等都是在人物的骨骼关节上,跟随人物移动。

2.2  添加枪支

在soldier下找到枪支的模型,然后手动调节枪支的位置,让枪处在正确的节点上。在调节枪支位置时,要同時观测枪支在人物头部相机的位置,当以第一人称视角观察时,要看到枪支与手臂的距离,以及枪支与头部的位置效果,通过手动反复调节,找到一个比较合理的位置进行坐标固定,这样在游戏中就会显得比较自然,举枪射击时会相对流畅。

2.3  设计子弹

子弹的设计包括其飞行速度、伤害值、子弹射到物体上的弹痕效果以及开火时的闪光效果。弹痕效果设置其速度以及持续时间和消失时间。闪光效果同样设置开枪时的闪光时间。设置子弹向前为默认方向,打开编辑脚本,添加一个变量public float speed来控制子弹的速度。子弹的碰撞检测:由于子弹的运行速度特别快,所以在这里采用射线检测的方法,每一帧都发射射线来检测,射线的距离就是上一帧到下一帧的距离。由射线来检测在子弹的飞行过程中是否碰撞到物体,若检测到,则说明子弹打到了物体上。

2.4  实现射击

在gun下面创建一个bulletspwan,用来创建子弹。将这个物体放在枪口的位置,朝向与枪口朝向一致。用脚本语言来实现bulletspwan的控制,设置一个属性用来标识一秒可以射击多少发子弹。创建一个计时器来为子弹的发射计时:private float timer = 0;并且调用子弹的闪光效果:public CSFlash flash;定义一个变量用来表示什么时候开始发射子弹:private bool isFiring = false;当单击鼠标左键时开始发射,不再点击时发射停止。当人物正在射击时,计时器开始工作。看射击是否达到每秒射击的时间,当达到一秒的射击时间,计时器进行归零。然后重新计时,这样又开始进行射击。射击时调用flash,发射子弹之前生成一发子弹,编写一个类设置子弹的预制。当子弹超出控制范围或者碰撞到了物体后,进行子弹销毁,但是子弹不是立即销毁,而是设置为3秒之后销毁。

2.5  完成子弹的伤害计算

伤害计算是游戏的一个重要逻辑,每发子弹设置同样的伤害数值,设置人物初始的固定血量。当玩家控制人物在游戏场景中寻找到对手时就可以开枪对敌人造成伤害,当伤害值足以击杀敌人时,就可以完成对战。在Scripts中的Bullets.cs类中,设置每发子弹的伤害值:public float damage = 10;当子弹打到敌人身上时开始计算伤害,并且当敌人血量低于0时,完成伤害计算。

2.6  添加人物血量

游戏中设置了子弹的伤害,同时也要添加人物的血量,每一发射到人物身上的子弹都会相应地减少人物的血量值。人物血量是游戏的重要部分,定义一个Player.cs类来控制人物血量的值,当人物被射击时,调用TakeDamage函数,用来计算人物当前血量。

3  结  论

本文应用Unity3D游戏引擎开发可以跨平台的即时战略射击游戏,实现了控制人物动画、添加枪支、完成子弹的伤害计算、添加人物血量以及实现射击等功能,这款3D射击游戏突破传统游戏的障碍,带来了一种新的游戏体验,具有强烈的视觉效果。

参考文献:

[1] 孙嘉谦.Unity 3D详解与全案解析:基于多平台次世代手游《黑暗秩序》 [M].北京:清华大学出版社,2015.

[2] DEAN J.Unity Character Animation With Mecanim [M].Birmingham:Packt Publishing,2015.

[3] 刘俊生,陈煜.3ds Max游戏场景制作 [M].湖北:华中科技大学出版社,2015.

[4] 黄远,许广彤.游戏动画设计与制作 [M].北京:人民邮电出版社,2009.

[5] KENNY L.Unity着色器和屏幕特效开发秘笈 [M].晏伟,译.北京:机械工业出版社,2014.

作者简介:谢宏兰(1974.10-),女,汉族,江西宁都人,讲师,本科,主要研究方向:计算机图形图像、高职教育。

猜你喜欢

游戏设计
基于HTML5的移动端产品推广轻游戏设计与开发
例谈英语课堂游戏教学的设计技巧
以“玩”激趣
基于中职学校教育游戏的开发与应用探究
VR技术现况及其未来对游戏设计的影响
小学低年级语文游戏教学设计探讨
让小学英语阅读教学焕发生机
儿童弱视在线康复训练平台的设计与开发
浙江卫视真人秀《奔跑吧兄弟》节目特色浅析
浅谈小学科学中的游戏设计