Unity学习笔记4:声音和用户界面

Edit->Project Settings->Audio可以设置Audio Manager的各项参数,比较简单。

Reverb Zone:混响区,在混响区内的audio listener接收到的声音都要经过混响处理。可以通过component->Audio->Audio Reverb Zone添加。Audio effects的设置需要PRO版本的Unity。

Audio Listener在每个场景只有一个,一般设置在主摄像头上,也可以设置在主角身上。

Audio Source的属性设置:

Bypass Effect:开/关Audio effect(各种滤波器等)
Play On Awake:进入游戏即开始播放。否则要在script里使用play()来激活。
Priority:设置多音源混杂时的播放优先权。0最高256最低,默认是128,背景音乐最好设为0以获得最高优先权。
Volume:距音源1m处的声音音量大小。
Pitch:通过改变播放速度来调节音调,默认1为普通速度。


3D音效设置:

Pan Level:3d引擎对音源的影响级别。
Spread:3d音源的传播角度。
Doppler Level:多普勒效应,0为没有。
Min Distance:在此距离之内声音不会衰减,保持最大音量。
Max Distance:在此距离之外声音的衰减过程结束,保持最小音量。
Rolloff Mode:声音的衰减速度。三种模式:Logarithmic、Linear(指数递减、线性递减)和定制。

声音衰减的三种模式
声音衰减的三种模式:指数、线性和定制

iOS中声音的导入设置里面注意一项,如果选中Hardware Decoding可以使用iphone自带的硬件解码器。
另外移动平台中声音文件要打包成mp3格式,可能会使你辛苦做好的可完美循环的声音文件遭破坏,网上可以找到相关工具防止这种潜在的破坏。

声音导入还有一项设置非常重要,就是Load Type,分三种:
Decompress on load:游戏装载的同时解压到内存中,体积比压缩的音频大得多,所以最好只用于较短小的音频文件,可以避免运行时解压造成的系统开销。
Compressed in memory:装入内存时不解压,运行时解压,对游戏性能会有小幅影响,适合背景音乐之类的较大文件。
Stream from disc:直接从硬盘读取的音频流,占据内存的只是整个音频文件的一小部分,适合长时间的背景音乐,性能取决于硬件,建议最多同时使用两个这样的音频流。

-------------
Unity中建立用户图形界面的方法:新建GameObject里的GUI text和GUI texture,或者在脚本中使用UnityGUI。UnityGUI是在Unity2.0中引入的GUI脚本编程系统。

Unity可以导入.ttf格式的字体。

字体导入的设置:

Character:字体编码模式,在这里可以设置大写或者小写模式,也可以设置dynamic(动态).Unity3.x引入了对字体的动态渲染,如果选择了dynamic,那么不用根据字体编码预先渲染字体纹理,而是交给操作系统在运行中进行渲染。这样做的好处是省去预先渲染字体纹理需要的内存空间,也不需要包含字体数据,另外更好支持亚洲文字和大字体。缺陷是操作系统不同字体可能会看起来不一样,比如mac和windows的差别。另外当系统没有该字体时,使用备用字体的开销会对字体纹理的渲染速度造成一定损失。Dynamic模式目前只支持桌面开发。

Font Rendering(在非dynamic模式下):字体反锯齿(anti-aliasing)的程度。
Include font data:在build游戏时是否包含字体文件。玩家的操作系统可能不包含你使用的字体。
Font Names:如果前一项选择了不包含,那么这里需要列出字体名单,用逗号分隔,优先顺序从左到右。

导入一个字体文件以后会显示两个资源:"font material"和"font texture".

Unity支持Unicode,需要在导入字体时设置Character为Unicode或Dynamic.使用GUIText或Text Mesh时可以直接在text栏内输入Unicode字符。在脚本中使用Unicode,比如在脚本中输入一段Unicode编码的字符串,用于UnityGUI,GUIText,或者Text Mesh,需要将脚本保存为UTF-16编码。

改变字体颜色:

方法多种多样,依赖于使用字体的方式:
1.GUIText & Text Mesh:定制一个字体material,把导入的字体texture贴上去,使用Unity内置的GUI/Text Shader,在颜色属性里就可以更改。
2.UnityGUI脚本定制:Asset->Creat->GUI Skin,对不同状况下的字体颜色都可以进行控制。

提示:GameObject->Creat Other->3D Text默认字体是Arial,该字体不支持Unicode.

GUI Text的属性中:
Font的优先级低于Material,如果Material中设置了相应的材质,将覆盖Font的设置。
Pixel Correct:字体按照导入时设置的大小显示,如果关闭此项,字母大小可在transform中调整。

GUI Layer:GUI Text是以2D形式在GUI Layer里渲染的,摄像头默认带有GUI Layer组件。GUI Layer的作用是渲染场景中所有GUI Text和GUI Texture,但不影响UnityGUI.

GUI Texture:和GUI Text一样,以2D形式在GUI Layer里渲染。通过scipt,可以把玩家状态反馈到GUI Texture显示出来(比如角色HP条)。

GUI Texture 边界范围
GUI Texture 边界范围

玩家屏幕分辨率有大有小,GUI Texture的大小就会有变动,但是Border范围内的像素是不会变大缩小的。另外如果你不希望你的GUI Texture大小随着屏幕分辨率变化,而是使用固定的像素点,调整GUI Texture属性里的Pixel Inset选项区(X,Y,Width,Height)。首先设置GUI Texture的transform为(0,0,0),然后x是相对屏幕左端的距离,y是相对屏幕底端的距离。

GUI Texture的层次遮挡关系:由每个GUI Texture的transform属性的z值决定,大值遮挡小值。
建议总是使用Pixel Inset来定制GUI的大小。

使用UnityGUI可以简单快速构建GUI。以下代码实例构建一个按钮:

JS版:

// JavaScript
function OnGUI () {
     if (GUI.Button (Rect (10,10,150,100), "I am a button")) {
          print ("You clicked the button!");
     }
}

C#版:

// C#
using UnityEngine;
using System.Collections;
public class GUITest : MonoBehaviour {
     void OnGUI () {
          if (GUI.Button (new Rect (10,10,150,100), "I am a button")) {
               print ("You clicked the button!");
          }
     }
}
上面脚本创建的按钮
上面脚本创建的按钮
UnityGUI是Unity自带的功能强大而复杂的系统,可以用于构建复杂的GUI帮助提高用户体验,不过随着新的技术不断发展,新的工具应运而生。Autodesk的子部门Gameware已经开发出一套快速搭建游戏GUI的方案,Scaleform已经支持UE3,Vision Engine,CryEngine等引擎,并将很快支持Unity3D。
Gameware - Scaleform
Gameware - Scaleform
UnityGUI官方文档给出了比较详细的学习路线:
本blog会继续更新这方面的学习笔记。
原文地址:https://www.cnblogs.com/definitelymaybe/p/3617782.html