3D手机投篮游戏
![3D手机投篮游戏_第1页](https://file4.zhuangpeitu.com/fileroot4/2022-6/19/30709d27-0d0b-4adc-906e-4a9c7757a7ae/30709d27-0d0b-4adc-906e-4a9c7757a7ae1.gif)
![3D手机投篮游戏_第2页](/images/s.gif)
![3D手机投篮游戏_第3页](/images/s.gif)
《3D手机投篮游戏》由会员分享,可在线阅读,更多相关《3D手机投篮游戏(46页珍藏版)》请在装配图网上搜索。
1、3D手机投篮游戏 专业:数字多媒体 班级:计113 姓名:管振华 指导老师:刘江 摘要 随着触屏智能手机的普及,越来越多的手机游戏变成年轻一代中打发空余时间的不二之选了。以前是越来越离不开电脑,现在手机也步入离不开的科技产物之一了。以前2D的画面比较受人追捧,到了现在3D的画面感已经俘获了越来越多人的心。题材我选择了篮球,因为篮球被大家所熟知,特别现在工作节奏越来越快,打篮球有些时候也是一种奢侈的事情,所以开发了这个小游戏。 软件是在unity3d这个开发平台上进行操作的,利用其中MonoDevelop这个语言开发平台进行编程,利用C#和java脚本进行编程。此款游戏支持在安卓设备
2、上运行,利用手指的触摸效果进行投篮,球随着手指划动的方向飞行,并且速度越快力道越大。进球会自动计数,在60秒之内会有一个分数,并且记录对应的时间点和分数的数据。 关键词 unity3d MonoDevelop C# java 安卓手机投篮游戏 触摸 The 3D mobile phone game basketball pitch Profession:Digital multimedia Class:ji113 Name:Guan Zhenhua Instructor:Liu Jiang Abstract With the popularity of smar
3、t mobile phone touch screen,More and more mobile phone game into sent spare time young generation of choice.Before is more and more cannot do without computer,now the mobile phone also entered one of the product technology cannot do without.2D picture is the one pursued before,now 3D picture has cap
4、tured the hearts of more and more people.The subject I chose basketball,because basketball is known.Especially now work in an increasingly fast pace. Play basketball sometimes is a luxury thing, so the development of this game. The software is operated in the unity3d development platform, and using
5、 MonoDevelop development platform which the language for programming, the use of C# programming and Java scripting.The game runs on Android devices support.The use of fingers touch effect for shooting.The ball with the fingers paddling the direction of flight, and the faster the greater force.The go
6、als will automatically count, in 60 seconds. There will be a fraction, and record the corresponding time point and the fraction of data. Key words unity3d MonoDevelop C# java Android mobile phone shooting game touch 目录 引 言 1 第一章 概述 2 1.1 课题背景 2 1.2 功能简介 2 第二章 游戏的策划及准备工作 3
7、 2.1游戏的开发引擎以及语言介绍 3 Unity3D介绍 3 C#语言介绍 3 的介绍 3 2.2 游戏的策划 4 2.2.1游戏类型 4 运行平台 4 目标人群 4 操作方法 4 呈现技术 4 2.3游戏的准备工作 5 游戏中图片资源 5 游戏中声音资源 6 游戏中模型文件列表 7 第三章 游戏的架构 8 3.1游戏的界面简介 8 主菜单界面 8 游戏界面 8 关于界面 8 帮助界面 9 游戏结束界面 9 设置界面 9 记录界面 9 3.2 游戏架构简介 10 第四章 游戏详细设计 11 4.1 主菜单界面 11 4.2游戏界面 14
8、游戏场景的搭建 14 篮球及脚本的开发 15 计分触发器的开发 17 主摄像机设置与脚本开发 20 4.3设置界面 21 4.4关于界面 23 4.5帮助界面 25 场景搭建 25 篮球脚本的开发 26 计分触发器的脚本开发 28 主摄像机的脚本开发 29 4.6记录界面 31 4.7结束界面 37 第五章 游戏运行测试 39 5.1游戏测试的目的和意义 39 5.2 游戏运行测试内容 39 结 论 40 参考文献 41 致谢 42 引 言 手持端的工具随着社会的发展越来越先进,从刚开始的大哥大、呼机到现在的智能手机、平板电脑。随着硬件的逐步
9、更新,软件也是在时刻的更新的。软件里面有很多的领域,包括即时聊天工具,文档处理工具以及游戏等。现在,人们的日常生活都离不开这些相关的手机app,打发空余时间利用小游戏,工作利用办公的app。手机游戏在日常生活中占用的比例还是很大的,因为群众具有自发性。游戏是人自发的去玩,而办公软件是属于工作需求。一个是被动一个是主动,所以在市场的需求上面,游戏还是占有主动性。但是办公软件开发难度大,成本高,所以很多新兴的科技公司会着力于开发一些游戏app。目前最流行的系统非Android莫属,其次是ios。当然世面上的游戏基本都有两个以上的版本,Android和ios都会有。现在世面上的游戏种类繁多,但是真正
10、名利双收的并不多。有以下几个因素。第一,玩家的体验感决定游戏是否可以拥有更多更稳定的客户群。刚开始比较火的游戏是叫愤怒的小鸟,这款游戏采取了关卡的制度。具有挑战性,可以体现用户的某一种优于旁人的特性,分高的会引来一些崇拜者。第二,游戏本身的难度问题。一般的游戏都是从低到高的难度来的,如果游戏本身就很难玩的人自然会少,就像数独。如果本身游戏就很简单,玩的人就会更少。第三,游戏的时长问题,更多的手机用户更加乐意花较少的时间去玩手机游戏。据统计,一般人群的手机游戏时间是10-15分钟,这个属于碎片时间。所以游戏开发者要在10-15分钟的时间里面体现出游戏的一些特点,吸引住用户。 目前,用户对于画面
11、感的要求越来越高,随着3D电影的大幅推广,越来越多的开发者以及用户也把游戏市场推向了3D的层面。这次的毕业设计创作了3D手机投篮游戏这么一个项目,也是让自己更加熟悉3D游戏的创作,借助一些当前比较流行的开发引擎,根据自己的想象,做一个尽量满足当前社会需求的游戏软件。游戏本身是运行在Android这个当前流行的系统之上,拥有比较庞大的用户群。游戏相对简单,只通过人的想象,掌握好角度力度就可以将球投出去,但是如果需要命中还是需要一定的技巧的,这个就是跟真正的篮球一样,吸引人的地方。在60秒的时间内,如果投入的球越多也就分值越高,这个是挑战人的地方,也可以更好的留住用户。 第一章 概述
12、 1.1 课题背景 在当代的广大青少年群体中,篮球运动已经成为了青春、时尚、活力的象征。3d手机投篮游戏使用了当下非常流行的3D游戏引擎Unity3D进行开发。玩家在游戏中会体验投篮带来的无限乐趣。在这个手持设备横行的时代,人们的日常工作生活的节奏也很快,每一个人也都有碎片的时间,大部分人都会把碎片时间利用在手机游戏上面,篮球是一项发源已久的运动,每个人都知道这么一项运动,也会有很多人会去接触这项运动,所以开发了这么一个手机投篮的游戏,因为自己也比较爱好篮球。开发的时候用户需求,开发中存在的问题也更加容易解决。 1.2 功能简介 (1)运行游戏,首先进入的是unity自带的欢迎界面。
13、(2)随后进入本游戏的主界面,里面有6个按钮,对应6个界面,单击进入相应界面。 (3)在主界面中选择“开始游戏”按钮,进入游戏开始的界面。进入之后,游戏的左上角为分数,右上方为时间剩余。在界面当中,玩家可以选择一个球进行投射,利用手指进行拾取,根据自己想滑动的方向滑动,并且作出位移,球会随着手指的离开而投出去。 (4)当时间计数器归零之后,游戏结束,自动切换menu界面。单击“再来一次”按钮,继续游戏;单击“返回菜单”按钮,返回welcome界面;单击“退出”按钮,退出游戏。 (5)在主界面选择“设置”按钮进入设置(Options)界面。该界面的主要功能是控制背景音乐和场景音乐的播放。在
14、对应的方框内打勾,并且按确定,设置完成。 (6)在主界面中。单击关于,显示游戏对应的版权信息。单击“确认”或者“返回”按钮,返回主界面。 (7)在主界面中,单击“帮助”按钮,进入帮助界面。帮助的相应动画会循环播放。 (8)在主界面单击“记录”按钮,进入游戏的历史记录界面。在该界面单击“TIME”图标,显示按时间排序的分数记录信息。在该界面的“GRADE”图标,显示按分数排序的分数记录信息。在该界面中,单击“确认”和“返回”按钮返回主界面。 (9)在主界面中单击“退出”按钮,退出游戏。 第二章 游戏的策划及准备工作 2.1游戏的开发引擎以及语言介绍 Unity3D介绍 Unit
15、y是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Wi
16、ndows的网页浏览。它的网页播放器也被Mac widgets所支持。 MonoDevelop 是个适用于Linux、Mac OS X和Microsoft Windows的开放源代码集成开发环境,这个开发环境也被运用在了Unity3D当中,其中包含了多种语言,包括java、C#等 C#语言介绍 C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编
17、译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。 C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。 C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSO
18、FT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。 C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。 的介绍 Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是电影级别的高端制作软件. Maya 集成了A
19、lias、Wavefront 最先进的动画及数字效果技术。它不仅包括一般三维和视觉效果制作的功能,而且还与最先进的建模、数字化布料模拟、毛发渲染、运动匹配技术相结合。Maya 可在Windows NT与 SGI IRIX 操作系统上运行。在目前市场上用来进行数字和三维制作的工具中,Maya 是首选解决方案。 2.2 游戏的策划 本游戏是使用Unity3D游戏引擎作为开发工具和C#脚本作为开发语言开发的一款休闲体育游戏。 本游戏运行的平台为Android 2.0或者更高版本。 投篮游戏操作简单,界面具有感染力,采用手持设备作为载体,适合各个阶段的人群在碎片时间进行娱乐,尤其是
20、热爱篮球的人群。 玩家手指触碰篮球(3个篮球之间的任意一个),球会随着你手指滑动的方向以及位移的大小给予一定的初速度和角度,当球投进时,分数加1,如果球没进可以继续投,60秒时间到,游戏结束。 本游戏使用的是Unity的场景建设技术,利用模型、贴图、灯光以及游戏脚本的开发,实现了游戏的整体开发。 2.3游戏的准备工作 表2-1 游戏中的图片资源 图片名 用途 图片名 用途 quedinganniu.png 确定按钮 retry.png 再试一次按钮 shezhi.png 设置按钮 shijianbeijing2.png 排行榜按时间排序背景图
21、 shou.png 手动画 shut.png 退出按钮 stop.png 停止按钮 swall1.jpg 左墙面纹理 swall2.png 中间墙面纹理图 swall3.png 右墙面纹理 timegradebejing.png 排行榜按时间排序背景图 yibiaoban.png 计分计时仪表板 hengxian.png 横线 housegou.png 勾 icon.png 应用程序图标 Jilu.png 记录按钮 jo.png 记录界面文字背景 lanban.png 篮板纹理 maohao.png 冒号 number.png
22、 数字 pause.png 暂停按钮 play.png 播放按钮 fanhuianniu.png 返回按钮 fanhuicaidan.png 返回菜单按钮 floor.png 地板的贴图 guanyuwenzitu.png 关于界面文字 gundongtiao.png 滚动条 Help1.png \ 帮助按钮 图片名 用途 图片名 用途 about1.png 关于按钮 bangzhu.jpg 帮助界面的帮助文字 background.jpg 主菜单背景 Bangzuwelcome.jpg 加载界
23、面的背景 baisefangge.png 声音设置界面的方框 baseketball.ipg 篮球纹理 Baisewaikuang.jpg 关于界面的背景 Basketnet2.png 篮网纹理 begin.png 开始按钮 beijingyinyu.png 背景音乐文字 changjinyinyu.png 场景音乐文字 d0.png 数字0 d1.png 数字1 d2.png 数字2 d3.png 数字3 d4.png 数字4 d5.png 数字5 d6.png 数字6 d7.png 数字7 d8.png 数字8
24、d9.png 数字9 dialog.png 对话框背景 表2-2 声音资源列表 声音文件名 用途 声音文件名 用途 beijingyinyu.mp3 背景音乐 levellend.ogg 游戏结束音效 pengzhuang.ogg 篮球碰撞音效 shoot.ogg 篮球发射音效 游戏中模型文件列表 表2-3 模型文件清单 文件名 用途 文件名 用途 Lankuang3.FBX 篮框模型 sdds.FBX 篮网模型 第三章 游戏的架构 3.1游戏的界面简介
25、 在Unity中,游戏场景是游戏中不可缺少的部分,此款游戏也具有以下7个界面。 主界面的“welcome”是转向各个场景的中心场景,在该界面中可以通过单击按钮进入其他的界面,如游戏界面、设置界面等。 该场景中的主摄像机“main camera”被挂载了脚本“mainmenu.cs”,背景音乐控制器“BgMusicControl”主要用来控制背景音乐的停止和播放,该游戏对象被挂载了“BeginApp.cs”脚本。 游戏界面“basketball”是本游戏的核心界面。这个界面中的多个游戏对象被附加了相应的脚本。该界面中包含的游戏对象有篮球、主摄像机、篮板、篮篮框、篮网、墙壁、计分触发
26、器、透明墙。 (1) 篮球。 该场景中的篮球“ball0”、篮球“ball1”和篮球“ball2”都挂载了“ball.cs”脚本,主要实现篮球的拾取、发射和碰撞音效控制。 (2) 主摄像机 主摄像机“main camera”,挂载了“CamScript.cs”脚本,该脚本的功能主要为实现在触摸下改变该场景的视角。 (3) 计分触发器平面 计分触发器“trigger”,位于篮筐内部,用于篮球投中时触发来记录分数,其挂载了脚本“Score.cs”。 关于界面“about”用于显示相关的版本与版本信息。场景中主摄像机“main camera”挂载了脚本“about.cs”,其功
27、能是为了显示版权的相关信息,另外还包括“确定”和“返回”按钮的时间方法。 帮助界面“help”是显示帮助信息的场景,该场景是在“basketball”场景的基础上加以修改而成的。该界面包含游戏组成对象有篮球、主摄像机、篮板、篮圈、篮网、左中右墙壁、计分触发器、透明墙,这个场景中也有多个对象被挂载了相应的脚本。 (1) 篮球。 篮球“ball”、篮球“ball1”、篮球“ball2”都被挂载“HelpBal.cs”脚本,脚本主要功能为实现篮球的自动发射。 (2) 计分触发器。 计分触发器“trigger”,在“help”场景中,用于触发计分,其挂载了脚本“HelpScore.c
28、s”。 (3) 主摄像机 主摄像机“main camera”,被挂载了脚本“help.cs”。该脚本用于显示帮助文字,还包含了“暂停”和“停止”按钮的事件处理方法。 游戏结束界面“menu”,会在游戏的界面的时间耗尽时自动切换出来。主摄像机“main camera”附加了脚本“Menu.cs”。“menu.cs”脚本的主要功能为显示“返回菜单”按钮、“再来一次”按钮和退出按钮以及处理各个按钮的事件。 设置页面“options”中的主摄像机“main camera”附加了“option.cs”,该脚本的主要功能是控制背景音乐和场景音效的播放设置以及设置信息的存储。 记录界面
29、“records”的主摄像机“main camera”附加了“record.cs”,主要功能为按照时间和分数的计分信息排序。 3.2 游戏架构简介 打开游戏,进入主界面“welcome”,主摄像机“main camera”被激活,挂载的“mainmenu.cs”和“BeginApp.cs”脚本开始执行,显示主菜单界面。 在主菜单中单击“进入游戏”,进图游戏场景“baseketball”,该场景的主摄像机被激活,其上挂载的脚本“CamScript.cs”执行,界面被绘制。 当玩家触摸一个静止的球时,在脚本“Ball.cs”的作用下,球被赋予你一个初速度,球在初速度的作用下,按照手指
30、所偏向的角度进行投球,如果球进,触发计分触发器,计分触发器在“Score.cs”的作用下,实现计分,同时“score.cs”脚本还有自动倒计时的功能。 在主菜单的中单击“设置”按钮,进入设置界面“options”,该场景的主摄像机被激活,挂载的“option.cs”开始执行,绘制设置界面。 在主菜单中单击“关于”按钮,进入关于界面,该场景的主摄像机被激活,挂载的脚本“about.cs”开始执行,绘制关于界面。 在主菜单中单击“帮助按钮”,该场景的主摄像机被激活,其上挂载的脚本“help.cs”开始执行,然后,开始绘制按钮和帮助文字以及记分板。篮球在脚本“helpball.cs”的作用下,
31、自动发射,触发到计分触发器时,计分触发器在“HelpScore”脚本的作用下,实现计分。 在主菜单中单击“记录”按钮,该场景的主摄像机被激活,其附加的脚本“Record.cs”开始执行,绘制得分记录界面。如图3-1。 图 3-1游戏架构图 42 第四章 游戏详细设计 4.1 主菜单界面 (1) 新建场景,命名为“welcome”。 (2) 将对应的图片资源放入相应的文件夹中。 (3) 把“Main Camera”进行标签命名,在tag中的“Element10”中填入“themain”,如图4-1所示。 (4) 单击“Main Camera”,在属性查看器中,单击“t
32、ag”下拉列表,选择“themain”,作为主摄像机标签。如图4-2所示。 图4-1 图4-2 (5) 创建脚本文件“MainMenu.cs”。并且将脚本拖拽到游戏对象“MainCamera”上面。 此代码实现了屏幕自适应,以及页面背景和按钮功能的实现,实现了页面跳转功能。 void Start(){ wbili=Screen.width/540.0f; hbili=Screen.height/960.0f; /** *屏幕自适应 */ x=(Screen.width-240
33、)/2.0f; //获得按钮的横向起始位置 y=170.0f;//纵向首个按钮的起始位置 } void OnGUI(){ if(Tex!=null){ GUI.DrawTexture(new Rect(0,0,540*wbili,960*hbili),Tex); } if(GUI.Button(new Rect(x,y*hbili,240,100*hbili),bu1,MyStyle)){ Application.LoadLevel("basketball"); } if(GUI.Button(new Rect
34、(x,(y+90)*hbili,240,100*hbili),bu2,MyStyle)){ Application.LoadLevel("options"); } if(GUI.Button(new Rect(x,(y+90*2)*hbili,240,100*hbili),bu3,MyStyle)){ Application.LoadLevel("about"); } if( GUI.Button(new Rect(x,(y+90*3)*hbili,240,100*hbili),bu4,MyStyle)){ Application.LoadLev
35、el("help"); } if( GUI.Button(new Rect(x,(y+90*4)*hbili,240,100*hbili),bu5,MyStyle)){ Application.LoadLevel("records"); } if( GUI.Button(new Rect(x,(y+90*5)*hbili,240,100*hbili),bu6,MyStyle)||Input.GetKeyDown(KeyCode.Escape)){ Application.Quit(); /** *以上实现各个页面的跳转 */ } }
36、 } (6) 创建音乐背景控制器。创建一个空的游戏对象“BgMusicControl”,同时添加“music”标签。并且在这个空的游戏对象上面添加一个Audio Source组件(在相应的声音文件夹中)。如图4-3。 图4-3 (7) 创建脚本文件“BeginApp.cs”,此脚本实现功能主要是控制背景音乐的播放,并且将此代码拖曳到“BgMusicControl”上。 void Start(){ playFlag=PlayerPrefs.GetInt("canplay"); if(playFlag==1){ MyAudioSource.Play
37、(); isPlaying = true; } } void Awake(){ DontDestroyOnLoad (transform.gameObject);//加载其他场景时保证Gameobjct 不销毁。 } void Update () { playFlag=PlayerPrefs.GetInt("canplay"); if(playFlag==0){ isPlaying = false; } else if (playFlag == 1 && !isPlaying){ MyA
38、udioSource.Play(); isPlaying = true; } GameObject[] gos = GameObject.FindGameObjectsWithTag("music"); if(gos.Length>1){ Destroy(gos[1]); } } /** *音效控制功能的实现 */ 4.2游戏界面 创建游戏场景“baseketball”,并且添加环境光、模型(贴好图),让游戏界面基本成型。这里边有篮球、篮框、球网、地板、墙壁、灯光、透明的阻挡墙等组件。如图4-3。
39、 图4-4 (1)建设好必要的场景文件之后,就是脚本代码的书写。“Ball.cs”中前面要先进行变量的声明和“start”方法的重写,在方法中获取音效设置信息,并设置3个球之间不进行碰撞检测,脚本代码如下。 void Start () { yinxiao=PlayerPrefs.GetInt("yinxiao"); Physics.IgnoreCollision(ballpre1.collider, collider); Physics.IgnoreCollision(ballpre2.collider, collider); } /**
40、 *变量声明以及控制球之间不要相互碰撞 */ (2) 球的“update”方法,这个方法定义了球可以被拾取并且发射,脚本代码如下。 void Update () { foreach(Touch touche in Input.touches){//对触控事件遍历 RaycastHit hit;//定义拾取射线触碰对象 if(touche.phase==TouchPhase.Began){ xzFlag=false; //指定拾取射线 if(Physics.Raycast(ray,out hit,Mathf.Infinity,m
41、ask.value)){ if( &&transform.position.y<=11.1) /** *可拾取的范围 */ { xzFlag=true; }}} else if(touche.phase==TouchPhase.Ended){ if(xzFlag){ if(yinxiao==1){ neShot(MyAudio); }//音效可播放 rigidbody.WakeUp();
42、 float delatex=(endX-startX)/300.0f;//计算触摸的位移 并转化为可用值 float delatey=(endY-startY)/300.0f; if(delatex<=1&&delatex>=-1){ alpha1=Mathf.Abs(delatex); }else{ alpha1=1; } if(delatey<=1&&delatey>=-1){ alpha2=Mathf.Abs(delatey); }else{ alpha2
43、=1; } if(delatey>0){ if(delatex>0){//发射角偏右 this.rigidbody.velocity=new Vector3( minXsp+(maxXsp-minXsp)*alpha1,minYsp+(maxYsp-minYsp)*alpha2,zSpeed); } if(delatex==0){ //给予y轴和z轴初速度 } if(delatex<0){//发射角偏左 }}}}} if(Input.GetKeyDown(Ke
44、yCode.Escape)){ Application.LoadLevel("welcome"); } } (3)碰撞音效的控制。 void OnCollisionEnter(){ if(yinxiao==1){ / } (1) 创建“Plane”对象,命名为“trigger”。如图4-5。 图4-5 (2) 编写计分触发器脚本“Score.cs”,并且将此脚本拖曳到对象“trigger”上。首先是变量的声明,然后是Start方法和Awake放发以及OnTrigger事件的重写。这两个方法和事件在特定的情况下分别被调
45、用和触发,脚本代码如下。 void Start () { wbili=Screen.width/540.0f; hbili=Screen.height/960.0f; InvokeRepeating("Countdown",1,1);//1秒后调用Countdown函数,之后每1秒调用一次 } void Awake(){ currentDate=PlayerPrefs.GetString("date"); currentScore=PlayerPrefs.GetString("score"); } void OnTrigger
46、Enter() { score++; } (3)倒计时的方法以及其取消调用。 void Update () { if(timeLife < -1){ CancelInvoke(); } void Countdown(){ timeLife--; } (4) 接着需要重写OnGUI方法,实现系统时间和得分信息的存取。在绘制方面还实现了仪表板和得分与时间的实时绘制,脚本代码如下。 void OnGUI (){ GUI.DrawTexture (new Rect (0, 0, 540*wbili, 150*hbili),textureTo
47、Display); if(score<=9){ tempTexture=scores[score]; GUI.DrawTexture (new Rect (100*wbili, 48*hbili,22*wbili,80*hbili),tempTexture); }else{ GUI.DrawTexture (new Rect (100*wbili, 48*hbili,22*wbili,80*hbili),scores[(score%10)]); GUI.DrawTexture (new Rect (60*wbili, 48*hbili,22*wbili,
48、 80*hbili),scores[(score-score%10)/10]); } /** *得分绘制 */ if(timeLife<=0){ GUI.DrawTexture (new Rect (460*wbili, 48*hbili ,22*wbili, 80*hbili),scores[(0)]); }else if(timeLife<=9&&timeLife>0){ GUI.DrawTexture (new Rect (460*wbili, 48*hbili ,22*wbili, 80*hbili),scores[(timeLife)]);
49、 }else{ GUI.DrawTexture (new Rect (460*wbili, 48*hbili ,22*wbili, 80*hbili),scores[(timeLife%10)]); GUI.DrawTexture (new Rect (420*wbili, 48*hbili,22*wbili,80*hbili),scores[(timeLife-timeLife%10)/10]); } /** *得分绘制 */ if(timeLife==0){ timeLife=-3; now=DateTime.Now;
50、 var temps=((now.Month+"").Length==1?("0"+now.Month):(""+now.Month))+"-" +((now.Day+"").Length==1?("0"+now.Day):(""+now.Day))+" " var tempdate="*"+temps+currentDate; PlayerPrefs.SetString("date",tempdate); var tempscoe= "*"+((score<=9)?" "+score:""+score)+currentScore; Playe
51、rPrefs.SetString("score",tempscoe); Application.LoadLevel("menu"); } /** *记录时刻的绘制 */} } 建立一个脚本“CamScript.cs”。该脚本实现了,主视角的转动,视角的切换功能。详细代码如下。 void Start () { rotatee=transform.rotation; translatt=transform.position; } void Update () { if(Input.touchCount>0){ if(Inp
52、ut.GetTouch(0).phase == TouchPhase.Moved){ delateY=Input.GetTouch(0).deltaPosition.y; transform.Rotate(-delateY*rotateAlpha,0,0); transform.Translate(0,-delateY*liftAlpha,0); }} if(Input.GetTouch(0).phase == TouchPhase.Ended){ transform.rotation=rotatee; trans
53、form.position=translatt; }} } 4.3设置界面 首先新建一个名为“options”设置界面的主要功能是控制背景音乐和场景音乐的是否播放。该界面包含一个主摄像机,在主摄像机附有“Options.cs”脚本。效果图如图4-6所示。 图4-6 (1) 新建脚本,命名为“Options.cs”,脚本开发首先是声明变量和Start方法,实现设置信息的获取和复选款选中状态的初始化。脚本代码如下。 void Start () { wbili=Screen.width/540.0f; hb
54、ili=Screen.height/960.0f; int ww=PlayerPrefs.GetInt("canplay"); int cc=PlayerPrefs.GetInt("yinxiao"); if(cc==1){ ok1=true; }else{ ok1=false; } if(ww==1){ ok=true; }else{ ok=false; } } (2)OnGUI方法的重写,利用按钮和贴图实现了复选框的模拟。在触控下以贴图的方式进行交互,脚本代码如下。 void OnGUI
55、(){ GUI.DrawTexture(new Rect(0,0,540*wbili,960*hbili),Tex); GUI.Label(new Rect(100*wbili,360*hbili,430*wbili,100*hbili),Tex1); GUI.Label(new Rect(100*wbili,470*hbili,430*wbili,100*hbili),Tex2); if( GUI.Button(new Rect(100*wbili,700*hbili,260*wbili,130*hbili),bu1,MyStyle)){ if(ok){
56、 PlayerPrefs.SetInt("canplay",1); }else{ PlayerPrefs.SetInt("canplay",0); } if(ok1){ PlayerPrefs.SetInt("yinxiao",1); }else{ PlayerPrefs.SetInt("yinxiao",0); } Application.LoadLevel("welcome"); } if(GUI.Button(new Rect(320*wbili,700*hbili,260*wbi
57、li,130*hbili),bu2,MyStyle)){ Application.LoadLevel("welcome"); } if(GUI.Button(new Rect(380*wbili,375*hbili,40*wbili,40*hbili),bu3,MyStyle)){ ok=!ok; } if(ok){ GUI.DrawTexture(new Rect(380*wbili,375*hbili,30*wbili,30*hbili),yes); } if(GUI.Button(new Rect(380*wbili,485*h
58、bili,40*wbili,40*hbili),bu4,MyStyle)){ ok1=!ok1; } if(ok1){ GUI.DrawTexture(new Rect(380*wbili,485*hbili,30*wbili,30*hbili),yes); } } (3) 手机返回键的设置。 void Update () { if(Input.GetKeyDown(KeyCode.Escape)){ Application.LoadLevel("welcome"); } (4)最后将脚本和相应的素材进行拖拽。如图4-7所示
59、。 图4-7 4.4关于界面 关于界面主要是显示了一张贴图和基本跳转按钮的功能实现。效果如图4-8。 图4-8 首先是创建一个新的场景,名字为“about”。接下来进行脚本的书写,主要实现了两个按钮的返回“welcome”界面的功能。代码如下。 void OnGUI(){ GUI.DrawTexture(new Rect(0,0,540*wbili,960*hbili),Tex); GUI.DrawTexture(new Rect(20*wbili,230*hbili,500*wbi
60、li,500*hbili),Tex1); if( GUI.Button(new Rect(100*wbili,750*hbili,180*wbili,90*hbili),bu1,MyStyle)){ Application.LoadLevel("welcome"); } if(GUI.Button(new Rect(320*wbili,750*hbili,190*wbili,90*hbili),bu2,MyStyle)){ Application.LoadLevel("welcome"); } } void Update () { i
61、f(Input.GetKeyDown(KeyCode.Escape)){ Application.LoadLevel("welcome"); } 最后分别将所学的图片以及脚本拖到主摄像机上。如图4-9所示。 图4-9 4.5帮助界面 利用篮球、篮框、篮网、篮板以及墙壁搭建一个合适的场景。如图4-10所示。 图4-10 场景搭建完之后要进行对象上脚本文件的开发。 (1) 该场景中篮球的脚本“HelpBall.cs”中,首先是变量声明和Start方法的重写。主要实现了音效参数的获取和物理碰撞检测的设置,具体代码如下。
62、 void Start () { yinxiao=PlayerPrefs.GetInt("yinxiao"); Physics.IgnoreCollision(ballpre1.collider, collider); Physics.IgnoreCollision(ballpre2.collider, collider); /** *变量声明,以及球之间不要相互碰撞 */ (2) 实现循环头球和根据参数播放碰撞音效的功能,具体代码如下。 void Update () { rigidbody.WakeUp();
63、 jumpFlag=0; } jumpFlag=0; } jumpFlag=4; } StartCoroutine(back()); } (3) 实现循环投球和根据参数“canplay”播放篮球发射和碰撞音效的功能。具体代码如下。 void OnCollisionEnter(){ if(yinxiao==1){ }} IEnumerator back(){ if(jumpFlag==4){ yield return new
64、 WaitForSeconds(4); balls[0].position=new Vector3(3.961248f,10.96818f,2.402708f); yield return new WaitForSeconds(4); balls[1].position=new Vector3(4.461248f,10.96818f,2.402708f); yield return new WaitForSeconds(8); balls[2].position=new Vector3(4.961248f,10.96818f,2.4
65、02708f); }} } (4)最后把脚本拖拽到三个球上面。如图4-11所示。 图4-11 (1) 计分触发器命名为“HelpScore.cs”,首先是变量声明和Start方法的重写,以及重写OnTriggerEnter方法。代码如下。 void Start () { wbili=Screen.width/540.0f; hbili=Screen.height/960.0f; } void OnTriggerEnter(){ score++; }
66、 (2) 然后是重写OnGUI方法,实现得分与时间的实时绘制,脚本代码如下。 void OnGUI (){ GUI.DrawTexture(new Rect(0, 0, 540*wbili, 150*hbili),textureToDisplay); if(score<=9){ var tempTexture=scores[score]; GUI.DrawTexture (new Rect (100*wbili, 48*hbili,22*wbili,80*hbili),tempTexture); }else{ GUI.DrawTexture (new Rect (100*wbili, 48*hbili,22*wbili,80*hbili),scores[(score%10)]); GUI.DrawTexture (new Rect (60*wbili, 48*hbili,22*wbili, 80*hbili),scores[(score-score%10)/10]); } GUI.DrawTexture (new Re
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年水电工程运行维护管理合同示范文本.docx
- 2025年工程勘测设计合同模板.docx
- 2025年区域产品销售代理合同.docx
- 2025年经销商授权合同样本.docx
- 2025年员工住房资金借贷合同.docx
- 2025年轻钢建筑施工合同示例.docx
- 2025年网络推广托管合同.docx
- 2025年简明个人借款正式合同范例.docx
- 2025年房产按揭贷款合同范例.docx
- 2025年技术合同争议调解.docx
- 2025年电子版城市住宅租赁合同范本.docx
- 2025年简易转让合同协议书样本.docx
- 2025年投资顾问服务合同实例.docx
- 2025年经销合同模板.docx
- 2025年工业项目设计合同样本.docx