基于Unity3d的篮球类游戏开发

博主主页:电子科技大神
博主简介:专注电子技术领域和毕业设计项目实战,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(单片机项目,plc,仿真等)、简历模板、学习资料、技术咨询。



一、摘要

  随着时代向前推进,互联网的信息技术也发生了日益精进,人们的日常生活中娱乐所占用的时间相比以前也渐渐提高。其中游戏业以惊人的速度发展,各个年龄阶层的人们都对游戏有不同程度的需求。而这当中VR游戏又是游戏业中的尖端技术,这类游戏不仅能让玩家体验到仿真的交互,而且还可以做到模拟现实、身临其境的效果,因而受到大量的游戏玩家的喜爱。
Unity3D是目前市场上最热门的一款游戏开发引擎之一,它易于上手,开发便捷,正是学生初步接触游戏开发时的不二之选。本项目是一款基于VR设备的篮球体育类游戏,在使用Unity 3D游戏引擎进行开发的基础上,也结合了SteamVR接口的运用。区别于电脑上、手机上的篮球游戏,使用VR设备进行游玩的篮球游戏除了在体验游戏过程中达到减压的目的,同时身体的随着游戏活动也能给人们带来一定锻炼效果。现在社会上的人们,无论是学生还是成年人,在空闲时选择的游戏通常都是在电脑前,手机前进行操作,久而久之也会由于缺乏运动而带来一些不好的影响,而VR体育类游戏能很好地把游戏和锻炼结合在一起。
  本文内容主要描述了该游戏的开发经验,即该游戏的设计与实现以及游戏功能测试等总体的VR游戏开发流程。为后续想要开发同类游戏的开发者提供一些借鉴与参考。

关键词:Unity3D SteamVR 虚拟现实 计算机仿真

二、绪论

  随着计算机科学技术的飞速发展,VR游戏也来到了大众的面前大众。玩家们对于游戏的要求日益增长,比起以前来更加追求真实的感官体验。而VR游戏在这方面达到的效果比其他平台上的效果更为显著。它的仿真度高,体验感强,能让用户感觉更加融入游戏与享受游戏,在VR游戏开发逐渐成为热潮的今天,用Unity3D做一款VR游戏可谓是赶上了时代的潮流。
  Unity3D作为当下最热门的游戏开发引擎之一,它的实用性也是一流。Unity3D上手难度低,开发速度快,开发成本低,逐渐吸引越来越多的人使用它进行游戏开发。加上游戏开发工作者市场尚未饱和,在游戏领域里Unity3D游戏开发的人才依然受到各大公司青睐。高薪的工作以及乐观的前景,也使得越来越多人加入了Unity3D游戏开发的热潮当中。
  目前市场上的虚拟现实游戏内容较为单一,其中大部分都为第一人称射击,虽说VR技术走在时代前沿,但要说与传统游戏的竞争其实还力有未逮。而且一般的虚拟现实设备价格都较为昂贵,而且就实际效果而言还不够完善,设备不够便捷,同水平游戏开发难度比普通电脑端、手机端大。因此VR游戏在现阶段仍然没有较好的普及到所有地区,通常而言只有少数发达区域会有VR游戏体验馆,而即使是那些地方受众也不算多。因此我也希望本文能够给后续希望致力于丰富VR游戏内容的游戏开发者们一些参考[4]。

二、系统分析

3.1场景设计

  本游戏场景主要为游戏开始界面和游戏进行界面。
游戏开始界面使用网络中寻找的图片素材,运用Photoshop进行处理后结合成开始界面和选关界面的素材。
  游戏进行界面主要是一个篮球场,以及篮球场内的东西,比如地板,篮筐,篮球架,墙壁,篮球场外围铁丝网。该部分主要使用3DS Max进行建模。

3.1.1场景的制作

  由于使用3DS Max所建造的模型较多,在此只举例说明篮球架的制作。首先上网找到篮球架的样子,并查找它的规格尺寸数据,然后在建模时根据实际情况进行微调数据比例。这里从篮球架的底部开始。如图3-1所示。
在这里插入图片描述

图3-1 篮球架的底部样条线
  先用样条线画出大概形状,然后再调整点的位置,并给转角的点圆角一下,让它过渡显得自然一些,然后给样条线挤出100cm,最后再调整一下整体的比例
另一个底部也是同样的做法,先画样条线,再挤出,然后调整比例。最后成品如图3-2所示。
在这里插入图片描述

图3-2 篮球架底部完成图

支架的制作由3个长方体构成,先给它们摆好位置,如图3-3所示。
在这里插入图片描述

