月份:2012年2月

Unity3.5中内建精简字体字库方法讲解

在Unity3.5中内建了精简字体字符的功能.更加方便,也非常利于修改等等.在此之前一直用FontSbusetPack进行精简.为什么要精简字库集?最简单的一个原因就是为了让Unity发布的移动设备能文本能使用字体来定义样式.

Unity内建的用法很简单,只需选择放入的字体,修改Character项为”Custom set”,接着出现Custom Chars中输入你想使用的字符串,字符重复无所谓,因为最终会自动过滤掉重复字符.如输入”你好世界”,那么整个字体最终只包含”你好世界”这四个字的字符贴图,也就是你仅仅能用这个字库来显示”你好世界”这几个字.最简单的测试办法只选择字体,在GameObject-Create Other-GUIText创建一个使用所选字体的文本标签来测试就可以了.

这里有一个脚本,用于将一个文本文件里包含的字符串读入并赋予给Custom Chars编辑框中.这个脚本特点是可以按照字符重复次数多少排序,即用该文本文件中用的次数越多这个字符会越靠前排列提升读取速度.另外会将键盘上的字母,数字及其他符号自动包含其中.感谢 Unity郭振平 编写和分享该脚本.

首先将下列脚本(见本文附件)保存为”UnicodeTextImporter.cs”文件放项目资源目录里的Editor文件夹内.

然后找个你需要的字体放入项目中,只好选择这字体,在检视面板中设置你需要的字体尺寸,颜色等.然后选择”Character”为”Custom set”.

将你最终用来显示的文本内容以UTF-8编码保存为文本文档存于Assets/Resources(推荐的,放在任意目录下都可)中.

接着在项目视图选择这个字体文件,在Unity顶部菜单选择AssetDatabase-Import Font with Text File,会弹出打开文件对话框. 选择上面存放于Resources文件夹中的文本文件.

成功导入后会显示”ImportFontWithTextFromFile: Final Unicode String: xxxxx”字样.重新选择一次字体且选择字体的贴图会看到类似如下的精简结果.

至此精简工作完成.

如遇读取进来的不正确,有乱码现象,需检查文本编码是否为UTF-8,并且需要重启Unity才能再次正常执行该插件。

附件:点击下载此文件

转载请注明来自1Vr.Cn!

久违的更新-Unity3.5正式版发布!(中文版更新说明)

这应该是我目前翻译的最长一篇没有页数的英文文档了….够累的.就不排版加什么粗体了.

新版下载地址:http://unity3d.com/unity/download

Unity3.5是一次较大的更新.它包含的新功能和改进会让你爱不释手.

Shuriken粒子系统
内建寻路系统
升级遮挡裁切和增加LOD系统
谷歌Chrome浏览器的Native Client支持
线性空间照明和HDR

主要的新功能
Adobe Flash:现在版本支持Adobe SWF格式的Flash输出(预览版).有关Flash预览版相关问题见:http://unity3d.com/unity/publishing/flash
新的粒子系统-“Shuriken”.
可以手动控制时间线来检查,调试和编辑粒子的效果.
新的粒子系统是基于模块的,可以选择使用颜色,尺寸,粒子运动等功能模块.
在层次面板中将多个粒子组成父子关系后播放时将表现为整合后的一个粒子系统.
内建曲线编辑器可以方便通过曲线编辑粒子.
增加寻路和避障系统
NavMesh:寻路的一个API,计算活动范围的导航网格.
NavMeshAgent:角色导航,避障系统.
OffmeshLink:用于创建任意导航网格多边形间的连接.
内建LOD和LOD管理系统.
烘焙的光影图支持LOD的模型,光照贴图将用一种类似法线贴图烘焙的算法处理.
资源缓存服务器(Asset Cache server)
Asset imports用来将资源导入到项目中.Switching Platform几乎是即时切换到另外一个平台的,而不是”切换平台”一个大项目要等上很久.
内建HDR和自适应的色调映射(tonemapping)的支持.
Unity3.5的图像效果包包含了tonemapping,可对HDR进行景深,Bloom等优化处理.
多线程渲染.
在支持多核的系统上支持另外一个CPU内核的渲染和驱动.你不需要做任何处理,它就可以工作.
目前仅支持PC / Mac / Xbox 360,但还不支持Webplayer.
Light Probes:可以实现角色和其他动态对象用烘焙光影.
定向光照贴图.
免费版现在支持通用的版本控制(.meta文件).
现在已经支持谷歌浏览器Coogle Native Client.
基于SerializedProperty的对象允许讲Multi-editing用于自定义编辑器.
遮挡裁切功能重写了代码,修正了错误,速度也更快.
OcclusionPortal组件允许在计算烘焙的时候启用或关闭.
地形系统现在可以正常工作于遮挡裁切.
遮挡裁切默认的模式是”automatic portal generation”,这个处理动态物体非常准确的.
增加”Occludee Static”标志,用于标记不需要使用遮挡裁切的物体.比如没有移动动作的透明物体就要标记未Occludee Static.
基于文本格式的场景文件和预设,可用于改善团队协作流程.每个项目都可以通过Editor Settings开启或关闭该设置.
GPU Profiler:在Profiler中增加对GPU使用的探查.
内存和性能优化及多线程的一些改进.

图像功能:
SkinnedMeshRendererde边界值现在能很好的匹配root骨骼能很好的配合Ragdolls.
UpdateWhenOffscreen的边界值现在使用骨骼边界的相对量,而不是顶点计算了.大约快了100倍.
现在有WebCamTexture类支持摄像头的调用.
Application.CaptureScreenshot的superSize参数可以用来截取高分辨率截图.
给平行光源增加新的柔化阴影模式(rotated disk sampling).
Lightmapping:添加”区域光(Area Light)”灯光类型(仅用于烘焙).
Lightmapping:蒙皮网格可以被烘焙渲染了.用这个烘焙后不会改变网格结构.
高级渲染控制:
图像效果现在可以设置生效范围的使用.使用在OnRenderImage方法中的ImageEffectOpaque功能.
支持Subtractive/Min/Max混合,可以在ShaderLab用BlendOp Min|Max|Sub|RevSub.
多渲染目标支持,Graphics.SetRenderTarget能获得多个颜色的目标。
启用不同颜色目标缓冲间深度缓冲的共享.见Graphics.SetRenderTarget,RenderTexture.colorBuffer等等.

优化图形:
为OpenGL ES 2.0做优化,避免动态几何体出现性能过耗.
优化裁切和阴影的投射裁切.
通过本地代码Plugins能访问更底层的方法:
能够访问到Direct3D 9指针设备.
插件支持渲染线程的回调,所以在Unity3.5中允许多进程渲染器的存在.
Surface Shaders:添加优化颜色修改方法(finalcolor指令).当不支持自身雾效的平台上通过这个方法来使用自定义的雾效(像在Xbox360或者PS3上).
新增renderer.SetMaterialBlock方法为添加重复材质添加不同材质参数.
质量设置的修改:
可以为每个平台启用/禁用Quality settings.如果禁用在目前平台,当编译的时候会忽略Quality levels设置.
最大的LOD级别和LOD bias可以在Quality settings中设置.
如果设置了最小LOD级别将忽略最高LOD级别设置.这样在一些低端设备上能很好的处理忽略掉高模.

编辑器功能:

