转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111739.html

消息不会自动消除

你基本的游戏功能已经完成了,但是显示一些关于游戏的信息当它首次加载的时候是一个好的亮点。你现在所有显示的是一个play按钮。用户不知道他们要做啥。
添加一些欢迎的文字和关于游戏的超级简短的介绍会让它更加用户友好.:]欢迎的文字会使用你导入变形金刚字体。对于介绍文字。你会使用和Unity一起打包的Arial字体。
创建一个空的游戏对象,命名它为Intro,然后设置 Transform Position为0,0,0.
选择GameObjectCreate Other3D Text来创建一个3D文字GameObject,然后命名它为Description Text。设置InspectorText MeshText属性为"Get to the finish line before time runs out".设置初始的Transform Position为-10, 1, 12.

用Unity编辑器试玩游戏,然后调整物件的位置让它水平居中,让你可以看的清楚一些。

提示:你会不得不与x和z位置打交道:x用于中间对齐物件,z用于放大和缩小。

<a href="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_39b_desc_text_adjusted.png"><img title="Description text position adjustments." src="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_39b_desc_text_adjusted-700x297.png" alt="Description text position adjustments." width="700" height="297" /></a>
用Unity Remote检查游戏,确保文字在iOS设备上显示的出来。对一些必要的调整。
将Description Text放到Intro GameObject下。你这样做的目的是你可以通过简单的代码在后面显示或隐藏显示菜单信息。

创建第二个3D文字GameObject,然后命名它为Welcome Text。这个文字应该出现在描述文字的上面,所以设置初始的Transform Position为 -6,5,10.设置InspectorText MeshText属性为"Welcome".
通过拖动项目视图中的字体资源到Inspector中的Font属性来设置字体属性为Transformers Movie(或者通过点击Font边上带有小点的圆圈,然后选择字体从弹出的列表中):
<a href="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_42b_welcome_text_transform_text_font.png"><img title="Welcome text transform and material modifications." src="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_42b_welcome_text_transform_text_font-244x500.png" alt="Welcome text transform and material modifications." width="244" height="500" /></a>
调整欢迎文字的位置,当你在Unity编辑器和Unity Remote中测试游戏的时候,让你可以看的清楚。
<a href="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_43b_welcome_text_adjusted.png"><img title="Welcome text position adjustments." src="http://www.raywenderlich.com/wp-content/uploads/2012/11/part3_43b_welcome_text_adjusted-700x315.png" alt="Welcome text position adjustments." width="700" height="315" /></a>
将Welcome Text物件放到Intro GameObject下面。
当游戏开始运行的时候,你想要隐藏IntroGameObject(和它的子物件)。打开GameController脚本,然后做下面的修改:
var intro : Transform;
...
function startGame() {
...
// Turn off the intro text
for (var child : Transform in intro ) {
child.gameObject.renderer.enabled = false;
}
 
// Clean out any enemy objects
...
这里你添加一个新的公共变量来得到Intro GameObject的句柄。然后你修改startGame()来让Intro GameObject不可见,通过关闭它的子GameObject的渲染。
现在通过选择主摄像头然后从Hierarchy视图中拖动Intro GameObject到InspectorGame ControllerIntro变量上来设置Intro变量。或者使用圆圈点图标,因为它更加容易.:]

创建第二个3D文字GameObject,然后命名它为Welcome Text。这个文字应该出现在描述文字的上面,所以设置初始的Transform Position为 -6,5,10.设置InspectorText MeshText属性为”Welcome”.

通过拖动项目视图中的字体资源到Inspector中的Font属性来设置字体属性为Transformers Movie(或者通过点击Font边上带有小点的圆圈,然后选择字体从弹出的列表中):

调整欢迎文字的位置,当你在Unity编辑器和Unity Remote中测试游戏的时候,让你可以看的清楚。

将Welcome Text物件放到Intro GameObject下面。

当游戏开始运行的时候,你想要隐藏IntroGameObject(和它的子物件)。打开GameController脚本,然后做下面的修改:

var intro : Transform;
...
function startGame() {
...
// Turn off the intro text
for (var child : Transform in intro ) {
child.gameObject.renderer.enabled = false;
} // Clean out any enemy objects
...

这里你添加一个新的公共变量来得到Intro GameObject的句柄。然后你修改startGame()来让Intro GameObject不可见,通过关闭它的子GameObject的渲染。

现在通过选择主摄像头然后从Hierarchy视图中拖动Intro GameObject到InspectorGame ControllerIntro变量上来设置Intro变量。或者使用圆圈点图标,因为它更加容易.:]