图3-3 篮球架支架初始图
  然后对上面两个长方体转为可编辑多边形,同过过调整它们的顶点,效果如图3-4所示。
在这里插入图片描述

图3-4 编辑后形状
  然后下面的长方体通过布尔拾取斜着的长方体,让两个长方体有一个平滑的切面,效果如图3-5所示:
在这里插入图片描述

图3-5 篮球架支架下半部分

三、效果图

3.1开始界面

  进入游戏后的第一个界面。由Photoshop处理完素材后制作而成。如图3-11所示。
  此界面在开始游戏按钮处添加了按钮Button,并把进入到选关页面的代码放入了Button当中。代码内容如下。

1.using System.Collections;  
2.using System.Collections.Generic;  
3.using UnityEngine;  
4.using UnityEngine.Events;  
5.using UnityEngine.SceneManagement;  
6.using UnityEngine.UI;  
7.  
8.public class startbutton : MonoBehaviour  
9.{  
10.    public GameObject startbtn;  
11.    // Start is called before the first frame update  
12.    void Start()  
13.    {  
14.        startbtn.GetComponent<Button>().onClick.AddListener(onClick);  
15.    }  
16.    void onClick()  
17.    {  
18.        Debug.Log("button");  
19.        SceneManager.LoadScene(1);  
20.    }  
21.    void Update()  
22.    {            
23.    }  
24.}  

在这里插入图片描述

图3-11 游戏开始界面
  此部分代码运用GetComponent< >( )找到开始游戏按钮内的Button,并且在玩家使用激光触发该按钮后执行切换场景到选关场景,该部分由SceneManager.LoadScene()实现。

3.2.1选关界面

  首先把美术素材进行拼贴,做好选关板块后给每个关卡图片都加上Button按钮,并编写切换Scene代码达到切换关卡的效果。选关界面如图3-12所示。
在这里插入图片描述

图3-12 游戏选关界面
  选关部分的代码与开始界面的代码较为类似,即使用GetComponent< >()找到6个关卡按钮,然后根据所选择的关卡进行Scene切换,代码如下:

1.using System.Collections;  
2.using System.Collections.Generic;  
3.using UnityEngine;  
4.using UnityEngine.SceneManagement;  
5.using UnityEngine.UI;  
6.  
7.public class buttonguan1 : MonoBehaviour  
8.{  
9.    public GameObject xuanguantbtnone;  
10.    public GameObject xuanguantbtntwo;  
11.    public GameObject xuanguantbtnthr;  
12.    public GameObject xuanguantbtnfou;  
13.    public GameObject xuanguantbtnfiv;  
14.    public GameObject xuanguantbtnsix;  
15.    // Start is called before the first frame update  
16.    void Start()  
17.    {  
18.        xuanguantbtnone.GetComponent<Button>().onClick.AddListener(onClick1);  
19.        xuanguantbtntwo.GetComponent<Button>().onClick.AddListener(onClick2);  
20.        xuanguantbtnthr.GetComponent<Button>().onClick.AddListener(onClick3);  
21.        xuanguantbtnfou.GetComponent<Button>().onClick.AddListener(onClick4);  
22.        xuanguantbtnfiv.GetComponent<Button>().onClick.AddListener(onClick5);  
23.        xuanguantbtnsix.GetComponent<Button>().onClick.AddListener(onClick6);  
24.    }  
25.    void onClick1()  
26.    {  
27.        Debug.Log("button1");  
28.        SceneManager.LoadScene(2);  
29.    }  
30.    void onClick2()  
31.    {  
32.        Debug.Log("button2");  
33.        SceneManager.LoadScene(3);  
34.    }  
35.    void onClick3()  
36.    {  
37.        Debug.Log("button3");  
38.        SceneManager.LoadScene(4);  
39.    }  
40.    void onClick4()  
41.    {  
42.        Debug.Log("button4");  
43.        SceneManager.LoadScene(5);  
44.    }  
45.    void onClick5()  
46.    {  
47.        Debug.Log("button5");  
48.        SceneManager.LoadScene(6);  
49.    }  
50.    void onClick6()  
51.    {  
52.        Debug.Log("button6");  
53.        SceneManager.LoadScene(7);  
54.    }  
55.    // Update is called once per frame  
56.    void Update()  
57.    {  
58.    }  
59.}  

3.2.2篮球设置