中间单击场景视图中任意一点都回自动将焦点定位到该点.
新增AssetModificationProcessor类为用户自己创建VCS.
增加IsOpenForEdit检查防止资源被误修改.
检视面板的预览可以单独分离到一个小窗口中.
对Cinema4D R13的C4D文件格式的支持.
改进导入材质类型的检测,当是法线贴图和透明属性的纹理将给与”Bumped Diffuse”,”Transparent/Diffuse”或”Transparent/Bumped Diffuse”.
能导入纹理的Tiling和Offset值.
支持FBX到处器导出的带有烘焙动画的C4D文件(仅支持Cinema 4D R13,旧版本的需要用IK baker来处理).
Mac:添加针对OS X Lion的FullScreen的支持.
可以用PreferenceItem改进选项窗口。
Gizmos有世界空间尺寸,所以也添加了高分辨率的图标。
变换Gizmo有个新的平面两轴变换工具,可以按住”Shift”切换回常规的变换工具.
GUI类增加了DrawTextureWithTexCoords方法用于指定纹理坐标.
可以曲线整体垂直拖动.
Gizmos现在是Depth-tested的存在于世界空间里.可以用尺寸滑块调整Gizmo的尺寸.
改进”静态”复选框,现在可以给物体不同状态做静态标记(光影图,导航网格,遮挡裁切等等).
可以查找某个资源在场景中被哪个对象引用.
PVRTC纹理压缩支持调整压缩比.
新的预设(Prefab)系统允许从实例中删除或添加组件.并保持与老预设兼容性,确保预设不会出现”missing”问题.

音频功能:
启用堆AudioClip的音频缓冲的读取和写入(Get/SetData).
在OnAudioFillterRead()上增加自定义低延迟过滤器来过滤和产生音频混频.
扩展检视面板的界面支持自定义过滤器(出增益和性能).
所有平台都支持麦克风.
可以从脚本访问混合气的设置(缓冲大小和采样率).

iOS特性:
增加对Xcode 4.x的Build&Run的支持.(但是不兼容Xcode3.x,可以从编辑器设置中关闭这个支持).
可以从PlayerSettings中设置重力感应的频率.
Application.targetFrameRate可以用了.所以删除了Xcode项目中的kFPS.默认是30FPS.
添加”Show Loading Indicator”选项,能显示载入进度.
添加Social API来支持GameCenter(不包含matchmaking和语音功能).
添加iAD支持.
添加推送支持.
添加罗盘和陀螺仪的支持.
添加摄像头的支持.
添加麦克风的支持.
贴图导入设置会根据FrameBuffer中的Render Targets来更改格式(最常见的-default Display Buffer).所以你用16位显示缓冲将得到16bit rt (RGB565).这使得图像过滤器能快点也更符合GLES的规范.如果你想使用带alpha通道的图片过滤器或banding,请设置”Use 32-bit Display Buffer”.或者使用新增的Handheld.use32bitDisplayBuffer API.

Android特性:

同样新增”Show Loading Indicator”选项来实现场景加载进度显示.
抗锯齿选项QualitySettings.antiAliasing现在可以用了,可以在运行时或者编辑器中设置AA级别.
新增”Use 32-bit Display Buffer”和”Use 24-bit Depth Buffer”选项.
新增”Screen.dpi”方法来帮助确定高/低解析度的图形的选择.
新增摇杆和USB鼠标的支持-仅在Honeycomb 3.1和新版本中支持.
改进的新文件读入的载入时间.
探查器能探查ADB.
在Gingerbread 2.3或者更新的版本中输入延迟有所改善.
添加罗盘和陀螺仪的支持.
添加摄像头的支持.
添加麦克风的支持.
在Build Settings增加ETC/RGBA16.
新增Honeycomb 3.2 (MR2) 和 Ice Cream Sandwich (4.0)的支持.

其他特点:
更新到MonoDevelop 2.8.2.
增加Social API,目前仅支持GameCenter,后面会支持 Xbox Live.有些功能在不支持的平台上不能运行,但是可以代码可以在编辑器中测试.第三方可以改进它使它支持任何平台.
物理:新增ConfigurableJoint.swapBodies来实现两个年角的刚体主体交换.
AssetPostProcessor可以获得版本.参加AssetPostProcessor.GetVersion.
可以用Cache Server替代Asset Server了.但是要注意要将服务器和项目到3.5版本才可以.旧版本将无法打开这个项目.一定要切记要备份.
添加 Application.StreamingAssetPath来指定 Assets/StreamingAssets的目录.
输入法:添加Input.isIMESelected来确定当前用户选择了输入法.
所有 Editor Settings文件已经转移到ProjectSettings文件夹中.
如果升级旧项目文件目前的设置文件将复制到新文件夹中.所以当你要在3.5中做版本控制需要添加Assets文件夹和ProjectSettings文件夹.

改进:

Android

添加AndroidJavaRunnable到脚本中给Java代码.
勾选development编译时能自动解锁设备.
当用NativeActivity时将把触摸或者键盘事件编译到native代码中
移出当从没必要的GL菜单中返回返回一个应用的延迟.
相对于项目路径储存商店的keystore文件.

音频:
可以从脚本更改混频器采样率和缓冲区尺寸.
在Webplayer下AudioClip::GetData()也进行域的安全检查.
子定义的DSPs(OnAudioFilterRead)现在遵循一起的音源设置(静音,衰减曲线等等).
可以从脚本访问麦克风的频率,可以用于Record().
多通道(大于两个)OGG文件现在能正常编码和播放.
引进non-blocking waveform渲染器(更高的分辨率和更好的前景).

文档:
在手册中添加新功能(Shuriken粒子系统,导航网格和LOD).
修正IE浏览器代码格式问题.
修正很多范例代码.

编辑器:
修正Mac/Win系统上编辑器的”Generate Lightmap UVs”差异.虽然没完全一致但是大部分是相同的了.需要重新导入网格和重烘焙.
当LOD组创建后现在会更新到场景中并且能将这些设置发回导入器.
Layer选择菜单添加”全选”和”取消选择”项.
API:添加可选参数includeChildren到PropertyField用来允许一个方法控制整个类或者一个数组.
API:开启GetIconSize 和 SetIconSize.
API:DrawDefaultInspector可以用了.
APi:PropertyField根据它所处位置做相应缩进.
优化大型项目文件夹导入.例如检测并刷新一个资源现在大约快十倍.打开一个已经导入过的项目快50倍左右.
音频片段现在用静态预览系统.这意味着音频片段现在在对象拾取器或浏览器中可以预览.
增加”Break”预设菜单项在GameObject菜单(Break按钮从检视面板中移出了).
曲线编辑器的选择改进:如果重叠的多条曲线,能保证总是选择最上面的一条线.
Debug.DrawLine 和 Debug.DrawRay 现在可以在Depth-testing时禁用或开启.
确保当选择不同对象,进入或退出播放模式时地形画笔设置不重置.
EnumPopup元素字符串现在是”nicified”.
修正各种导入项目问题,其中有种崩溃可能会导致整个项目重新导入.
改进EditorGUI的BeginChangeCheck,EndChangeCheck, BeginDisabledGroup, EndDisabledGroup作为GUI.changed 和 GUI.enabled的更高级别设置.
导入设置现在在检视面板的上部了.
提高编辑器主体配色的响应.
Lightmapping窗口, Occlusion窗口,和Navigation窗口现在有为了快速拾取相关对象基于类型的过滤器.
为SerializedProperty API增加intValue为了LayerMask类型.
检视面板能快速显示亚洲字体字距等信息,导入时也能显示进度条.
LOD组编辑器的改进.
改进网格框选的精度.
增加EditorGUIUtility.isProSkin方法.
物体能被分别编辑为occluders和occludees.
优化在层次面板更改父物体的性能.
微调导入/导出Package对话框.
场景视图的FPS默认会慢一点.还会有加速.
当Transform超过100.000单位的时候将显示警告.
在Navigation窗口可以改变选择对象的Navigation Static标志.
可以通过滑块来变换Gizmo.
启用或禁用组件可以使用撤销/重做.
Unity现在能导入大于6.5万个顶点的模型了.会自动切分为若干个小于6.5万个顶点的网格.
升级FBX SDK倒2012.2.
当很快速的用滑块,相关的数值将会做四舍五入似的大范围变化.如果是手动输入数值则不会进行四舍五入.
当多选不同类型的对象时,检视面板将自动帮助你只显示共同的属性.
现在可以在字体导入器中更改默认字体颜色了.

