




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于SteamVR的数学解密实验室开发与实现 Development of sudoku laboratory based on SteamVR 去掉括号 内容摘要随着近期Half Life:Alyx的爆火,其超越时代的表现力向用户与开发者展示了VR游戏的巨大潜力与可能性。VR游戏所提供的视听体验所带来的震撼如3D电影一般远超一般的游戏所能感受到的,这是VR游戏带来的优势,也是开发者所面临的大事。如何做好互动逻辑、战斗机制、关卡设计是当前VR开发所需要面临的重大难题,Valve带领的世界顶级的VR开发团队不仅给出了令玩家满意的答案,也给当下不温不火的VR游戏带来新的希望。本项目基于Steam
2、VR开发,主题为数学解密实验室,实际游戏内容为数独游戏,通过特定算法实现游戏规则。结合使用VRTK实现VR项目开发的简易化。作为一个刚入门学习使用Unity制作游戏的开发者,开发VR游戏也是一门难题,重于交互还是重于体验难以抉择,如何在其中寻找平衡是一个问题。本文从开发二维游戏经验角度入手,再结合VR游戏玩法,区别于平时游玩的二维数独游戏,VR设计可以带来新的游戏体验。本文主要论述游戏的开发原理、设计以及功能的实现,为开发VR游戏的开发者提供借鉴。关键词:SteamVR游戏开发 数独游戏 Unity3D目录第一章 绪论51.1 VR游戏的背景、意义及研究内容51.1.1 VR游戏的背景与现状5
3、1.1.2 VR游戏的意义51.1.3 研究内容简介6第二章 Unity3D与VRTK插件介绍72.1 Unity3D72.1.2 Unity3D的优势72.2 VRTK插件72.2.1 VRTK插件简介与使用优势72.2.2 VRTK常用参数与脚本8第三章 游戏设计介绍93.1 游戏设计背景93.1.1 数独游戏的历史93.2 游戏基本规则113.2.1 数独的多种玩法113.3.2 Classic数独的规则及其代码初设计13第四章 游戏设计与实现184.1 提前准备184.2 游戏场景设计204.3 玩家运动的实现224.4 数独游戏的实现244.4.1 载入数组前的准备264.4.2 将
4、数独数组载入游戏284.4.3 实现修改数字功能29第五章 游戏效果与测试325.1 终局完成判定及音乐效果325.2 UI、跳转场景335.3 游戏的打包与测试34第六章 总结35第一章 绪论1.1 VR游戏的背景、意义及研究内容1.1.1 VR游戏的背景与现状Virtual Reality,又称虚拟现实技术,是20世纪给人体验“真实”的高新技术,其通过计算机模拟虚构世界并使用外接传感设备使用户拥有极高的环境沉浸感。其雏形最初使用为军事目的,通过计算机模拟飞行数据传输至学员的头盔显示器,最终达到训练飞行员的效果。而如今发展受到大众的认可,功能面也从单一的训练演练拓展到规划展示、视听娱乐等等,
5、VR游戏则是其视听娱乐的其中一个发展方向。VR游戏是21世纪初的黑马,随着近期Half Life:Alyx(半衰期:爱莉克斯)的爆火,其超越时代的表现力向用户与开发者展示了VR游戏的巨大潜力与可能性。VR游戏所提供的视听体验所带来的震撼如3D电影一般远超一般的游戏所能感受到的,这是VR游戏带来的优势,也是开发者所面临的大事。VR游戏发展潜力巨大,市面上有众多VR游戏,但优质的数量却极其稀缺,是VR游戏发展不理想的主要原因。原有的游戏因为各种技术原因无法移植,而好的游戏需要大量的技术与时间投入,最终造成开发成本过高,大型企业不愿承担这样的风险,小型企业没有这样的技术实力导致了这样的开发怪圈。1.
6、1.2 VR游戏的意义Half Life:Alyx的成功,给VR游戏开发者带来的新的思路,对提升整个VR游戏开发圈有着先驱的意义。Valve带领的世界顶级的VR开发团队不仅给出了令玩家满意的答案,也给当下不温不火的VR游戏带来新的希望。对于开发者而言,VR游戏是重于交互还是重于体验的平衡讨论是永恒的。VR构建了未来游戏的全新前景,赋予用户身临其境的沉浸感,真正地使游戏从平面提升至立体,有理由相信随着技术的发展,单纯依靠键盘、手柄的操作模式将会成为历史,人的五官感受将替代这些原始的操作手段,届时三维游戏将成为视听娱乐的主流。1.1.3 研究内容简介本次游戏开发的主题是关于VR数学解密实验室,其主
7、要游戏内容为数独游戏,玩家通过已经展示的数字结合数独游戏规则完成数独游戏,与平时二维交互游戏不同的是本次使用STEAMVR来进行交互,玩家可通过抓取互动改变数字,或是像拼图一般抓取特定方片到特定位置完成游戏。为了帮助游戏的制作,本次开发研究内容主要分为一下几点1. 基于Unity使用C#制作游戏,为了让代码开发更加顺畅,结合C+封装dll使用,并且使用VRTK插件使得游戏制作更为简便,以降低自己编写的代码发生错误的概率。2. 针对游戏机制思考如何实现并进行设计。3. 使用自带商店提供的免费模型与自制模型。4. 完成开发,提升游戏质量至产品水准。第二章 Unity3D与VRTK插件介绍2.1 U
8、nity3D本章节将对Unity3D进行简单介绍,并介绍其开发优势以及简谈本次开发关于Unity涉及的部分2.1.1 Unity3D简介Unity3D是由Unity Technologies设计开发的综合型游戏开发工具,其能让用户轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容1。其对各类平台的兼容程度极高,可在Windows、Mac OS X上制作内容并将其发布至Windows、Mac、Ios以及Android等平台上。Unity3D版本更替频繁,每季度都会有相应大小补丁修复部分问题,但也可能因此无法兼容部分开发插件,为避免此类情况出现本文开发使用的版本为2018.3.1f1
9、。2.1.2 Unity3D的优势1.Unity3D是一个高度集成的引擎,其使用便利,如在一个场景中开发者可以突然地对其中一个模型的材质进行编辑,其仅需要选中该模型并右键选中材质编辑器即可。这种组件式的管理将开发者与操作对象关系变得更加紧密。2.测试预览即为实际效果,Unity3D允许在开发者制作完场景后即刻测试游戏的运行结果,且其运行过程中可以对对象进行编辑,编辑后的数据会在退出调试后复原至开始测试前的时期,这使得开发者在Debug过程中更能直观感受其游戏内容可能出现的各种问题。3.Unity3D提供了完整的开发生态圈,开发者不仅可以使用这个平台进行创作出售,还可以从中获得其他开发者的灵感,
10、其可拓展性高,能够支持大量自定义的第三方插件,学习参考不同的插件可以让人更好地解决问题,这是其他引擎难以做到的。2.2 VRTK插件2.2.1 VRTK插件简介与使用优势通常在Unity上开发VR游戏需要重新挂载所有与有关的VR脚本,从简单的手柄、摄像头脚本,到复杂的交互脚本,开发者需要为每一个需要交互的物体挂载交互脚本,这是一件简单却又繁琐的准备工作。于是VRTK集大统之合出现了,它加速了开发者在VR制作中从创意到实现的过程。VRTK全称为Virtual Reality Tookit,其前身为SteamVR Tookit。VRTK是一套简单易用拓展性高的工具集,它集合了众多VR开发所需要的功
11、能,并且支持众多主流VR设备的SDK,包括SteamVR、Oculus、GearVR等,使得开发者在选择测试设备的时候无需考虑更多。即便开发者的开发条件较差没有VR设备,VRTK仍然提供了一个VR模拟器与键鼠操作模拟了实际VR设备在游戏中的操作,这无疑大幅降低了VR游戏的开发成本。VRTK拥有很大的使用优势,其拥有的开源性质就使得开发者能够深入到代码内部,了解它们是如何与外部设备提供的接口交互的,最终达到从中学习到经验的目的。从另一方面来看,开发者还能够修改这些代码以实现原来所不能实现的功能。2.2.2 VRTK常用参数与脚本VRTK提供了大量已编写完毕的脚本供开发者使用,大体可分为以下三类1
12、. VRTK_Controller Events(手柄控制器事件):该脚本绑在控制器对象上,能够实时进行手柄按钮事件的监听,是一切后续交互脚本能正常运行的基础。2. VRTK_BasicTeleport(基础传送器):该脚本提供了至少4种移动方式的实现,其中瞬移与控制器面板移动是当前VR游戏最为常见的移动方式,瞬移类所需要的VRTK_SimplePointer一般由手柄控制器事件触发调用。3. VRTK_InteractableObject(可交互对象):该脚本可以说是VR游戏的基础,所有需要进行手柄互动的对象都需要挂载该脚本,该脚本可决定对象可否被抓取、使用等,它提供的接触事件也是许多游戏机
13、制触发的开始。第三章 游戏设计介绍本章节中将会提前构思游戏开发前期所需要做的工作,重点介绍游戏设计背景、游戏基本规则与游戏的功能需求等。3.1 游戏设计背景数学是人类最基础也是最重要的学科,社会的进步与数学的发展密不可分。早在古代,人们就运用数学作为工具去交易,从等量替换原理中发展了商业,又从商业中发展出了人类社会,继而产生了国家。近代,人类利用数学作为一门技术,结合数学原理发明了X射线断层扫描仪,极大增长了医学的发展。而现代,我们人早已将数学的本质物化为计算机的硬件与软件,数学早已成为了一种文化。本次游戏开发有着对数学致敬的意图,期望打造一个应用多种数学原理,互动性强的VR游戏。在众多的数学
14、趣味游戏中我最终选取了数独游戏进行研究与开发。3.1.1 数独游戏的历史数独游戏的历史悠久,其最早的原型为十八世纪的瑞典数学家莱昂哈德欧拉所发明的拉丁方块(Latin Square)的游戏,该游戏由一个N*N的数字方阵组成,其中的每一行(Row)与每一列(Column)均有1-N的数字存在且不重复,不难发现这就是数独游戏每个宫内所执行的两个规则。十九世纪一位美国人根据这种拉丁方块发明了一种填数趣味游戏,便成为了数独的雏形,再到20世纪日本学者将其介绍至日本并取名为数独,最后数独登上了英国的泰晤士报,并也由此风靡全球3。图3-1拉丁方阵图示图3-2现代数独图示3.2 游戏基本规则本段将额外简单地
15、介绍数独游戏的几类特别玩法,最后介绍标准数独的规则。3.2.1 数独的多种玩法数独是一款经典的逻辑解密游戏,通过纯粹的逻辑推理即可完成整片拼图,然而数独谜题有成千上万种不同的数列搭配组合,其中难度各异,有的也许数分钟内即可解出,并且答案不唯一,有的需要玩家绞尽脑汁从底层思考,其中一步填错都将影响正确答案。图3-3 传闻最难数独上图数独由芬兰数学家因卡拉(Arto Inkala)耗时三个月时间设计的号称世界最难数独,其终局为:8,1,2 ; 7,5,3 ; 6,4,99,4,3 ; 6,8,2 ; 1,7,56,7,5 ; 4,9,1 ; 2,8,31,5,4 ; 2,3,7 ; 8,9,63,
16、6,9 ; 8,4,5 ; 7,2,12,8,7 ; 1,6,9 ; 5,3,45,2,1 ; 9,7,4 ; 3,6,84,3,8 ; 5,2,6 ; 9,1,77,9,6 ; 3,1,8 ; 4,5,2这是该数独的唯一解,但是对于最难数独而言其实并没有一个分析标准。可以说“最难”的数独仍在不断被发现。接下来开始介绍变种数独的玩法。1. Irregular数独与常规9*9标准数独的3*3标准宫不同,不规则数独的宫以不规则形而成名,其网格也遵循填入格内的数字为1-N,其整体需遵守每行每列甚至每个不规则方框内都没有重复数字出现。图3-4 Irregular数独不规则的后果导致了每个宫特定格在代码
17、中都需要作出相应的变化,如上图一样固定变换顺序的设置仍可以确定,但由程序随机生成真实无规则图形实现难度将大幅提升。2. OddEven数独此变种数独与标准数独非常接近,不同之处在于数独的特定位置中标出了特定区域需要填入的数字奇偶性一致,相当于标准数独的规则加入了新的限定规则。图3-5 OddEven数独建议改为“图3-5 .“改全文该数独特定规则简易,可在生成完整随机数独时给特定宫的特定位置添加新的判定规则即可。关于变种数独的玩法介绍暂且到这里,其实除了单纯的数字数独,还存在着图形或是颜色占位的数独玩法,篇幅有限接下来开始介绍标准数独的游戏玩法。3.3.2 Classic数独的规则及其代码初设
18、计Classic数独又称经典数独,如图3-2这些和图标题一致吗所示,其游戏目的简单易懂:需要将数字填入空方格内,最终使得每一行,每一列,以及每一个3*3的宫内的都不出现重复的数字即可完成游戏。对于标准数独来说,数独谜题需要提供至少十七个数的提示数才可供玩家开始游戏,通常情况下提示的数字越多数独的解也越容易解出。需要注意的是,并非是17提示数就是最难的数独,难的数独谜题提示数的位置更为关键。现实数独解密有着非常多样的解题技巧,这些技巧使用的数学技能都十分巧妙与耐人寻思,更有些解题技巧需要依靠假设某些数字存在特定位置使得整个数独变为简单解而实现数独的解谜。而对于计算机而言,在绝对的计算速度面前意义
19、都不是非常大。计算机可以使用穷举的方法进行快速解题,同时也可以快速的生成完整的数独终局供人使用。在设计实现数独的实现代码时,笔者先设计了一个逻辑流程图,根据此图计划编写代码可保证代码逻辑正确:首先初始化各参数后建立空数组以存放数字,寻找未被使用的数字填入数组,检测填入的数字是否满足数组游戏规则,填入符合数字后检测数组是否被填满,填满后输出数组。如图3-6所示。图3-6 数独数组逻辑图穷举法采用检测某格插入1-9的数字,填入合法后再进行下一格的数字填入,向下推理直到某格无法满足要求,此时返回上级+1再次重推,直到整个数独终局完全推理完毕。从逻辑图来看,笔者首先需要做的是初始化并提前准备接下来开发
20、可能会需要用到的。因为我开发的是一款标准9*9的数独游戏,所以我会需要用到一个能存入81个变量的数组,而数独恰好是一个9*9的大型数组,很明显的是我们需要定位到特定的位置,此时我们需要一个二维数组。因此最终分析是我需要int mapp9,9的数组。在拥有有了数组以后我需要填入数字,并检测该数组是否合法才能填入,由此需要一个bool check来判定我是否能将这个数字“合法”地填入格子。以下为实现bool check所需要的判定代码:bool check(int x,int y,int num)/检测相同行内是否存在相同数字for(int i=0;i9;i+)if(mappiy=num&i!=x
21、)return false;if(mappxi=num&i!=y)return false;/检测宫内是否存在相同数字int row = x / 3;int col = y / 3;for (int i = row * 3; i (row + 1) * 3; i+) for (int j = col * 3; j 3D ObjectTerrian创建新的地形平面。在Terrain对象自身的编辑器附带了许多简单的功能,如绘制地面贴图Paint Texture、绘制地形高低的Raise or Lower Terrain,以及能够添加场景细节如树木、小草等按钮。但需要注意的是绘制所需要的贴图与模型都
22、需要提前添加。此处使用的素材来源于Asset Store下载的免费资源,如是自制的模型资源应当注意Unity3D是否支持而提前做好转换格式的准备。综合使用地形面板的各类按钮操作最终制作了如图所示的简易外景。图4-5简易外景图在外景搭建完毕后需要搭建玩家实际的游戏空间即内景。内景搭建常用方法有两种,一种为使用如3D Studio Max等三维建模软件提前构筑模型并载入使用;另一种为直接使用素材在Unity内直接构建场景模型。本处笔者使用第二者,并且考虑到游戏内容素材选用了较为明亮的金属板搭建了初步的游戏场景。图4-6简易内景图紧接着在内景内部放置一些其他的游戏物体用以丰富场景。图4-7丰富场景过
23、程4.3 玩家运动的实现在VR游戏中移动方式通常有两类,一种为以瞬移为代表的移动方式,另一种为使用手柄轮盘为方向轴的移动方式。根据用户的反馈,以方向盘的方式移动体验VR游戏极其顺滑,但也因此导致更容易出现晕眩的症状,因此主流的VR游戏会提供射线瞬移供用户使用。首先我们点开创建的VR模拟器内,找到对应的左右手柄对象。为其添加以VRTK_Controller Events为主的事件触发脚本,其中Interact类脚本功能以互动为主,若手柄上无此类脚本将无法实现抓取物品等操作,而Pointer类的脚本是实现瞬移移动的关键脚本,其分为几种:Straight Pointer与Simple Pointer
24、,Straight顾名思义最终会射出一条直线,而Simple则射出的是一条曲线。Simple所能移动的极限距离是有限度的,而这个限度可以在右边参数设置。图4-8为左右手柄挂载对应脚本接下来挂载VRTK_Policy与VRTK_HeightAdjustTeleport脚本,使用前者的目的是为了提供可瞬移目标的范围,而后者则是因为其提供了高度概念的瞬移,若使用VRTK_BasicTeleport则只可进行基础高度的瞬移。使用Policy的Operation规则设定为Includes包含规则,并添加tag名。并将需要的可瞬移区域tag均设定为该tag即可实现图4-9的效果。图4-9设定瞬移“白名单”
25、图4-10 符合tag类型的可以瞬移4.4 数独游戏的实现在制作Unity3D的数独之前我已经先行使用C+编写了可行的数独终局生成代码。而Unity3D的脚本仅能支持基于MONO支持的几种编译器编写,其中并不包含C+,因此需要找到解决方法。笔者在查询后得出了两种解决方案,第一种是将C+编写的代码重新编写接入出口并注册为Dll放入Unity3D内使用,初步测试时未发现问题,然而到完整编写后出现数组越界的问题,不得已使用第二种方案。第二种解决方案非常简单,将C+的代码重新使用C#语言去解释。以下大概展示其基本的不同处:在使用C+的时候用于定义的方法为int mapp99,使用这样的即可立即定义一个
26、名为mapp容量为81的二维数组。而在C#的编译器下却因为未知的原因无法定义。最终采用int mapp,=new int9,9来定义一个9*9的二维数组。第二个不同之处在于C+可以直接声明定义数组的大小,而C#中定义数组大小,无论其是bool还是int均需要使用new的表达式去重新声明才行。图4-11两者定义方式不同第二处不同的地方在于初始化方式不同,在C+当中笔者可以使用memset初始化函数将所有使用过的数字状态全部回归为未使用以供接下来重新使用并杜绝检测出错。而C#当中并没有这类方法,因此只能将所有数字状态手动复位。在Random随机数上的使用方法稍有区别,C#中生成的随机数必须限定范围
27、,而C+中生成限定范围的随机数需要使用特定的公式才可达成,其公式为:若要取得(a,b)的随机整数,需使用(rand()%(b-a)+a;若要取得a,b的随机整数,需使用(rand()%(b-a+1)+a;若要取得(a,b的随机整数,需使用(rand()%(b-a)+a+1;且在C+使用随机数时通常需要搭配srand()使用来初始化随机数,否则每次rand()生成的随机数会相同。而在Unity中Random.Range()中的种子若无设定则每次都不会相同。在解决了这几处问题后,来到最后一步也是最为关键的一步是给出提示数。我需要在数独组中标出特定位置的数字将其屏蔽并最终重新输入到数组中,这也是为什
28、么在一开始的时候就定义了两个数组的原因。生成屏蔽数组的代码如下:void shieding()for(int i=0;i3;i+)for(int j=0;j3;j+)int n = UnityEngine.Random.Range(9,109) % 9+1; /最小数大于9的原因是让余数尽可能少的小于1int row = i*3;int col = j*3;/此处选中的行与列不得超过9*9,否则会出现数组越界While(n!=0)int c = UnityEngine.Random.Range(1,18)%3;int r = UnityEngine.Random.Range(1,18)%3;s
29、how_maprow+c,col+r=0;n=n-1;此处实现的原因是因为完整的数独终局有数种特定的规则,其中一种即不同的行列可以向不同的方向进行不重复数字的平移。而另外一种是随机选中其中不同位置的数字将其屏蔽,即达成最低17提示数即可满足数独游戏的解题要求即可。根据这种理论最终我选中第二个方案并很快就实现,因n每次都会在0-10内随机变动,直至某次为0终止填入,其显示的提示数大于17的可能性极大。若要增加难度则可将其变为0的可能性降低更多。最后测试输出经过shieding()后的数独组是否可行。在脚本的Start()函数下编写以下代码运行即可查看结果:For(int i=0;i9;i+) f
30、or(int j =0;j9;j+)Debug.log(show_mapj,j); /遍历输出数组到控制台查看结果图4-12 shieding后输出数组可见其总计为81,并且提示数(非0数)明显大于17的最低标准,因此该数独为可解的。但因其随机屏蔽的原因,很可能最终完成的数独终局未必与原来相同。在确定新的数独完成后接下来要做的事情是将该数组填入游戏内。4.4.1 载入数组前的准备在将上节完成的数独填入游戏前需要做前期准备以适配VR操作。首先先新建一个简单的三维模型,此处为自带的cube方块并调整形状为方块按钮形,因为它是3D物件,不能挂载在Canvas内使用的text脚本,因此需要在下面建立一
31、个空的子物体命名为New Text,并为其挂载Text Mesh达成显示文本的目的。图4-13创建如图的物体接下来为新建的cube物体添加VRTK脚本,选中菜单栏中的Window栏目,找到选项VRTK下的Setup Interactable Object,并在新出现的菜单中为该物体进行初步设定。图4-14为物体添加VRTK脚本图4-15进行初步设定菜单菜单中只需要关注其中几项比较关键的,笔者将从上至下开始讲解。首先是第一项Touch Options,在接触设置中暂时只有Touch Highlight,该项将使玩家接触物体后高亮该物体,但是其高亮形式是全部高亮,最终会覆盖子物体上字体的显示,因此
32、需要做出后续的改动以让它的高亮范围减至边框,本处调整为需要的颜色即可。第二项Grab Options允许玩家是否可以抓取该物体,第一个为启用选项,第二项将改变抓取为长扣扳机才能抓取物体,本处使用默认设置。第三项Use Options允许玩家是否可以“使用”该物体,常见使用方式为抓取后再次扣动扳机运行相应脚本,本处需要勾选Is usable与Hold Button To Use,即该物体可使用,并且使用方式为长扣使用键才可使用,其中第二项非常重要影响着后面游戏操作流畅度,后文将解释原因。在做完初步设定后点击按钮即可自动为物体绑定各类脚本,并提供更详细的设定。在设置完基础设定后继续解决前面高亮的问
33、题,我将为该物体新添VRTK_Outline Object脚本使得其高亮范围减至边框。如下图所示左边为添加脚本后的显示效果,这样设计的美感。图4-16高亮效果对比创建完这个物体后将其保存即可,此处可编写接触使用代码进行先行测试。为该物体编写脚本概要如下: public GameObject CB;/指定物体在Start()函数内:CB = GetComponent().gameObject;此处自动为CB绑定为该脚本下的物体,无需之后自行绑定。又在Update()函数中编写:if (CB.GetComponent().IsUsing()Debug.log(“在使用”);即可达到在手柄靠近使用物
34、体的时候出现Debug信息“在使用”,此处可以感觉到在扳机松开(在电脑为键位松开)之后才会显示该段信息,而如果在前面设置中将Hold Button To Use取消勾选的话测试结果会显示为扳机松开并不会出现信息,而是知道手柄离开可接触表面的时候才会出现的情况。4.4.2 将数独数组载入游戏在前面准备完全后,将新建一个空物体并放入81个上节创建的预制体并命名为sdxx,其中xx为数组9,9大小的二维方向定义,然后在Unity内排列好位置即可。图4-17 创建对象组为如图所示的GameObject空对象绑上编写好的数独创建脚本,新建一个string xx和public GameObject TM用
35、以定位文本对象与获取数独并转换为文本内容,并在Start()内新添加如下代码:for(int i=0;i9;i+)for(int j=0;j9;j+)int x = i+1,y=j+1;TM = GameObject.Find(“sd”+x.ToString()+y.ToString()+”/”+”New Text”);xx = show_mappi,j.ToString();TM.GetComponent().text = xx;本段代码使用GameObjcet的功能Find首先定位在sdxx下的子物体New Text,并使用GetComponent获取New Text中上节已经为其绑定的T
36、extMesh功能,通过直接获取数组并转换文本后赋予,最终实现了将数独数组完整的载入游戏内的功能。图4-18 输出结果4.4.3 实现修改数字功能通过修改4.4.1节的测试代码来实现本节功能。首先新建函数zeroInTest()并使用上节代码获取当前文本下的数字并确定IsZero状态,设定bool IsUsing = false来确定手柄使用的状态,bool IsZero来确定该当前数字是否为0,int SZ来保存数字,然后在Update()函数中新增如下代码:if (CB.GetComponent().IsUsing()IsUsing = true;zeroInTest();if(IsUsi
37、ng)if(CB.GetComponent().IsUsing()=false&IsZero=true)SZ+;IsUsing = false;If(SZ9)SZ = 1;TM.GetComponent().text = SZ.ToString();效果下图所示图 4-19上下图对比最终实现仅有开场为0的数字的位置可进行修改而有设定初始数字的提示数不能修改的效果。至此整个数独游戏的制作基本接近尾声,其需要补充的新内容与功能也能很快加入实现。第五章 游戏效果与测试在本章节中将完善游戏内容,从增加终局判定,音乐,到加入游戏UI入手。5.1 终局完成判定及音乐效果首先载入游戏素材,在场景内新建空物体
38、并为其添加Audio Source组件,在右侧菜单中的AudioClip选中相应的音乐素材后即刻完成。我准备了几段音乐供数个场景阶段使用,第一是启动的开始菜单场景时,第二是游戏场景,第三是完成数独的时候播放的胜利阶段。其中第一与第二的使用方式相同,仅需要放置后默认播放即可,胜利阶段需要编写胜利条件代码并调用即可使用,以下为步骤:如4.4.1一样先制作一个可交互按钮命名为Fin,为其绑定判定数独是否正确完成的脚本,脚本逻辑伪代码如下:Bool Fincheck = false;Void Finmap()获取当前数独的数组并输出为Finmapp,Bool Check()用获取的数组代入判定函数内检查是否合法并让Fincheck为trueVoid Update()if(Fincheck)播放胜利音乐图5-1 成功效果(正确播放了音乐)5.2 UI、跳转场景Unity3D在制作中常使用Canvas来制作UI,但是使用了VRTK时,开发者可以将Canvas放置在HeadsetFllower中,好处是生成的Canvas页面会自动的显示在玩家视线前不远的地方,并且手柄发射的射线
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物联网视角下初中音乐课程创新教学设计与实践论文
- 初中数学教学中学生解决问题策略的培养研究论文
- 艾玛克卫生管理制度
- 苗木培植部管理制度
- 茶艺室规章管理制度
- 评估项目的模拟试题及答案解析
- 角同步训练 人教版七年级数学上册 (一)
- 角膜病变患者康复期心理干预的效果评估
- 设备维保服务合同(3篇)
- 设施大樱桃栽培与病虫害防治百问百答阅读记录
- 《建筑工程消防施工质量验收规范》
- 专业方向证明
- 移液器自校准SOP
- Python入门基础教程全套课件
- 接触网工程施工方法及技术措施
- 天津大学年《仪器分析》期末试题B及答案
- 工业纸板(瓦楞纸箱企业)全套管理规章制度汇编(组织架构、岗位职责说明、企业制度)
- 中考扬州历史复习资料
- 气候类型及自然带知识归纳表
- 餐饮销售技巧八步骤精讲PPT课件
- 利川市城市规划区集体土地上房屋征收补偿办法
评论
0/150
提交评论