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的大小就会有变动,但是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!"); } } }