图像:
着色器关键字最大数量从32扩展到64.
每个着色器的编译错误都将显示已用关键字.
MaterialPropertyBlock现在可以有无限个属性.
OnWillRenderObject可以让你在渲染之前选择或稍微移动一个对象.这个可用于渲染通道.也可以只有在对象可视的时候启用”布告栏”效果.

光影图:
暴喽Padding选项可以控制烘焙UV的间距.
改进光影图的mipmap的创建,更改间隙填充,使得通过Mipmap缩小后的光影图整体感觉依旧不错.
优化烘焙光照贴图占用内存.

iOS:
增加Caching.SetNoBackupFlag 和 Caching.ResetNoBackupFlag 为给缓存设置”No Backup”标志.
增加iPhone.SetNoBackupFlag 和 iPhone.ResetNoBackupFlag 为设置”NoBackup”标志.
新添加的对象将默认设置”No_Backup”标志.

脚本:
JavaScript::创建新脚本时默认将自动添加”#pragma strict”.
JavaScript:当按位运算符是用在布尔操作时会建议用短布尔运算符.
JavaScript: @脚本属性声明可以在”import”之前.
JavaScript:可以定义和文件名同名的变量而不会再产生冲突.
Boo:支持语法提示.
Boo:Selective导入支持.
Boo:更好的Linq和扩展方法的支持用import System.Linq就可以了.
Boo:优化多维数组操作(某些情况下提速100多倍).

杂项:
资源导入:优化纹理导入的临时内存占用.
Asset Server:可以在管理视图复制项目.
Mac OS X 单机 :添加关闭按钮.
模型导入:警告四元数的警告现在包含模型名,大多数情况下能点击后在项目视图中高亮该模型.
MonoDevelop (JavaScript/Boo):添加有限的跳转到定义的支持.
遮挡剔除的烘焙现在不会耗尽内存.
遮挡剔除现在能很正常的计算遮挡并且也快了很多.并能工作于所有平台.
Player:当用Resources.Load/LoadAll时会预加载资源,避免卡帧.
Profiler:增加二进制Filedump文件的写出支持及编辑器中再读入分析的支持.
优化大型项目文件导入时内存占用.
脚本:增加Handheld.use32bitDisplayBuffer用于运行时更改显示缓冲的位深度.
脚本:添加WWW.textureNonReadable来标记下载的非可读文件.
SkinnedMeshes现在可以编辑为occluders和occludees.
Substance纹理的导入问题进行修复.
静态Batch网格的创建生长过程及编辑器播放模式都快了很多.
支持自动复制 Assets/StreamingAssets文件供Win/Mac执行文件用.
展UV:目前所有已知情况下,Win/Mac的展的UV都是一致的.不过要重新导入网格.
Webplayer:如果Unity3D文件嵌入使用Https协议,那么所有连接都将使用Https,包括插件的更新和下载,浏览器不会安全警告.
当进行遮挡剔除的烘焙时,如果标记为封堵的物体是透明的,将会发出警告告诉你哪些被错误标记.
当导入的资源被脚本修改过,它将不再导致资源重新导入.相反它将卸载资源和尽快从磁盘重载.这个修正解决关闭播放模式后很多资源是否需要重新导入取决于Unity的脚本.
Windows:当运行时检测连接的摇杆.