试玩游戏来测试当play按钮被点击,游戏开始后文字隐藏起来了。

每个勇敢的小方块都需要一个音轨。

音乐在游戏的体验中扮演一个重要的角色,及提供感官的反馈也创造情绪。你将要添加音频来增强游戏性。

声音效果会被触发,当玩家按时通过终点线的时候,或者他们的任务失败,或者障碍物撞击到地上,或者碰到了任何东西。当然,游戏也需要一些背景音乐!:]

用Unity添加音频涉及关联一个Audio Source组件到一个GameObject上。这个Audio Source组件有一个Audio Clip属性让你可以分配你想要播放的声音。这个组件有其他附加的属性来控制声音是可以播放,也可以循环。支持音频格式包括.AIF, .WAV, .MP3, and .OGG.

下面两个网站提供免费的音乐,可以被用在这份教程中:

你先前下载的Resources.zip文件包括了所有你会用到的音频文件了。你可以自由创建你自己的音效来替代那些我提供给你的. :]

作为你的参考(并且为了找到原始的链接),在Resources.zip文件中包含的音频文件的原始链接如下:

注意,在Resources.zip文件,为了清晰和简洁,文件已被重新命名。到你最初解压Resources.zip的文件夹下,然后通过拖动它们到你的Project ViewAssets文件夹下来导入音频文件。

当音频文件导入到Unity中,你可以指定是否压缩或保持现状,例如,自然的状态(但是注意MP3和Ogg Vorbis音频总是以压缩的格式导入的)

为什么会这样呢?压缩文件会更加小,但是它们需要在游戏运行的时候解压,会消耗CPU周期。你通常想要解压背景音乐。对于短的音效,自然状态会更好,并且可以提供更好的声音效果。

如果音频格式是压缩的,你可以选择是否通过硬件来处理解压,例如,Apple的硬件解码器,如果运行在iOS设备上。硬件会更快,但是硬件只能同时处理一个压缩的文件。

你也可以让声音有3D效果。意思是当播放声音的时候,效果会与GameObject的3D位置有相关性。举例来说,如果GameObject远离了你,声音会变得轻一些。

在项目视图中选择背景音乐,显示导入的设置。不要勾选3D Sound选项。选择 Hardware decoding。点击Apply来保存改变的设置。

另外一些音频文件是.WAV 文件,你不需要改变缺省的导入设置,也就是应该设置为3D和自然的音频格式。

对于被听到的声音,你的场景需要一个Audio Listener组件添加到一个GameObject中。场景里只有一个Audio Listener。这个收听者会从最靠近它的声音源捡起声音,然后把它发送到设备的喇叭上。

缺省情况下,Audio Listener关联到主摄像头。你可以把他放在那里或者关联它到一个不同的GameObject:例如,你的角色上。

在这个游戏中,你保留Audio Listener在主摄像头上,但是你可以体会一下不同的选择当你构建你自己的游戏的时候。

胜利和失败的音效

你打算关联音频到Goal GameObject上来模拟一个在终点线的观众欢呼或嘲笑。

在Hierarchy视图中选中Goal GameObject,然后通过选择ComponentAudioAudio Source来添加一个音频源。设置victory audio资源到InspectorAudio SourceAudio Clip属性。不要勾选在Awake播放的选项。

现在创建一个新的JavaScript资源用作播放一个胜利的声音或失败的声音。命名这个新的脚本为FanReaction。打开这个新的脚本,移除自动添加的函数,然后添加下面的代码:

var audioVictory : AudioClip;
var audioDefeat : AudioClip;
var volumeVictory : float = 2.0;
var volumeDefeat : float = 2.0; function playSoundOfVictory(isVictory : boolean) {
// Stop any current audio
if (audio.isPlaying)
audio.Stop(); // Play either the sound of victory or defeat.
audio.clip = isVictory ? audioVictory : audioDefeat;
audio.volume = isVictory ? volumeVictory : volumeDefeat;
audio.Play();
} function resetGame() {
// Reset to original state, stop any audio
if (audio.isPlaying)
audio.Stop();
} @script RequireComponent(AudioSource)

这个脚本处理两段音频,一个是为胜利准备的,另一个是为失败准备的。playSoundOfVictory函数首先停止播放任何当前播放的声音,然后根据isVictory输入,播放需要的声音。

