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

转自: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一个下的级别。

时间: 2024-10-05 04:01:37

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

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

转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111736.html 这篇教材是来自教程团队成员 Christine Abernathy, 他是Facebook的开发支持团队的工程师.欢迎来到Unity3D for iOS系列教程的第二部分!在这个系列的第一部分中,你已经学习了Unity的一些基本技能来构建一个非常简单的项目,并把它部署到iOS设备上.在继续这篇教程之前,你要确认已阅读过第一部分.现在进入第二部分,你要添加一些功能来

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

转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111738.html 欢迎来到第三部分,这是Unity 3D for iOS初级系列教程的最后一个部分!在这个系列的第一部分,你参观了基本的Unity工具,创建了带有一个简单角色控制机制的游戏,并且学习了如何部署你的项目到iOS上. 然后在这个系列的第二部分,你增强了你英勇的小方块的移动,并且给这个世界带来一些生命,它拥有了天空,草地和一个起伏的地形. 在第三部分,也是最后一部分,你将

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

转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111735.html 一个手指来统治他们 但是等等,你还没有完全完成! 如果你玩游戏有一会,你会注意到有些奇怪的事情.你可以通过一个手指来移动方块,但是当你用两个手指离开它相同的距离方块也可以被移动.这是什么回事呢? 从你的MoveSimple脚本中回忆起这行: var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosit

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

转自:http://www.cnblogs.com/alongu3d/archive/ 如果图片看不到,请查看原文 这篇教材是来自教程团队成员 Christine Abernathy, 他是Facebook的开发支持团队的工程师.Unity是最为流行的游戏引擎之一.这是有充分缘由的:Unity有一个让它非常容易上手的强大的可视化编辑器,功能强大,好的社区支持,有吸引力的价格,等等!如果你渴望尝试Unity,没有比这篇教程更适合你的了!在这篇教程中,你会学习如何用Unity创建一个简单的iOS游戏

程序设计C语言二级考试教程 Java基础视频教程 安卓软件开发教程 Unity3D游戏制作入门教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

Unity3D For Android 开发教程

原地址:http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html 我自认为抵挡诱惑的能力还是很强大的,关键的时候还能把持住自己.今天逛了一下南京的丹凤街,终于受不住Android这美眉的诱惑.她虽脸蛋不怎么滴,但身材火热,且性感,廉价,低碳!长相平凡,却气质绝佳!虽出道不久,却已经在江湖搅起一股血雨腥风.在这阳光明媚的一天我给大家讲讲Unity3D的小安开发步骤.其实就是发布步骤啦! 第一步: 先去下载一个Android-SDK

shellKali Linux Web 渗透测试— 初级教程(第三课)

shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课)... 1 课程目录... 1 通过google hack寻找测试目标... 2 一个asp站点的sql注入... 3 一个php站点的sql注入... 4  课程地址:点击 课程目录 两个基本案例,以sql注入入手,目标为熟悉基本的思路,关注细节信息. 关于google hack,web 扫描,sql注入更详细和复杂的内容后续教程会专门讲解

UNITY3D与iOS交互解决方案

原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 "授人以鱼,不如授人以渔",以UNITY3D调用iOS版的91SDK为例,利用C# / C / OBJ-C 交互原理,本文将详细介绍UNITY3D与iOS之间交互的解决方案. 首先,打开XCODE新建一个空项目,参照91SDK开发文档将91SDK引入并进行环境配置. 配置完毕后创建一个名为"LsSdkConector

Unity3d与iOS交互开发——接入平台SDK必备技能

原地址:http://www.2cto.com/kf/201401/273337.html# 前言废话:开发手机游戏都知道,你要接入各种平台的SDK.那就需要Unity3d与iOS中Objective-C的函数有交互,所以你就需要用到如下内容: 一.Unity3d To iOS: 1.创建一个C#文件 SdkToIOS.cs 这是调用iOS函数的接口: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SdkToIOS: Mo