修正:
Android:
修正Texture2D.EncodeToPNG() / Application.CaptureScreenshot()产生错误的图片.
从OnApplicationPause()中调用Application.Quit产生异常的问题.
修正调用Network.TestConnection()导致应用程序崩溃的问题.
修正从OnApplicationPause()中调用Time.<方法>导致程序无响应的问题.
极少情况下从Java UI线程里调用游戏脚本会导致崩溃问题.
修正Broadcom芯片上GLES 2.0的一个渲染问题.
修正在Honeycomb/IceCreamSandwich设备上用自动转屏或任一个转屏导致崩溃的问题.
修正非开发版编译中对Debug.log的错误消息的处理保持运行性能.
修正视频回放用本地(file://)源的问题.
修正解码处理ETC1纹理的问题.
交换在编辑器中的HTC Legend分辨率或长宽比设置.
JDK7中可以正常签名应用程序而不会提示INSTALL_PARSE_FAILED_NO_CERTIFICATES错误.
Java中JNI编组空字符串导致虚拟机终止.
Basic/Pro版许可在一些地方不正确.
保存初始化的状态包Activity.onCreate不再转发Proxy活动.
当使用Application.internetReachability时更新AndroidManifest.xml的权限.
修正ACCESS_NETWORK_STATE返回值不正确的问题.
在专业版使用时自定义Splash画面导致的崩溃问题.
多核CPU上用Linux 3.x内核导致Unity无响应或崩溃问题.
用WWW从Https重定向到Http时失败的问题.
Tegra的Nvidia’s PerfHUD当应用程序暂停帧数越来越慢的问题.
几个按键的缺失,比如退格键,左右Ctrl键.
MonoBehaviour.OnApplicationFocus可以正常用了.
增加对Galaxy Note Stylus 笔的支持(通过KeyCode.LeftControl 和 KeyCode.Delete).
修正任何因为缺少目录导致错误编译的问题.
Android Remote:修正偶尔触摸延迟问题.
Android Remote:提高稳定性.

音频:
未压缩音频不显示”Decompress On Load”和”Compressed in memory”的问题.
不显示MPEG文件的BPS问题.
音频和视频:当检视面板查看视频停止时候音频也会停止.
修正自定义衰减曲线的问题.
修正32位过滤器.
libVorbis升级到最新版本.
检视面板中Lowpass过滤器的修正.
重置过滤器或混响区可以用了.
检视面板上查看那所有平台和所有音频类型的尺寸正确了.

调试器:
修正中止reentrant计算的问题.
修正nullable计算崩溃的问题.
修正在编辑器中调试时,调试器崩溃问题.

编辑器:
移动或者重命名当前已经打开的场景再次保存时将保存至新的位置,而不再是旧的位置.
编辑器:当拖动改变曲线时按下ESC可以正确的恢复.
编辑器:黑色主题配色的组件复选框修正了.
编辑器:黑色主题配色的对象选择器的调整.
ESC中止当前搜索更有效了.
编辑器:修正Animated窗口的移动问题.
修正颜色拾取器如原始颜色为(0,0,0,0)时不能正确初始化Alpha到255的问题
编辑器:修正拖动纹理到场景视图有时显示错误或者显示一个关不掉的进度条问题.
修正Mac版的对象拾取器按下ESC不能清空搜索框的问题.
修正当GameObject静态标记没有标记可被选择时现实”Nothing”的问题.
脚本编码可正常使用Utf-8编码.
修正有些Handle控制不符Handles.matrix的问题.
修正在Windows系统上鼠标光标有时闪烁的问题.
修正Windows系统编辑器中不能使用’,./][等快捷键的问题.
修正项目视图中返回的筛选结果没选中时按上光标键提示空引用的异常问题.
修正在项目视图中将子级别资源拽到根的时候空引用异常问题.
修正对象拾取器打开时搜索框没有焦点的问题.
修正当没有检视面板被打开时不能打开编辑器选项的问题.
修正查看或编辑界面中德大整数时导致精度丢失问题.
修正Windows编辑器界面重绘问题,鼠标拖到界面组件或者场景视图的手柄等等.
修正在OnSceneGUI中修改场景视图没有重置Handles.matrix的问题.
修正检视面板显示数组列表的问题.
修正动画视图还在动画编辑模式保存的问题.
编辑器:修正当给大于10000的多边形使用碰撞器提示”vertexCount>60000″的问题.
修正在检视面板修改数组成员数崩溃的问题.
修正导入不少于三个顶点多边形网格崩溃的问题.
修正Windows下下拉菜单重叠的问题.
修真COLLADA文件材质导入问题.
当提交很多资源到AssetServer时占用很多内存问题.
导入一个Package时候空参考问题.
导入巨大的Cubemap时内存溢出问题.
修正Webplayer模板自定义字段问题.
修正从3.4升级到3.5时模型的法线和切线被忽略的问题.
编辑器:修正一些特殊模型在一些非常特殊情况下扑杀的问题.
修正一些情况下场景视图卡住的问题.
修正从FBX导入材质贴图检测问题.
修正保存场景到新建的文件夹,保存对话框出现警告的问题.
修正画地形高度时树木隐藏的问题.
修正OnFocus时候关闭编辑器窗口导致崩溃问题.
修正在Windows中Unity有时候重编译脚本或改变资源反应迟钝的问题.
粒子系统的边界将遵循该粒子设定的边界.
修正DefaultAssets中用GetMiniThumbnail获得图标的问题.
未知类型资源的图标现在是被缓存的,避免有很多个未知资源在项目导致内存崩溃的问题.
改善用Visual Studio2010的问题.
Windows的安装包现在有大分辨率的图标了.
更强大的3DS文件加载.Unity处理无效的文件好多了.
ProceduralTextureInspector 和 ProceduralMaterialInspector支持多对象同时编辑.
修正ProceduralTextureInspector不能重绘问题.
修正EditorGUI的一些问题,入极少使用的参数修正.
多个项目视图窗口不共享搜索字符串.
去掉OSX Lion的一像素边线问题.
OSX系统上不允许特殊字符窜作为文件名.
用键盘浏览对象时不再发出”error”提示音.
在Windows上编译后不会每次都新打开一个浏览器窗口.
解决间歇性的无响应问题.
左键在场景视图中查看和处理时同时按下右键会取消处理.
设定TextureImporter.textureType需要设定所有必要的属性.
从一个高清的源图上生成Cubemap时减少内存占用,使内存移出崩溃可能性降低.
Windows编辑器菜单支持Unicode字符.
可以直接拖动编辑框来改变里面的数值(如Transform组件里的值).
Windows上Build Setting点击Cancel后不会再开.
Windows上资源进度条或编译进度条不会和其他应用程序抢焦点.
视图导入不支持的解码的视频时給于适当的错误提示.
检查场景相机的NaN旋转值和修正.
改善场景视图栅格精确度.
修正编辑器在后台时导致无响应问题.
在检视视图进行非成比缩放或旋转对象时候正确更新子物体缩放的问题.
在OnPostProcessModel时删除根游戏对象导致Unity崩溃问题.
导入含有异常纹理引用(像”.”和”..”)的FBX文件导致Unity崩溃的问题.
升级含有Modo文件的3.4.x项目文件夹时不会丢失网格引用.
Windows上修正常见的随即崩溃.
在Awake中调用SetActiveRecursively导致崩溃的问题.
修正间歇性编译提示”Moving file failed”的问题.
修正视图删除地形的错误问题.
高级纹理导入设置能正确的显示应有的纹理导入模式(例如发现贴图没有Linear设置).
设置颜色偏好在编辑器中可以即时看效果.
修正点击Unity子窗口,Unity不进行脚本编译的问题.

图像:
修正在OSX系统上如果Unity安装目录不是纯字母或数字导致Beast渲染烘焙失败问题.
Beast更智能选择性渲染,像完全布告栏组成的灌木丛.
静态网格的非成比缩放.
如果不支持线性照明将在设备上强制执行.
修正内部数组只有零个成员问题(如unity_LightPosition[0]).
修正没有灯光或者正在使用HDR时Deferred Rendering的问题.
修正雾效里用 Particles/Alpha Blend着色器变黑的问题.
修正Direct3D 9下 pow()错误编译问题.
修正Lightmap UV在游戏对象上预览的问题.
修正阴影的遮挡裁切不正确问题.
修正和改进HLSH到GLSL转换器和GLSL优化器.
修正没有指定Flares纹理图片导致崩溃的问题.
当纹理没有标记为可读时候用Texture2D.Compress提示错误信息.
给ParticleRenderer 和 MeshRenderer使用透明着色器渲染次序不正确的问题.
修正给GUITexture空纹理的错误信息.
修正当使用图像效果(Image Effects)时在Forward渲染模式下多个平行光阴影(通过fullfowardshadows)不正确的问题.
调整RGBM光影图编码,使用双线性过滤以便让黑暗的地方不会出现亮线.使用线性照明模式的最大区别使暗的更暗.亮的更亮.
Lightmapping: “Use in forward rend.”建议只用在双光影图模式上.
Lightmapping: 修正清楚光影图-会重置所有渲染器上的光影图索引,拼贴和位移.
Lightmapping:确保当阴影禁用的时候地平面下隐藏的部分能正常处理.修正一个光的问题.
Lightmapping:做GlossMap时候会从纹理(_MainTex)上获取Alpha.
Lightmapping:解决距离原点十分远的小场景光影问题.

iOS:
修正当使用自动复制native插件追加到Xcode项目问题.
修正当Remote Profiler连接到运行iOS5.0的iPhone上时导致编辑器无响应问题.
修正水平Splash屏幕图片预旋转到垂直方向的问题.
修正Mathf.Approximately和其他数学例程denormalized问题.
修正很多iOS5(GL错误,键盘等等)相关问题.
修正Remote Profiler支持.
修正带有Native插件的项目编译为模拟器的问题.
修正小内存泄露问题.
修正Xcode调试器中一些可怕的警告.
修正当开启自动旋转时启动应用程序旋转问题.
修正WebCamTexture.GetPixels问题.
icon-iPad.png改名为icon-72.png.
用SystemInfo.systemMemorySize可以正确返回内存大小了.
用SystemInfo.graphicsMemorySize可以返回估算的目前总显存.
SystemLanguage大幅修正,可以正确识别区域了(例如英国英语会返回英语,而不是未知).
改进.NET 2.0与WebRequest API兼容性.但是代码剔除仍需手动处理.

脚本:
修正一个导致循环不重用已经声明变量的Bug.
修正多位数租的操作.
脚本属性现在可以出现在”import”声明之前.

Mac OS X:
Mac编辑器:能正确识别用户设置编辑器所在的Space/Desktop.
Mac单机:修正鼠标点击窗口标题栏问题.
Mac单机:在OS X Lion系统崩溃时不会再显还原窗口对话框.
Mac单机:当窗口模式下选择取消退出可正常用.
Mac Webplayer:修正在Firefox 6浏览器一个后台标签页面载入Unity崩溃的问题.
Mac Webplayer:修正Firefox7下调整Unity内容尺寸导致崩溃的问题.
Mac Webplayer:修正CoreAnimation插件在全屏模式里滚轮事件的问题.
Mac Webplayer:在OS X Webpalyer中可以用输入法了.
Mac Webplayer: Input.inputString已经包含Backspace和delete字符.
Mac Webplayer: 修正已正确处理鼠标.修正Safari 5.1下Magic Trackpad的支持.
Mac OS X:修正一些游戏手柄开关输入问题.
Mac OS X:修正输入类中左右修饰键的区别.
Mac Webplayer: 修正用Image Effects不同的渲染问题.

Windows:
Windows 64位单机:修正设置可执行文件图标.
修正从睡眠或解锁计算机时候蒙皮网格暂时无法显示的问题.
Windows Webplayer:修正锁定电脑或者更改分辨率导致图像偶尔损坏的问题.
Windows:当网页播放器进入或退出全屏不会丢失焦点.
Windows:Joystick 0能返回正确的轴坐标值.

物理:
如果被禁用,Collider.bounds 将始终返回空边界(之前会反复无常).当胶囊碰撞盒连续旋转返回连续碰撞检测的修正.
修正CCD不能工作在游戏等第一个场景问题.
修正禁用CharacterController内调用CharacterController禁用崩溃的问题.
修正用GameObject.SetActiveRecursively()时碰撞盒创建缓慢的问题.
物理计数能正常反馈在Profiler中并不会一直递增下去.
删除物理探查器中的”Solver rigidbodies”,因为它没啥用.
修正创建一个有太多树碰撞器的地形导致崩溃问题.

杂项:
Asset Server:修正从Asset Server历史视图恢复旧版本的项目设置导致崩溃的问题.
Asset Server:当检测出是一个新项目,本地项目设置将不会提示文件不同.
AssetBundles:修正用AssetBundle.mainAsset会加载所有依赖关系的主资源问题.
AssetBundles:修正同时下载多个启用缓存的资源束导致偶尔崩溃的问题.
资源导入:修正导入名字含有”..”的资源导致崩溃问题.
资源导入:修正动画包含到(0,0,0)缩放时产生一个非常大的包围盒问题.这也同时导致阴影盒扑杀计算等问题.
AssetStore:修正在资源商店正在加载一个页面时关闭Unity或者切换项目导致崩溃的问题.
预设内容执行顺序现在和没有预设的对象执行顺序(删除OnDisable/OnEnable)是100%一致的.
修正渲染线程和GPU之间同步问题.这个可以修正和优化输入滞后的问题.
修正当Profiler在后台开启导致编辑器冻结的问题.
修正 AsyncOperation.progress显示加载进度问题.
修正用GUIStyle.fontSize时字体字距问题.
修正Cache和Application.persistentDataPath乱码问题.
使 Assembly.Location能正确返回实际位置,而不是”data-09340sdf9gsd0fg”.
修正用FindObjectsOfType查找Texture2D类型的资源时不返回Cubemap的问题.
MonoDevelop:修正当添加调试器时候出现未处理异常问题.
MonoDevelop:更强大的脚本编码检测.
MonoDevelop:不再打开脚本项目两次.
MonoDevelop:确保使所选的脚本窗口获得焦点.
联网:修正通过代理连接不能正确显示NetworkView同步状态.
联网:修正网络连接测试失败返回结果.
联网:修正当网络没有被初始化用NetworkPlayer.guid导致崩溃问题.
联网:修正在OnNetworkInstantiate内读取NetworkMessageInfo.networkView可能崩溃的问题.
联网:修正在Windows系统下用VPN/代理软件控制的浏览器使用内建的多人网络的问题.DNS和接口IP是不同的.
遮挡剔除:修正内存溢出的问题,改善闭塞计算的准确性.
探查器:GPU探查器在图像效果方面能更好的显示效果.
探查器:更可靠Player连接发现.
探查器:不能正确返回实例ID,使得与编辑器中的实例ID不符,造成探查器详细信息视图显示错误实例名称.
脚本:修正在场景销毁旗舰重定GameObject父级导致崩溃的问题.
Substance:修正修改纹理(改尺寸)属性导致崩溃问题.
不会再在一个对象上反复发送多个鼠标按下鼠标抬起的事件.
Webplayer和单机:在Windows上能正确返回Event.delta的值.
Webplayer:修正窗口卸载时导致的内存泄露问题.
Webpalyer:在Windows上调整Webplayer的尺寸减少视觉效果产生,避免不好的效果.

改变:
给KeyCode加入Joystick 4.
Android/iOS:Android Target Graphics的设置和iOS Target Graphics的设置不再关联.

Android
给Native进程添加名称便于调试.
更改Force Internet Permission为 Internet Access(Auto / Require).
更改Force SD-Card Permission权限为Write Access(Internal Only / External (SDCard)).
从Java端的开发版本也有扩展日志记录.
编辑器编译Android程序需要至少API Level 14,但是它仍旧支持早期的平台.
强制用debug.checkjni时候会使用开发版编译(防止插件错误调用JNI).
如果一直没用LVL代码将一直输出错误.
重组classes.jar里的Java代码.
模拟设备项被移出,因为Android Virtual Device (with SDK-r14) 已经支持ARMv6/ARMv7的二进制文件运行.
Splash图像解码改为32位纹理.
在Build Settings里加入纹理压缩覆盖选项,可以很方便的将所有纹理压缩成所选择的纹理压缩格式.
为了用AssetBundles流时节省内存,缓冲区压缩的并行数量做了减少.
增加了临时内存(240KB,在场景载入器)来处理大项目加载,但是浪费载入时间.

编辑器:
为EditorApplication.SaveScene增加saveAsCopy参数来实现场景另存.
资源路径不再允许以空格字符开始.
将Blender文件导入从2.56更新到2.58,实际也能很好的支持2.59.
OnSceneGUI现在能被在自定义编辑器中所有选中的对象调用,而不仅仅使在编辑器检视面板能看见的.
在编辑器中不再允许以文件名创建或导入资源.是系统不允许.
拖拽的同时按取消是无效的,所以干脆禁用了.不过可以用ESC来实现取消.

iOS:
在PlayerSettings中添加5.0SDK选择.
给iPhone.generation增加iPhone4S类型.
当图标或者闪屏使用压缩的纹理时将进行提示.
更改目标设备不需要再覆盖生成Xcode项目.
支持Screen.dpi检测.

杂项:
Mac单机:将缓存文件位置改到~/Library/Caches/bundleID为了符合Mac App Store规范。
Mac OS X:用系统事件来做到更稳定的鼠标滚轮输入,但仅工作在鼠标光标所在的窗口.
移除OS X Dashboard的支持
移除OS X PowerPC 的支持.
移除Unitron和UniSciTE的支持.
剥离:第三方库可以被剥离来缩小应用尺寸,但是要是用了 reflection和generics要格外小心.
Windows Webplayer:如果没有安装图像驱动,Unity将不会用非常糟糕的OpenGL 1.1渲染器运行游戏.会显示一个错误消息给用户.
WWW: WWW.text现在有charset属性.
WWW:www.error的字符可以获得HTTP错误.
WWW:修正HTTP头,即使发生错误也已就能添加状态代码到”STATUS”键下.

已知问题:
Android:如果用了Image Filters时,用Handheld.use32bitDisplayBuffer(或者其他方式再现GL的情况下,如更改AA设置)将导致崩溃.
Android:麦克风录音在一些设备会导致崩溃,用Samsung Galaxy Tab和Galaxy Nexus时要注意.
Lightmapping:标记为静态光照的蒙皮网格不能正确显示UV预览.
模型导入:Autodesk 3ds Max的Tiling值和Maya(或Unity)不同,Tiling在Unity中是在纹理左下角.
模型导入:已经提出修正COLLADA格式的导入,可能会影响导入后预设关联.会直接影响到Modo导出的COLLADA或Modo的直接文件导入Unity.
模型导入:不能同时从Autodesk 3ds Max导入正确的透明纹理和纹理透明度,因为Max输出透明值(TransparencyFactor).
Max OS X 10.5:在这个系统下编译Building Webplayer, Webplayer Streamed, Webplayer Offline Developmen和Mac OS Widget不能用.

升级指南
由于加入了一个新的资源版本系统,所以导入以前版本的项目时,将导致纹理,模型,材质和音频重新导入.
在3.5中给动画节点添加了一个额外的根节点,以前如果同一个角色有多个动作文件,只需要加入@命名后就可关联动画文件.但这种在3.5中有极少情况下会导致导入的动画无法播放,修正的办法是让所有动作文件都包含模型.
不再支持多个根GameObject的预设,遇到这样的预设Unity将自动创建一个带有一个根GameObject的预设.
在Mac系统上开发Webplayer,现在需要Mac 10.6系统以上,而最终用户可以继续使用10.5系统.
终止对Mac OS X 10.4的支持,不过现在的3.5发布的Webplayer仍然可以运行在旧的系统.
Unity3.5移除了对PowerPc和Dashboard的编译支持.
现在Mac OS X的Webplayer在Chrome和Firefox浏览器下支持输入法的输入.如果开启输入法,每个按键都不会有KeyUp事件,而只有KeyDown事件用于字符输入.默认情况下这个会在文本编辑框得到焦点时启用.你可以通过Input.imeCompositionMode来改变这个行为.
Unity3.5将转换已有着色器工作于定向光照贴图.但解码定向光照贴图将比计算定向光照明多耗一点资源.如果只是用Shader Model 2.0(64条指令)编写的着色器.可以会在转换时去除此指令数限制导致无法编译.为解决这个问题,你可以参考Shader model 3.0(http://unity3d.com/support/documentation/Components/SL-ShaderPrograms.html)或或者用关键字”nodirlightmap”禁用定向光照贴图(http://unity3d.com/support/documentation/Components/SL-SurfaceShaders.html).

原文:http://unity3d.com/unity/whats-new/unity-3.5
由威阿人工翻译,转载请注明来自1Vr.Cn,否则TJJTDS!哈哈.

Unity界面插件NGUI核心组件说明

UICamera-可以添加到任何相机,包含事件系统.

UICamera是每个UI的重要组成部分.它负责发送Camera中所有NGUI的活动.如果场景中仅有一个Camera,要确保它附有UICamera脚本.如果有多个相机,确保至少用来渲染UI的相机有UICamera脚本.当将这个脚本放在主相机上时,在游戏场景中的所有都将有OnClick, OnHover, OnDrag等事件.

参数
Tooltip Delay:设定悬停与对象多少秒才执行OnTooltip事件.
如果使用Orthographic Projection相机,建议将相机的Size的尺寸设置为当前分辨率高度的一半.比如针对iPad的屏幕1024*768分辨率,就设置Size为384.另外一种方法是保持Size是1,缩放UI的Root为该值的倒数,比如在iPad上获得完美尺寸你需要设置Root的缩放到1/384或者0.002604167.第二种方法比较容易实行,不过物体在场景视图中照比其他物体会比较小.

如果你仍旧不知道怎么设置正交相机的尺寸,那么尝试看看下面这图.

UIAtlas-定义精灵的纹理图

UIAtlas是一个容器,它包含了一堆sprite的坐标信息.如果你不熟悉这个概念.你可以这样认为:使用一张包含很多小贴图的大贴图比用若干张小贴图更有效率.而大贴图中的小的贴图被称作为精灵(sprite),大纹理成为图集(atlas).

你使用NGUI之前都需要创建一个图集(或使用现有的).可以从这里了解图集的做法.当然也可以直接使用UITexture,但它并不能应对所有问题.

Material:是描述绘制本图集的材料.通常推荐用unlit着色器,比如用.Unlit – Transparent Colored为NGUI.
TP Import:用于导入从TexturePacker导出的精灵.只需要拖拽输出的Txt文件和所有精灵即可.
Coordinates:这允许你从基于像素的坐标系切换为基于UV的坐标系.通常都是以像素坐标系制作,但如果你需要重新调整纹理,则要先切换为纹理坐标.
New Sprite:允许已当前选择的精灵为范本创建新的精灵.
Delete:删除所选精灵.
Sprite:可以通过下拉列表选择所有正在使用的精灵.
Edit Name:重命名精灵的名称.
Outer Rect:设置精灵的外边框.
Inner Rect 设置精灵的内边框,如果你不使用UISlicedSprite,可以跳过这个设置.
Padding:微调校正精灵的偏移量
Correction:基础的校正精灵的坐标使用完美整数像素.
Show:检查精灵在图集中的位置.

提示
可以将精灵组织成组创建多个图集.只要图集共享相同的材质,那么控件仍旧会使用很少的DrawCall.
为达到最佳效果,推荐将纹理的wrap模式设置为”Clamp”和将格式设置为”Truecolor”.
将类似的纹理做成一个图集是很好的方式,但是要尽量减少同时使用的图集数量.
如果你是使用Texture Packer工具来创建图集,要在输出设置中选择Unity3D.

如果你是用Photoshop创建图集,你能通过选择工具配合info panel面板来找出精灵的位置和尺寸.    

UIFont-字体图集
UIFont可以设置UI所使用的字体数据和材质.可以使用免费的BMFont,或使用更专业的Glyph Designer.一般只做一次字体,保存为一个预设,作为新标签所用的字体.参数:

Import Font:用于导入Glyph Designer.或BMFont输出的FNT(改后缀为TXT)数据.
UIAtlas:用来设置字体纹理所在的图集,根据是否已选定UIAtlas,你会看到一下选项
    如果UIAtlas已指定,你可以选择使用字体的精灵.
    如果没有指定UIAtlas,你可以选择用来绘制字体的材质.在NGUI中通常用”Unlit”类别下的着色器,如“Unlit – Transparent Colored”.
    你可以调整字体在材质纹理内的像素矩形.
    快速校正完美像素坐标,四舍五入到最近的像素值.
Spacing:可以调整字符之间的间距.
Show:检查字体在纹理贴图中的位置.

提示
为达到最佳效果,推荐将纹理的wrap模式设置为”Clamp”和将格式设置为”Truecolor”.
可以将多个字体合并为一个图集.这样整个UI使用这些字体,仍旧会保持一个DrawCall.
你可以给字体增加斜角,阴影,描边等效果,只要确保BMFont导出之前你设置好足够的边距和间距就可以了.

UISprite-从图集中画一个精灵

UISprite是第二个不常用的插件(第一个是UITexture),它唯一用途就是绘制地图集的一部分.

参数
Transform:是很重要的一个组件,每个控件都可以通过Transform来进行位置和大小的调整.它也会影响到”Make Pixel-Perfect”.你可以在它和UICamera之间任选一个来进行”完美像素”的调整.
UIAtlas:用来指定所使用的图集.拖拽或者按下左侧的按钮选择最近使用的图集.
Sprite:选择图集中使用的精灵.选择好精灵后.点击一下”Make Pixel-Perfect”会自动为你调整Transform的尺寸.
Depth是避免用Unity的Z排序(效率不好),而且如果你要旋转UI窗口.单纯的通过调整每个控件的Transform的Z轴来排序是不行的.所以要用这个深度来排序.
Color Tint:用来调整色调.
Make Pixel-Perfect:让你快速调整控件的尺寸到实际像素尺寸.
Pivot:选择部件的坐标原点位置.
Preview:预览精灵的纹理.

提示:
如果你看到两个控件有闪烁,意味着你设置了同样的Depth导致了重叠,你要调整不同的深度,让它们不重叠.
不要把多个控件混在一起,否则会影响到完美像素这个功能.添加新控件时要注意保持创建新的子对象.
也可以在使用完美像素按钮后再移动组合控件.

Label-用指定的字体绘制一个文本标签

UILabel被用来显示文字.支持多行,只需要用”
“换行即可.允许用[RrGgBb]来建立彩色文字.

参数:
Transform:是很重要的一个组件,每个控件都可以通过Transform来进行位置和大小的调整.它也会影响到”Make Pixel-Perfect”.你可以在它和UICamera之间任选一个来进行”完美像素”的调整.
UIFont:你可以选择用于这个标签的字体.你可以拖拽预设或者按下按钮选择最近使用的字体.
可以通过使用”
“来决定标签是多行还是单行,同样可以用16进制颜色值来定义彩色文字,以[RrGgBb]开始,以[-]结束.如”Hello [FF0000]World[-]!”,最后的结果是World是红色的文字.
Line Width:用来指定文字行的最大宽度,如果是单行文本则切掉超出的.如多行文本则会根据宽度自动换行.
Multi-line:选择该项后标签达到最大宽度后会自动换行.
Password:勾选后字符将自动转为星号.
Encoding:勾选后会关闭特殊字符处理,一般用于输入框.
Depth:改边标签控件的层级.
Color Tint:更改文本的主色调.
Make Pixel-Perfect: 让你快速调整控件的尺寸到实际像素尺寸.
Pivot:选择部件的坐标原点位置.
Preview:预览精灵的纹理.

提示:
如果你看到文本闪烁或看到被其他控件覆盖了.那么就要调整它的深度.
如果遇到复杂字符串(如斜体,标点,括号混合的)需要增加行宽度避免超宽.
用”
“和颜色,仅一个标签就可以做到下面的效果.

UIPanel-为控件分组,用于管理和优化DrawCalls

UIPanel用来负责创建实际的几何体.不必特别添加UIPanel,只要创建一个控件,它就会自动被添加.你可以创建多个Panel,用于多个菜单.

参数:
Normals:显示法线,用来检查UI正反是否正确.
Gizmos:用来显示几何体,可供选取用.
Debug:配合调试检查场景视图的几何体,如果你开启了这个.就应该取消掉上面Gizmos这个选项.
Widgets:会显示有多少个控件在这个Panel上.
Draw Calls:可以看到用了多少个DrawCall,这个越低越好.
Clipping:可以选择你要显示的部分,默认是不进行裁切的.是利用着色器进行裁切的,如果开启这个选项,NGUI将自动切换为有裁切属性的着色器.
    如果开启裁切.你可以通过Center和Size来设置裁切盒.单位为像素.
    如果选择柔化边缘裁切,将会有40像素的柔化边缘供处理柔化效果.
Material:是只读的,可以看面板用了多少个材质.一个材质将占用一个DrawCall.

提示:
默认情况下如果没有UIPanel的话,会被最根的控件创建并作为其父对象.而且最好让你多个控件都用一个父对象,便于管理.
如果Panels下没有控件.你可以放心的删除这个面板.
如果你删除一个存有控件的Panels,它和它下面的控件都会消失,但是当你播放时,所有控件又会重现,因为又自动创建了一个欣的UIPanel.
当没有变化时,几何体不会重建,这意味着如果有个完全静止的UI,不会没帧都去更新几何形状,相反它也会被重用,提高性能.

    UIAnchor-能让控件自动配合屏幕尺寸,填充满屏和保持真实像素尺寸的UI.

UIAnchor有多种用途,其中包括在多种分辨率的屏幕的相对定位.
如果你将它放在2D UI的root上,它会自动进行完美像素处理.
如果将它用于一个对象,它将辅助对象在屏幕上的定位,比如侧边或者角落.
比如放在一个精灵上,可以用来将精灵自动填满整个屏幕,比如做个背景.

参数:
HUD Camera是用来绘制该对象的相机,通常会自动选择的.
Side:设置锚点,有4个边,4个角和中心供选择.
Half Pixel Offset:让控件有半像素的位移以避免DirectX 9在Windows机器上的一个Bug.
Stretch To Fill:缩放填充,一般做背景时候会使用它.
Depth Offset:用于基于透视相机时调整计算点的深度.

提示:
如果对象有UIAnchor这个脚本,它自身的Transform将不接受你的修改,因为它受控于这个脚本.如果你希望添加基于这个锚点的位移,你可以添加一个子对象.比如你希望有个控件始终在屏幕偏移(100,100)这个位置,你应该在层次面板做这样的结构.UI->Anchor->Offset->Widget.
UIAnchor同样可用于非正交相机.
如果UIOrthoCamera附加到相机,用UIAnchor创建的界面将固定尺寸和位置,无论你将屏幕尺寸改成多大.

Events-NGUI强大的事件系统
UIEvents-事件系统
你可以添加下面的方法脚本到控件或者带有碰撞盒的游戏对象,当然也可以赋予给相机,不过需要相机同时有UICamera脚本:
void OnHover (bool isOver):当鼠标移出或者悬停在某个碰撞器上的时候返回布尔值.在触摸设备上不会有作用.
void OnPress (bool isDown):当鼠标或者触摸到碰撞器发生布尔值返回.
void OnSelect (bool selected):当鼠标或者触摸从OnPress发生后的释放将会返回这个布尔值.
void OnClick():和OnSelect的产生条件相同,当点击或触摸碰撞器并且没有发生拖拽时候触发.
void OnDrag (Vector2 delta):当移动鼠标或者触摸按下时候位移超过特定阀值时触发.
void OnDrop (GameObject drag):当鼠标或触摸释放于从发生OnDrag的不同碰撞器伤触发.传递的参数是产生OnDrag的游戏对象.
void OnInput (string text):当一个OnSelect发生后在同一个碰撞器上触发输入.一般只有UIInput用它.
void OnTooltip (bool show):当鼠标悬停超过tooltipDelay时间后触发该命令.触摸设备上不会有作用.

可以用UICamera.lastCamera找到谁发出的事件,可用UICamera.lastHit得到谁接受这个事件,以及用UICamera.lastTouchPosition得到触摸或屏幕的位置

下面的脚本赋予一个碰撞器时,点击这个碰撞器会输出HelloWorld.

原文:http://www.tasharen.com/?page_id=197
由威阿翻译,转载请注明来自1Vr.Cn

Unity界面插件NGUI基础教程

一:创建你的界面

1.创建一个新场景.
2.选择并删除场景里的MainCamera.
3.在NGUI菜单下选择Create a New UI,会打开UI创建向导.
4.在创建向导中你能更改UI的基本参数,现在我们选Default layer.点击Create Your UI 按钮.
5.就这样,你的UI创建好了.

如果在一个已存在NGUI的项目中你要跳过第二步,并且你要选择一个不同的UI层,你还要确保非GUI相机不渲染UI层.

在做具体UI控件之前,我们看看UI向导为我们做了什么.

1.在2D的根对象上有个UIRoot脚本.这个脚本会重新调整游戏对象符合你的屏幕高度,有自动和手动选择高度.
2.Camera对象包含Camera和UICamera脚本.UICamera脚本包含NGUI的时间系统.

3.Anchor包含UIAnchor脚本.虽然这个脚本可以附加给控件,但在这里可以避免Windows机器上半个像素偏移的问题.
4.Panel对象有UIPanel脚本呢,UIPanel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少DrawCall.

同样你可能还注意到目前自动帮你选中了Panel对象,也就是说下面添加的所有部件都将在作为它的子对象.

二:精灵Sprite

现在让我们添加一些控件,在NGUI菜单中选择Create a Widget.

这个向导会指导你建立一些基本的控件.需要选择所实用的Atlas和字体,因为是新建的项目,所有按下Atlas和Font按钮没有效果,相反会自动复制为你最近使用的元素.我们这里先选择Atlas为SciFi Atlas,字体为SciFi Font-Normal.

接下来在Template选择创建什么类型的控件.这个的模板只是帮助你开始创建,当你真正使用NGUI的时候.你会经常用这个向导创建控件的基本体.

现在,让我们创建第一个控件.

1.假设我们Atlas选择的是SciFi Atlas,我们给Sprite选择Dark.
2.点击Add To按钮,(如果按钮是灰色的,那是因为你没有选择Atlas).
3.你的Sprite现在已经创建并选中了.不过它非常小,让我们用Transform来调整它符合我们的需要.

一个值得注意的事是同一个atlas中创建控件不会响应Z轴变换,不过你可以调整Depth参数来调整他们的前后次序.如果后面你用了多个atlase或者多个UI面板,那么你就可以去调整Z轴变换.

你可以尝试添加更多的控件,比如加入一个Sliced Sprite(一个含有9个切片的Sprite,创建固定边框的控件最佳选择),一个Tiled Sprite(一个Sprite缩放填充整个区域)和Filled Sprite(每个Sprite都会有一个单独的参数来控制那些是可见的,常被用来做进度条或者滚动条).如果你找不到它们也没关系,后面的教程将讲解它们.

三:9-Slicing Sprite

1.选择Panel对象,用控件向导添加一个”Drak”的Sliced Sprite.什么叫9-slicing?查看这里:http://www.adobe.com/designcenter/video_workshop/html/vid0204.html
2.调整缩放为(500,500,1).
3.添加另外一个Sliced Sprite并设置缩放为(500,40,1).
4.更改第二个sprite的位置到(0,230,0).
5.更改Sprite的Dark为Light.
6.向下图一样调整两个sprite的颜色.
7.调整Depth,让彩色的sprite在大的sprite前面.

现在看起来像个小窗口了.

四:拼贴精灵

1.选择Panel对象,添加Tiled Sprite,并选择Honeycomb sprite.
2.设置它的位置为(0,-19,0)和缩放为(494,457,1).
3.同样你要设置深度调整前后次序.

可以按照自己的意愿调整它的颜色使他看起来更好.

你可以在任何时候通过选择Panel对象中的Debug Info的Geometry项来查看创建的控件的几何网格.

添加了这么多东西,目前依旧仅有一个Draw call.

五:标签

1.像前面讲的一样方法选择Panel对象并添加一个Label控件.
2.并点击Add To 按钮,如果Add To按钮不可用,是因为你没有指定字体,可以给Font栏指定”SciFi Font-Normal”.
3.在检视面板给刚添加的UILabel的Text项添加一些文本.比如Hello World!
4.移动标签位置到(0,234,0),让它出现在标题栏上.

可以添加多个Label并且使用16进制的值描述不同颜色.以[FF0000]开始,[-]结束,在这之间的文本都会变为红色.

因为使用了相同的字体相同的材质,所有整个场景依旧是一个DrawCall.

六:按钮

现在,你应该可以很容易的创建一个按钮了,但还不知道如何让它接受点击时间.不过这很简单,任何碰撞盒都会收到它应有的事件.所以,一个简单的按钮你只需要在NGUI下选择Attach a Collider给控件,另外NGUI的模板已经有按钮末班,让我们看看.

我们选择Panel,用向导创建一个Button.

你能看到按钮有多个部分,一个是背景,一个是文本标签还有一些脚本,这就是NGUI的特性,多个小组件像乐高积木一样组合成强大的控件.

1. UIButtonColor当鼠标悬停在按钮或者按下的颜色.
2. UIButtonScale当鼠标悬停在按钮上时按钮放大.
3. UIButtonOffset当按下按钮时按钮像右下的位移.
4. UIButtonSound当按钮按下时播放声音.

当然还有其他组件,比如UIButtonPlayAnimation 和 UIButtonMessage,你自己摸索喽.

你也可以添加自定义事件让它处理更多的事件.

现在,你应该做成这样的一个界面了.

七:滑块

下面让我们添加一个滑块.

1.用Widget Tool,选择Slider模板.
2.给Foreground用Button,给Background用Dark.Thumb可以也用Button.
3.选择Panel后点击Add To按钮.

一个滑块滚动条就做好了.你可以选择滑块的游戏对象进行颜色和尺寸的调整,但是经验建议你不要去调整控件对象下面的子对象.

你可以尝试再做一个垂直滑块.

八:复选框

接下来我们来做复选框:

1.点击蒙版用”X”,背景用”Dark”.
2.创建一个复选框后再选择Panel对象创建一个新GameObject.
3.添加更多的复选框到这个GameObject.
4.在这些复选框上选择Option项.
5.运行一下程序,点击复选框.看看效果.

有关联的复选框只需要放在同一个父游戏对象中即可.

还可以附件一些其他事件处理功能,如UICheckboxControlledComponent 和 UICheckboxControlledObject.可以用来由复选框状态来启用禁用指定的组件或者游戏对象.

尝试着做3个复选框来控制红,绿,蓝三个控件的显隐.

九:输入框

现在我们来创建一个输入框.任何文本标签通过添加碰撞盒盒UIInput脚本都可以变成输入框.不过这里我们也可以用Input模板来创建:

1.正如你掌握的,用Widget Tool创建输入框.
2.可以用”Dark”或”Highlight”作为背景.
3.将它调试正确.

播放游戏,点击输入框就可以直接输入文字,在iOS和Android设备上则会自动显示屏幕键盘.这个输入框同样也支持Unity3.4.1新增的输入法类,让你能输入中文.目前唯一不支持Flash平台,因为Unity Flash还没增加IME输入支持.

十:三维界面

上面的我们一直在做2D的界面,但我们也可以很容易的让它变成3D界面.继续跟着我做吧:

1.将Panel从Anchor的子物体中解除掉,由UI Root作为它的父对象.
2.删除Anchor(本教程我们只做静止的UI).
3.将摄影机改成透视投影.
4.将相机的Near改为0.1和Far改为4.0.
5.将相机往后移动一点,大概在(0,0,-550)的位置.
6.给Panel一点角度,我们这里设置旋转为(0,345,0).
7.另外一个霸气的东西就是添加PanWithMouse到Camera.

点击Play,试着移动鼠标.看发生了什么.如果你做的没错,你将会看到下面这样的窗口.

原文:http://www.tasharen.com/?page_id=197
由威阿翻译,转载请注明来自1Vr.Cn,否则MJJ!哈哈.