resetGame()函数会停止播放正在播放的任何声音。你会想起GameController在游戏每次重新开始的时候调用resetGame()。

关联这个新的脚本到Goal GameObject上。设置 victory audio资源到Audio Victory变量。设置defeat audio资源到Audio Defeat变量。

编辑GameController脚本,并做下面这些修改:

var fanReactionScript : FanReaction;
...
function Update() {
if (!gameRunning)
return; // Keep track of time and display a countdown
gameTimeRemaining -= Time.deltaTime;
if (gameTimeRemaining <= 0) {
timedOut = true;
gameRunning = false; // Play the sound of defeat
fanReactionScript.playSoundOfVictory(false);
}
}
...
function MissionComplete() {
if (!gameRunning)
return; missionCompleted = true;
gameRunning = false; // Play the sound of victory
fanReactionScript.playSoundOfVictory(true); missionCompleteTime = gameTimeAllowed - gameTimeRemaining;
}

代码定义了一个新的公共变量来引用FanReaction脚本。你修改MissionComplete()来调用 playSoundOfVictory,传递true来播放胜利的声音。你也要修改Update()来调用playSoundOfVictory(),传 递false来播放失败的声音。

在主摄像头的GameController脚本组件的Goal GameObject带有一个变量来连接FanReaction脚本。在Inspector中选择主摄像头,然后点击GameController组件下 面的fanReactionScript变量边上的圆圈点。在弹出的对话框下,选择Goal GameObject,然后关闭弹出的对话框。

要调用FanReaction中的resetGame(),选择主摄像头物件。在Inspector的Game Controller组件栏目,增加Game Object到Reset数组,从2到3.设置Goal GameObejct到Element 2.

试玩游戏,并且测试胜利和失败的场景,来确认游戏播放了正确的声音。检查声音是否停止,当你再次点击了Play按钮。

在3D环境下的轰的一声

当障碍物撞击到地面的时候,有某种声音也是不错的。要实现这点,你会关联一个音频源到Obstacle预制件,然后当障碍物落下或碰撞到任何其他东西的时候,你可以通过监测碰撞来播放碰撞的声音。

添加一个音频员组件到Obstacle预制件。分配impact audio到Audio Clip属性。

创建一个新的JavaScript脚本资源,然后命名它为ObjectCollision.编辑这个脚本,删除预先添加的函数,然后添加下面这些代码:

var impact : AudioClip;
function OnCollisionEnter () {
audio.PlayOneShot(impact);
} @script RequireComponent(AudioSource)

这段代码实现了预先定义的OnCollisionEnter事件函数,它调用audio.PlayOneShot()函数来播放撞击的音频。audio.PlayOneShot()展示了播放音频的另一种方式,允许你传递你想要播放的音频。

关联脚本到Obstacle预制件上。设置impact audio资源到脚本中的Impact变量。

试玩游戏,并检查当障碍物撞击地面或其他物件时你是否听到一个可喜的砰的一声。注意离障碍物玩家越近,声音越大。

小方块的音乐

你的游戏几乎完成了。但是那里还有一件事漏掉了 – 一些背景音乐。

对于游戏音乐制造了很多气氛。它可以让用户的肾上腺素流动,并且通过如鸟的声音或狼的嚎叫,帮助他们提供游戏环境的线索。所以添加一些音乐吧!

添加一个Audio Source组件到主摄像头。设置background audio资源到Audio Clip属性。

勾选Play on Awake和Loop属性。这些确保当游戏开始后背景音乐就开始播放,并会持续的播放。

调整volume从0.1直到它没有淹没了其他声音。如果你使用你自己的声音,根据你音乐缺省的音量级别微调音量级别来完成同样的目标。用户应该可以通道所有音效当背景音乐播放的时候。

在Unity编辑器里试玩这个项目。当完全满意后,部署这个项目到你的iOS设备上。你需要添加Level_3场景在 Build Settings中。

在你的iOS设备上测试整个游戏,直到你满意你添加的声音。

你英勇的小方块有了背景音乐来鼓舞它的士气。

向哪里进发?

恭喜,你已经到达到了Unity基础旋风演戏的结尾!你已经展示了你英勇小方块的活力和生机。这或许是Unity游戏精彩之旅的开始。

这里是这个系列教程的所有代码的源文件: Unity ProjectXcode Project.

相信或不相信,你只是知道了一些皮毛而已 – 那里还有很多东西要学。敬请关注马上就会来的中级教程系列,那带你到Unity一个下的级别。