在Unity找到建模做好的篮球,给它加上刚体Rigidbody,赋予了它重量以及它的摩擦系数,使它在上升和下降过程中更加接近真实的篮球轨迹。
然后给它设置球形碰撞体Sphere Collider,此碰撞体默认贴合导入Unity中的篮球模型,但是我们对它的碰撞体进行略微的放大调整,使玩家更加容易抓到球,而且更大的碰撞体对于球对地面或墙壁产生碰撞时视觉效果也会更好。
此外,此游戏中的篮球还必须添加弹性才能更加贴近真实的篮球。在Sphere Collider球形碰撞体参数内找到Material材质这一栏,添加一个新的材质。然后对新的材质进行参数调整,找到弹性bounciness这一栏,调整参数并进行测试,最终调整到接近现实生活中的篮球即可。篮球碰撞体比篮球模型略大,如图3-13所示。
在这里插入图片描述

图3-13 篮球模型及其碰撞体

总结

   从游戏策划到开始建模,再到资源整合代码编写,然后游戏测试游戏调整,最后到编写毕业论文,整个过程跨过了接近半年。在感叹时间飞逝的同时,也对自己的收获感到满足。当前的游戏市场上VR游戏虽然占比不大,但是我相信它一定有着亟待挖掘的发展潜力,和巨大的发展前景。虽然此时我只是以一名学生的身份进行简单的游戏开发,开发的游戏或许在一些人眼中不值一哂,但是我在这个游戏的开发过程中有了不少的感悟。
   首先是软件开发的机能限制,除开Unity3D和3DS Max两个软件间模型导入可能发生的错误,VR设备在当前环境下对游戏的玩法也有着不少的限制。HTC Vive头戴式显示器需要被房间内的两个定位器定位到,而这个定位十分容易遭到干扰,经常导致定位丢失而玩家在游戏空间内迷失,从而产生眩晕感,不利于玩家进行游戏。手持式控制器也是一样,虽然它也有的它的优点,但是缺点也十分明显,在类似于篮球,羽毛球等球类运动游戏时,其实难以产生真的在运动的手感,手中只是握着手柄,而且捡取篮球时需要按按钮,丢出篮球时需要松开按钮,其实跟真实的投篮相去甚远,这对想进入游戏进行篮球活动的玩家会产生一定的违和感。对于电脑游戏或者手机游戏来说,真实感未必是很重要的,但是对于VR游戏来说,真实感却是重中之重,因此VR游戏的发展,还需要更多的人投入更多的努力。
   然后是游戏设计的问题。在本文所论述的游戏中,移动方式是激光指向然后瞬移,对于一个篮球游戏来说,我认为这一点很致命。瞬移显然无法满足想要打篮球的玩家的欲望,但是若是不设置瞬移,仅仅靠玩家的移动来进行游戏内的移动,我很怀疑玩家们的游玩空间是否足够。一般人家里的可能腾不出一个篮球场的空位来让玩家进行篮球运动,而可以瞬移则很好的解决的这一点。两种移动方式各有优劣,但是在设计时难以只取其精华,去其糟粕。现在能想到的是,本来用于射出激光进行瞬移的左手,改为射出激光则玩家往机关所指的方向跑动。如此一来违和感比瞬移小很多,也不需要很大的空间进行游玩。而且碍于实力的不足,玩家的身体模型,篮球的运球动作,有很多看上去必要的东西都没有加进来,这一点令我感到十分遗憾。
   当前的VR游戏研发仍未到达顶峰,技术也尚且不足,而且VR游戏会受到多方面因素的影响,只看目前的游戏设备的话,要在每个家庭里流行依然是任重而道远。本文的工作目的也是为此,希望能给后来的游戏开发者们提供一些参考,便于后续VR游戏开发的研究。期待看到VR游戏设备更加完善的一天。

目 录

目录

第一章 绪论 1
1.1 选题的目的和意义 1
1.2 国内外研究现状 1
1.3 论文组织结构  2
第二章 开发工具介绍 3
2.1 Unity3D游戏引擎 3
2.1.1 Unity3D软件介绍 3
2.1.2 SteamVR开发套件 3
2.1.3 HTC Vive 4
2.1.4 SteamVR插件 4
2.1.5 GUI(图形用户界面) 4
2.2 3Ds Max软件 4
2.3 Adobe Photoshop 5
2.4 Visual Studio 2019 5
第三章 游戏设计 6
3.1 场景设计 6
3.1.1 场景的制作 6
3.2 开始界面 10
3.2.1 选关界面 11
3.2.2 篮球设置 13
3.3 不同关卡的设计 14
3.3.1 增加球的种类 14
3.3.2 增加篮筐的变化 15
3.4 添加背景音乐及游戏音效 20
3.5 游戏的打包与导出 20
第四章 游戏测试 22
第五章 总结 23
参考文献 24
致谢 25