Unity3D for iOS初级教程:Part 3/3(下)的更多相关文章

  1. Unity3D for iOS初级教程:Part 2/3

    转自Unity3D for iOS 这篇文章还可以在这里找到 英语 Learn how to use Unity to make a simple 3D iOS game! 这篇教材是来自教程团队成员 ...

  2. Unity3D for iOS初级教程:Part 3/3

    转自Unity 3D for iOS 这篇文章还可以在这里找到 英语 Learn how to use Unity to make a simple 3D iOS game! 这份教程是由教程团队成员 ...

  3. Unity3D for iOS初级教程:Part 3/3(上)

    转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111738.html 欢迎来到第三部分,这是Unity 3D for iOS初级系列教程 ...

  4. Unity3D for iOS初级教程:Part 1/3

    转自Unity 3d for ios 这篇文章还可以在这里找到 英语 Learn how to use Unity to make a simple 3D iOS game! 这篇教材是来自教程团队成 ...

  5. Unity3D for iOS初级教程:Part 1/3(下)

    转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111735.html 一个手指来统治他们 但是等等,你还没有完全完成! 如果你玩游戏有一 ...

  6. Unity3D for iOS初级教程:Part 1/3(上)

    转自:http://www.cnblogs.com/alongu3d/archive/ 如果图片看不到,请查看原文 这篇教材是来自教程团队成员 Christine Abernathy, 他是Faceb ...

  7. Unity3D新手入门初级教程

    根据游戏调查公司 Newzoo 针对全球手机游戏市场所做的调查报告显示,2016年全球游戏市场规模将达到 996 亿美元,其中手机游戏市场将以 21.3% 的增幅获得约 369 亿美元的收入,而中国手 ...

  8. 新手必看,史上最全的iOS开发教程集锦,没有之一!

    最近大火的iPhone XS Max和iPhone XS,不知道有没有同学已经下手了呢?一万三的价位确实让很多人望而却步啊.据说为了赢得中国的用户,专门出了双卡双待的,可想而知中国市场这块“肥肉”人人 ...

  9. [[iso教程]] 《4个月ios实体教程》全网最新、最全ios视频教程

    全网最新.最全ios视频教程 内容简介 <ios实体教程>主要介绍如何使用iOS提供的强大工具集创建iOS应用.全视频对iOS操作系统做了全面的介绍,首先讲解如何构建应用程序的用户界面,涵 ...

随机推荐

  1. Java I/O体系从原理到应用,这一篇全说清楚了

    本文介绍操作系统I/O工作原理,Java I/O设计,基本使用,开源项目中实现高性能I/O常见方法和实现,彻底搞懂高性能I/O之道 基础概念 在介绍I/O原理之前,先重温几个基础概念: (1) 操作系 ...

  2. IPv6笔记-地址结构与分类

    1.地址基础 IPv6地址由被划分为8个16位块的128位组成. 然后将每个块转换为由冒号符号分隔的4位十六进制数字. 2001::3238:00E1:0063:0000:0000:FEFB 每一块多 ...

  3. 你了解MySQL中的多表联合查询吗?

    前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...

  4. linux cmake安装方法

    linux cmake安装方法 OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake:还有其它一些软件都需要先安装cmake 1.在linux环境下打开网 ...

  5. VLAN的 基本用法与配置

    需求:在一家小型企业中,所有员工都使用一台交换机,老板为了避免员工私下通信,将他们分配了不同网段,但偶尔还是会发现,有些员工会自行修改网段和别人通信.如果你是这家企业的网络工程师,你该如何处理? 1. ...

  6. Servlet——用户登录案例

    案例:用户登录 * 用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14 ...

  7. Groovy单元测试框架spock基础功能Demo

    spock是一款全能型的单元测试框架. 最近在做单元测试框架的调研和尝试,目前确定的方案框架包括是:spock,Junit,Mockito以及powermock.由于本身使用Groovy的原因,比较钟 ...

  8. pat 1041 Be Unique(20 分)

    1041 Be Unique(20 分) Being unique is so important to people on Mars that even their lottery is desig ...

  9. 力扣(LeetCode)Excel表列名称 个人题解

    给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...

  10. VMware NAT模式ping通外网[CentOS7]

    使用一张网卡,NAT模式 在编辑里打开虚拟网络编辑器 dhcp设置的范围 你的虚拟机的IP 就在那个范围里 NAT设置里有填网关 这里我们vmware 的设置就OK了 在去把你的网络适配器改下iP 这 ...