Unity内建Package简要说明

Unity内建了一些Package,方便我们使用,在创建项目时或者创建后都可以根据实际需要添加Package.

Custom Package : 导入第三方资源包,包括自己打出的Package都可以从这里导入,有很多初学者会遇到导入失败提示解压失败之类的错误,多数情况因为中文路径导致,最常见是将Package放在了系统桌面上进行导入.解决办法是放在纯英文路径下.

Character Controller : 角色控制相关代码,包括第一人称的预设,第三人称的预设.绘制完场景拖这里的预设到场景就可以简单的浏览查看.

Glass Refraction : 玻璃折射效果包,一般用来做真实的玻璃或水晶效果,仅在专业版Unity下支持.

Image Effects : 一些图像特效,如动态模糊效果,黑白效果,HDR效果,景深效果,辉光效果,是针对相机图像进行处理的.具体包含内容可以导入这个包,挨个测试一下就知道了.

Light Cookies : 灯光投影的一些图片资源,用于Projector,可以模拟日光灯,手电筒的光斑投影.可一同导入Projectors包.

Light Flares : 光晕的一些资源,比如模拟镜头光晕,夜晚灯光的发光效果等等.

Particles : 一些粒子预设,比如烟雾的效果,水花效果等等.

Physic Materials : 物理材质,设置好参数的物理材质预设,如木头,石头,金属等等.用于模拟物理交互用.

Projectors : 投影预设,如在高低起伏的地面上投射角色的简单影子,不需要实时灯光支持.

Scripts : 一些常用的脚本,如相机的跟随脚本,鼠标旋转,网格整合脚本等等.

Skyboxes : 天空盒素材,夜晚的,白天的,阴天的等等.

Standard Assets : 为移动平台准备的标准资源包,适合移动平台的材质资源,以及适合触屏的控制预设,比如摇杆之类.

Terrain Assets : 地形引擎的一些资源,草地贴图等等.

Toon Shading : 卡通效果相关着色器,描边效果可以试试这个包里面的材质.

Tree Creator : Unity的造树工具,可以简单的创建各种各样的树木,用于地形系统上植被绘制.

Water :这里有两个水资源包,一个用于基础版,一个用于专业版,可以快速创建漂亮的水面效果,两个包的显著区别是专业版的水Package含有真实的折射反射等高级效果.

威阿原创文章,转载请注明来自1Vr.Cn,否则MJJ.

Unity3.5.3更新修正列表

本版Unity最初包含对Unity 3.5的修改.关于最新性能的具体消息请见Unity 3.5发行备注(http://unity3d.com/unity/whats-new/unity-3.5).

改进
音频:修复使用无间隙MP3解码时的音频畸变.
缓存服务器:修复连接问题.
开发播放器将再次显示文件名和堆栈踪迹中的行数.
图像:在播放器设置中新加入优化网格数据选项.打开播放器,会自动移除无用的网格组件(例如:在所有着色器都不使用正常映射的情况下,可移除所有的切线向量).这样可以控制游戏大小和运行时表现.
图像:加入摄像机透明度分类模式,控制透明对象的分类.如果您在2D游戏中使用透视摄影机,您将可以拥有正确的对象分类!
图像:清除网格(Mesh.Clear)可以保留现有的顶点分布,提高您在运行时重组网络的效率.如果您想要完全清除网格,包括清除顶点形式分布,使用Mesh.Clear(伪).
iOS:自动包含的自带插件同样符合“符号链接Unity库”旗帜.建立档案时请关闭此面旗帜.
本地客户端:64-bit NaCl中脚本代码崩溃修复(64位Windows或Linux).
剖面测量仪:观测大型框架时(深度剖面)减少剖面测量仪的内存占用.
网络播放器:让浏览器对用户在Windows上的输入更敏感.
已知问题
安卓:32位显示缓冲器中,Kindle上不运行自动循环.请加强播放器设置的定位.
修复
本地客户端的Unity更新至NaCl SDK新版本,修复了一些问题.输送NaCl SDK游戏需要利用Unity3.5.3重新建立,因为该类游戏在将来的谷歌Chrome浏览器的版本中将不再适用!

安卓:JDK 7安装工具现在在窗口中自动检测.
安卓:现在使用错误的值类型读取播放器偏好会返回默认值.
安卓:退出应用程序时修复少见的紊乱情况.
安卓:在应用程序中加入对gdb服务器的支持.
安卓:在密钥库别名/密码中可以使用空格.
安卓:输入密码错误时提示信息更完善.
安卓:为应用程序签名时强制使用SHA1摘要算法,确保其被谷歌在线商店 (Google Play Store) 接受.
安卓:根据谷歌建议,创建密钥时强制使用RSA密钥算法.
安卓:修复当Kindle合成器使用显示缓冲器的alpha值的方法不正确时产生的漏洞
安卓:当编译引起sgs2升级到ics过程中的错误时,对着色器加入警告信息.
安卓:修复Éclair设备暂停时的返回故障.
安卓:修复PowerVR GPUs上批量/动力几何的perf复原.
缓存服务器:当在磁盘中更新,并且缓存服务器活跃时,本地资源(预制品、材料等)不能在编辑器里更新的时候产生的问题得到修复.
编辑器:运转不再产生多余的动画曲线
编辑器:修复从Unity3.4转换而来的项目中显示的弃用编辑延展实施(“Deprecated EditorExtensionImpl” )资源
编辑器:修正选择多项不同类别的可编辑脚本资源时产生的崩溃情况.
编辑器:修正系列化属性错误,该错误在某一阵列为最后提取的元素时,会引发空引用.
编辑器:修复标签,使之可储存在元数据中,并在检测器中正确显示.
编辑器:正确清除拖放缓存器,让旧数据不会滞留而产生问题.
编辑器:通过极度精确的四边形数据修复Windows错误线框渲染(如10000阴影四边形线框)
编辑器:修正当同一个文件夹中存在“Tree A”和“TreeA”之类名称的资源时,在Windows系统中的崩溃问题(改写MS-DOS系统中的简称!)
图像:修复不需要UV通道时资源网格的静态分批.
图像:修复错误输出顶点计算中联合网格中的漏洞.这就修复了一些显卡中联合网格的漏洞.
图像:在根据脚本设置网格顶点时正确验证阵列大小.
输入:重新与Windows连接之后正确检测控制器.
输入:忽略直接输入中的注册设定.
iOS:修复Xcode项目中的自动.a插件.
iOS:修复所有和喷溅定位有关的问题.
iOS:在所有非动画运行中,从Unity视角修复所有和本地UI有关的问题.
iOS:修复所有和xcode4.5开发版相关的问题.
移动电话:启动分析器时额外加入登陆程序(通过Wi-Fi或USB),当用编辑器无法看到设备时协助进行调试.
移动电话:修复固定功能中着色器生成,以便应对一个以上的TexGen CubeReflect样本.
NavMesh:优化navemesh bake的内存应用.在内存不够时不会导致崩溃,而是返回错误信息.
NavMesh:设置代理目标不会影响停止距离行为.
NavMesh:设置更新循环后,代理方面明确设置转换循环
网络:通过GUID修复服务器保护密码时遇到的问题.
着色器:修复表层着色器印花:在使用正常映射或透镜时的混合模式.
着色器:对移动区着色器转译的各种修复(HLSL -> GLSL编译器)
着色器:修复Windows上着色器模型3.0着色器的错误设置.
升级指南
在Unity3.4中,实时灯光没有影响静态物体.在Unity3.5中,实时灯光会影响静态和动态的物体.

结果就是,如果您之前开启灯光修复此漏洞,表现性能将不如此前,因为这时您会接收到两次照明.由于您的灯光两次被开启,因此表面看起来也会有所不同.

正确使用灯光的方式是使用单自动方向灯,移除实时灯光.

如果您希望拥有不同的实时灯光,而不是静态灯光,那么您应该使用灯罩,只照动态物体.

升级指南:http://forum.unity3d.com/threads/116479-Disappointed-with-performance?p=833498&viewfull=1#post833498

原文地址:http://china.unity3d.com/unity/whats-new/unity-3.5.3

Unity3.5.2更新修正列表

这次发行的Unity 3.5.2主要是对Unity 3.5的更新.想要了解更多新特性 ,请查阅Unity 3.5发行说明(http://unity3d.com/unity/whats-new/unity-3.5).

改进
iOS:在AppController.mm中加入UnityGetGLView功能,返回到unity所使用的视图.
iOS:现在如果在“retina”设备上运行,闪屏会使用“retina”影像.
Flash:引入System.Attribute 基类型,从而可以更方便地编译定制属性.
Flash:现在可以启动构造器,构造器给出byref参数.
Flash:Stage3D路径速度有所提高,同时11.1和11.2设置的路径执行变得更快.
Flash:点过滤现在可以使用.
Flash:系统.Bit转换(System.Bitconverter)现在可以使用
Flash:词典.包含价值( Dictionary.ContainsValue)现在可以使用
Flash:在一些情况下占用较小的内存量
Flash:SWFPostProcessing加速
Flash:生成字节码方面的性能优化
Flash:字节[]现在可以使用Flash本地bytearray作为后备存储器(.元素)
Flash:System.Text.Encoding浅执行,用于ascii和utf
Flash:安装启用System.Random, System.IO.MemoryStream, DateTime.
Flash:System.Exception.StackTrace属性
Flash:更多的转换错误,现在还包括相关的源定位.
改变
增加Resources.UnloadAsset(目标资源)功能.如果你知道某些较大的个体资源已不再使用,且不想调用Resources.UnloadUnusedAssets(),你可以使用这一增加功能很方便地卸载该资源.
编辑器:引入[Callbacks.PostProcessBuild]脚本属性.在建立播放器后执行属性方法.
编辑器:引入[Callbacks.PostProcessScene]脚本属性.处理当前场景时,执行属性方法.
Flash:为不同的FlashPlayer版本11.0、11.1和11.2建立了目标.现在还无从知晓Flash 播放器插件版本的具体的执行,但11.2设置意味着使用更快的代码路径;更好的性能.
Flash:现在可以使用www.GetAudioClip(),仅用于非串流mp3’s
Flash:WWW支持
Flash:WWWForm 支持
修复
Android:对Galaxy Nexus ICS上OpenGL ES驱动程序随意死机进行修复
Android:与一些装置上ICS升级有关的触屏问题得到修复.
Android:Caching.CleanCache()总是返回到false(不清除缓存).
Android:修复ICS装置上的Webcam结构初始化问题.
编辑器:当检测Visual Studio安装时,捕捉更多的角落事例(corner cases).
编辑器:修复游戏模式中当显示AudioClip检视图时的内存不足死机
编辑器:将PvrTexTool更新到2.10.87.498版本.
编辑器:修复使用SendMessage时的死机,非空变元传递到无参数接收器.
编辑器:修复已用纹理统计,在统计视图中显示
修复附加分析器后的内存泄漏.
修复下载资源包时的WebPlayer死机.
修复鼠标Δ处理故障,主要是非HID启用型鼠标.
修复音频试听上的内存不足.
修复当为缓存服务器散列资源时的竞态条件.
修复Resources.Load死机,如果装置的资源引用的是不存在的资源.
对因使用大量场景间参照资源创建播放器导致内存不足进而导致的死机进行修复.
标记为Occluders的SkinnedMeshRenderers将导致闭塞,修复这种故障.在PVS计算中,现在SkinnedMeshes只可以标记Occludees,并且使用蒙皮网络合订卷.
启动Unity后重新装载脚本带有编程错误,修复由此引起的死机.
Flash:修复整数除法符号.
Flash:修复本地方法回归结构中的内存泄露.
Flash:构造器将字段作为byref变元进行传递,修复由此引起的死机.
Flash:修复启动但没有应用的RuntimeServices_ToBool_Object.
Flash:修复字节上的字节序错误[].
Flash:修复资源包上monobehaviour反序列化方面的死机.
Flash:修复不能再进行编写脚本的粒子系统.
Flash:修复随意字符串www.错误,即使没有eror.
Flash:修复由协同程序中错误引起的致命错误故障.
Flash:修复www.纹理使用上的致命错误.
Flash:修复黑色背景上的flash预紧器条.
Flash:如果目的尺寸大于源尺寸,array.CopyTo()失败,修复此处的故障.
Flash:修复示例()上类型表字段故障.
Flash:修复列表序列化.
Flash:SwfPostprocessor引起swf不能确认的问题,或引起栈之下-或溢值,对此类问题进行修复.
Flash:修复许多小动作脚本转换.
Flash:GuiTexture再次正确渲染.
Flash:.Particles再次正确渲染.
Flash:带较大纹理的Texture2D setPixels不在死机.
Flash:UnityContent .setSize(宽,高)正确运行.
Flash:useGuiLayout可以使用.
Flash:gui.window不再出现死机.
Flash:不再有物理/角色控制冲突方面的死机.
Flash:物理,修复物体空间内摄影或困难的问题.
Flash:结构序列不再(不正确地)序列化.
Flash:ParticleSystem脚本现在可以使用.
Flash:现在可以使用非公开monobehaviour序列化.
Flash:协同程序问题,引起FlashPlayer核对和栈尺寸问题,对这种问题修复.
Flash:EncodeToPNG现在可以使用.
Flash:.c#阵列数据压缩支持.
Flash:矫正中缀表达式数值投射处理(不包括(int)(f * g)).
Flash:修复序列化表.
Flash:修复SwfPostprocessor;在这些情况下,player插件出现致命错误,显示文件夹不可用/常量出现检验错误.
Flash:修复SwfPostprocessor;修复最大栈尺寸计算.
Flash:修复StartCoroutine死机中的WWW.GetAudioClip()使用.
图形:修复在CombineMeshes中互换的顶点颜色.
图形:修复零点近平面聚光灯错误.
iOS:修复3.5/3.5.1中的动态几何性能回归.
iOS:闪屏旋转使其倾斜,对此修复.
iOS:Application.targetFrameRate <= 0设置将产生60 fps(如同在其他平台上).
iOS:InvalidateState引起INVALID_FRAMEBUFFER_OPERATION_EXT.GL,对此进行修复.
iOS:修复,并在iPhone上的封面屏幕中进行排列.
iOS:闪屏旋转使其倾斜,对此修复.
旧系统粒子:如果Time.timeScale是0,ParticleRenderer和TrailRenderer不会泄漏内存.
移动:修复SkinnedMeshRenderer死机.
导航网格:当Time.timeScale是0时,NavMeshAgent速率不会变成无效.
导航网格:当目的站和位置设为同一矢量时,NavMeshAgent修复偶然的无效位置/速率.
OS X:通过微软鼠标修复不稳定鼠标行为.
Windows Player:当进出全屏模式时,修复多线程渲染中偶然的暂停.
升级指南
在Unity 3.4中,实时灯光不影响静态物体.在Unity 3.5中,实时灯光往往影响静态和动态物体.产生的结果是:如果你之前设定了灯光围绕这个程序错误运行,因为接收了两次灯光,当前的性能将会很差.同时,它看起来也将不同,因为你的场景中增加了两次灯光.使用这些灯光的正确方法是使用单自动平行灯光,去除实时灯光.如果你希望拥有静态灯光以外的不同实时灯光,你需要使用灯光剔除掩码来影响动态的物体.

原文:http://china.unity3d.com/unity/whats-new/unity-3.5.2

在Unity编辑器上增加你自己的工具

本篇教程将教你扩展Unity编辑器,来更好的配合你开发项目.你将学习如何绘制Gizmo,在节点中创建删除对象,创建一个编辑器窗口,和使用组件,并且允许用户撤消任何在你工具上的操作.

首先我们看看最终我们要达成的工具样子:

正如图中所示,我们将创建一个编辑器窗口,还有颜色选择器来设置我们画出的栅格颜色,另外也可以创建和删除对象,对齐到这个栅格,以及对操作的撤消等等.
1:Gizmos
首先我们学习如何使用Gizmos,下面这个是几个常见的内建的Gizmos.

选择任何一个对象时都会显示这个Gizmo.

这是另外一个Gizmo,这使我们能看到所选的对象的boxCollider的大小.

2:创建一个栅格脚本
用C#脚本绘制Gizmo给一个对象,我们将在编辑器中画一个栅格作为示例.

using UnityEngine;
using System.Collections;

public class Grid : MonoBehaviour
{

    void Start ()
    {
    }

    void Update ()
    {
    }
}

这个栅格,我们需要添加长和宽的两个变量.

public class Grid : MonoBehaviour
{
    public float width = 32.0f;
    public float height = 32.0f;

    void Start ()
    {
    }

    void Update ()
    {
    }
}

要绘制栅格,我们需要用OnDrawGizmos,让我们创建它.

public class Grid : MonoBehaviour
{
    public float width = 32.0f;
    public float height = 32.0f;

    void Start ()
    {
    }

    void Update ()
    {
    }

    void OnDrawGizmos()
    {
    }
}

3:绘制栅格
要绘制栅格,我们需要在编辑器的相机位置绘制一些横线竖线.首先我们用一个变量来储存相机的位置.

void OnDrawGizmos()
{
    Vector3 pos = Camera.current.transform.position;
}

我们可以使用Camera.current来获取编辑器的相机.

现在我们需要用两个循环来绘制横线和竖线.

void OnDrawGizmos()
{
    Vector3 pos = Camera.current.transform.position;

    for (float y = pos.y - 800.0f; y < pos.y + 800.0f; y+= height)
    {
        Gizmos.DrawLine(new Vector3(-1000000.0f, Mathf.Floor(y/height) * height, 0.0f),
                        new Vector3(1000000.0f, Mathf.Floor(y/height) * height, 0.0f));
    }

    for (float x = pos.x - 1200.0f; x < pos.x + 1200.0f; x+= width)
    {
        Gizmos.DrawLine(new Vector3(Mathf.Floor(x/width) * width, -1000000.0f, 0.0f),
                        new Vector3(Mathf.Floor(x/width) * width, 1000000.0f, 0.0f));
    }
}

我们用Gizmos.DrawLine()来画线.Gizmos类里面有很多其他绘制方法,所以它可以绘制立方体,球体,甚至线框图.也可以绘制图像.

栅格应该是无限长,但是没有无穷远的浮点数给我们用,所以我们可以简单的用任意大的数字代替.行数取决于循环的次数.

要看到栅格,旧创建一个空对象并将我们这个脚本赋予它.

4:自定义检视面板

接下来我们自定义检视面板,我们需要创建在创建一个C#脚本文件并命名为GridEditor.放在脚本编辑器Editor文件夹里.如果没有这个文件夹,就创建一个.

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor (typeof(Grid))]
public class GridEditor : Editor
{
}

我们需要用UnityEditor的函数来覆盖栅格默认的检视面板,使用 [CustomEditor (typeof(Grid))] 让Unity知道我们将定制栅格的检视面板.

public class GridEditor : Editor
{
    public override void OnInspectorGUI()
    {
    }
}

如果现在你看编辑器的检视面板,你将看到一个空的窗口.这是因为我们自定义了一个面板用OnInspectorGui()的方法覆盖掉了默认的检视面板.

5:使用GuiLayout填充自定义检视面板.
上面我们创建了一个空的面板,首先我们要给这个面板指定一个目标对象.实际上,已经有个target给这个检视面板.但是方便起见,我们将创建一个引用栅格组件的对象.我们先来声明它.

public class GridEditor : Editor
{
    Grid grid;

在检视面板激活的时候可以用OnEnable()方法来执行一些事件.

public class GridEditor : Editor
{
    Grid grid;

    public void OnEnable()
    {
        grid = (Grid)target;
    }

我们用GUILayout和EditorGUILayout类来创建一些表单.

public override void OnInspectorGUI()
{
    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Width ");
    grid.width = EditorGUILayout.FloatField(grid.width, GUILayout.Width(50));
    GUILayout.EndHorizontal();
}

第一行中的GUILayout.BeginHorizontal()表示下面的元素都将水平排列,同样的,在最后有GUILayout.EndHorizontal()来说明结束上面的排列方式.第一个是一个标签.用来显示网格宽度.然后旁边创建了一个EditorGUILayout.FloatField字段来分配grid.width,并设置默认值为50像素.

下面是在检视面板中实际的效果:

6:填充检视面板和重绘场景.
让我们添加grid.height的字段到检视面板中.

public override void OnInspectorGUI()
{
    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Width ");
    grid.width = EditorGUILayout.FloatField(grid.width, GUILayout.Width(50));
    GUILayout.EndHorizontal();

    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Height ");
    grid.height = EditorGUILayout.FloatField(grid.height, GUILayout.Width(50));
    GUILayout.EndHorizontal();
}

这就是控制栅格对象的所有字段,如果想了解其他类型的字段项,可以看脚本参考的EditorGUILayout和GUILayout,这个时候只有在我们选择场景视图窗口的时候,检视面板中做的新变化才是可见的,为了保持实时变化,一旦我们做了修改,我们就可以用SceneView.RepaintAll()来重绘场景视图.

public override void OnInspectorGUI()
{
    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Width ");
    grid.width = EditorGUILayout.FloatField(grid.width, GUILayout.Width(50));
    GUILayout.EndHorizontal();

    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Height ");
    grid.height = EditorGUILayout.FloatField(grid.height, GUILayout.Width(50));
    GUILayout.EndHorizontal();

    SceneView.RepaintAll();
}

现在我们就不需要在点击检视面板以外的区域查看改变了.

7:处理编辑器的输入
现在我们来尝试处理编辑器的输入,就像我们做的游戏获得键盘或鼠标的状态.我们用onSceneGUIDelegate来实现场景视图上的交互,让我们来调用GridUpdate().

public void OnEnable()
{
    grid = (Grid)target;
    SceneView.onSceneGUIDelegate = GridUpdate;
}

void GridUpdate(SceneView sceneview)
{
}

现在我们只需要获得输入事件.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;
}

8:创建预设
为了进一步学习编辑器脚本,我们需要一个游戏对象,让我们创建一个立方体预设.

可以缩放立方体或者其他方式让它与网格对齐.

你可以在层次面板中看到立方体的名字是蓝色的,这意味着它与一个预设有关联.在项目视图中也可以看到这个预设.

9:从编辑器脚本创建对象
现在我们要做到从编辑器脚本创建对象,打开GirdeEditor.cs脚本来改进GridUpdate()函数.
当按下按键时创建对象.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;

    if (e.isKey && e.character == 'a')
    {
        GameObject obj;
    }
}

脚本会监听是否按下a键,同样创建了一个用来引用的新对象.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;

    if (e.isKey && e.character == 'a')
    {
        GameObject obj;
        if (Selection.activeObject)
        {
            obj = (GameObject)Instantiate(Selection.activeObject);
            obj.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
        }
    }
}

Selection.activeObject 是目前在编辑器选择的对象.只要有对象被选择,我们就会复制它并改变复制出来的对象的坐标到空间原点.

现在我们来测试一下,你要注意当资源重导入或者刷新时GridUpdate()将停止运行,如果要重新运行,你要选择一个对象(例如从层次视图中),我们这例子要选择网格对象.还需要记得场景视图获得焦点时才能捕获输入事件.

10:从编辑器脚本实例化预设
虽然我们现在可以克隆对象,但克隆的对象是不会有预设关联的.

你可以看到Cube(Clone)是纯黑色的字体,代表它没有连接到原来立方体的预设.而我们如果在编辑器中手动复制原始立方体,克隆出来的立方体将拥有原立方体一样的预设.如果想在脚本里面克隆出来的立方体也有原立方体的预设关联,我们需要使用EditorUtility类里面的InstantiatePrefab() 函数.

使用这个函数前,我们需要得到所选对象的预设,我们需要用到EditorUtility类里面的GetPrefabParent()函数.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;

    if (e.isKey&& e.character == 'a')
    {
        GameObject obj;
        Object prefab = EditorUtility.GetPrefabParent(Selection.activeObject);

        if (prefab)
        {

我们也可以停止判断 Selection.activeObject了,因为如果它不存在,预设会为空,因此我们可以只检查预设引用是否存在就可以了.
现在让我们来实例化预设并设置它的位置.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;

    if (e.isKey && e.character == 'a')
    {
        GameObject obj;
        Object prefab = EditorUtility.GetPrefabParent(Selection.activeObject);

        if (prefab)
        {
            obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
            obj.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
        }
    }
}

看,现在克隆出来的有预设关联了.

11:转换屏幕上鼠标坐标到世界坐标系
Event类没有让我们获得鼠标在世界空间的位置,它只提供了屏幕空间坐标系的鼠标位置.下面我们将转换它们,让我们得到鼠标在世界空间里的位置.

void GridUpdate(SceneView sceneview)
{
    Event e = Event.current;

    Ray r = Camera.current.ScreenPointToRay(new Vector3(e.mousePosition.x, -e.mousePosition.y + Camera.current.pixelHeight));
    Vector3 mousePos = r.origin;

首先,我们使用编辑器相机的ScreenPointToRay从屏幕坐标系上获取射线,不过在这之前我们需要转换屏幕坐标供ScreenPointToRay()使用.

e.mousePosition的原点是从屏幕左上角(等于Camera.current.pixelWidth, -Camera.current.pixelHeight).我们需要转换为原点在屏幕左下角的坐标(Camera.current.pixelWidth, Camera.current.pixelHeight).
接下来我们要保存鼠标位置的向量.
现在我们可以指定克隆出来的对象到鼠标的位置.

if (prefab)
{
    obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
    obj.transform.position = new Vector3(mousePos.x, mousePos.y, 0.0f);
}

12:对齐立方体到栅格
让我们将创建的立方体对齐到鼠标位置的网格.

if (prefab)
{
    obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
    Vector3 aligned = new Vector3(Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
                                  Mathf.Floor(mousePos.y/grid.height)*grid.height + grid.height/2.0f, 0.0f);
    obj.transform.position = aligned;
}

结果下图这样.

13:销毁从编辑器脚本创建的对象.

可以使用DestroyImmediate()来删除对象,本例中我们将通过按下”d”键来删除所有被选中的对象.

if (e.isKey && e.character == 'a')
{
    GameObject obj;
    Object prefab = EditorUtility.GetPrefabParent(Selection.activeObject);

    if (prefab)
    {
        obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
        Vector3 aligned = new Vector3(Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
                                      Mathf.Floor(mousePos.y/grid.height)*grid.height + grid.height/2.0f, 0.0f);
        obj.transform.position = aligned;
    }
}
else if (e.isKey && e.character == 'd')
{
    foreach (GameObject obj in Selection.gameObjects)
        DestroyImmediate(obj);
}

当”D”键按下时,我们遍历所有被选中的对象,并逐一删除.当然Delete键依旧可用的.

14:撤消对象实例化

这一节我们将利用Undo类来实现撤消编辑器脚本的撤消.为了实现撤消,我们需要调用在编辑器中创建Undo.RegisterCreatedObjectUndo().它有两个参数,第一个是已经创建的对象,第二个是撤消的动作名称.会在”Edit-Undo name”中显示.

if (prefab)
{
    obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
    Vector3 aligned = new Vector3(Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
                                  Mathf.Floor(mousePos.y/grid.height)*grid.height + grid.height/2.0f, 0.0f);
    obj.transform.position = aligned;
    Undo.RegisterCreatedObjectUndo(obj, "Create " + obj.name);
}

如果你按下按键,创建了多个立方体,然后尝试撤消,你会发现,刚才所有创建的立方体都被删除了.这事因为所有被创建的立方体放在了一个单一撤消事件中.

15:撤消单对象实例

如果我们需要对每个创建的对象都要有自身的撤消事件,我们需要使用Undo.IncrementCurrentEventIndex().

if (prefab)
{
    Undo.IncrementCurrentEventIndex();
    obj = (GameObject)EditorUtility.InstantiatePrefab(prefab);
    Vector3 aligned = new Vector3(Mathf.Floor(mousePos.x/grid.width)*grid.width + grid.width/2.0f,
                                  Mathf.Floor(mousePos.y/grid.height)*grid.height + grid.height/2.0f, 0.0f);
    obj.transform.position = aligned;
    Undo.RegisterCreatedObjectUndo(obj, "Create " + obj.name);
}

现在测试脚本你会看到会一个个的撤消被创建的立方体.

16:撤消对像删除

要撤消被删除的对象可以使用 Undo.RegisterSceneUndo(),它很慢,基本上是保存场景的状态,以便我们重做被撤消的动作,不过目前没有其他直接的办法来重做撤消.

else if (e.isKey && e.character == 'd')
{
    Undo.IncrementCurrentEventIndex();
    Undo.RegisterSceneUndo("Delete Selected Objects");
    foreach (GameObject obj in Selection.gameObjects)
        DestroyImmediate(obj);
}

Undo.RegisterSceneUndo() 只有一个参数,那就是撤消的名称.当用D键删除后.你可以用这个命令撤消删除.

17:创建编辑器窗口脚本

用一个新脚本创建一个新编辑器窗口,脚本名为GridWindow.cs.

using UnityEngine;
using UnityEditor;
using System.Collections;

public class GridWindow : EditorWindow
{
    public void Init()
    {
    }
}

通过栅格对象来访问这个窗口.

public class GridWindow : EditorWindow
{
    Grid grid;

    public void Init()
    {
        grid = (Grid)FindObjectOfType(typeof(Grid));
    }
}

18:创建GridWindow

我们在OnInspectorGUI()中为GridWindow添加一个打开窗口按钮.

public override void OnInspectorGUI()
{
    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Width ");
    grid.width = EditorGUILayout.FloatField(grid.width, GUILayout.Width(50));
    GUILayout.EndHorizontal();

    GUILayout.BeginHorizontal();
    GUILayout.Label(" Grid Height ");
    grid.height = EditorGUILayout.FloatField(grid.height, GUILayout.Width(50));
    GUILayout.EndHorizontal();

    if (GUILayout.Button("Open Grid Window", GUILayout.Width(255)))
    {
       GridWindow window = (GridWindow) EditorWindow.GetWindow(typeof(GridWindow));
       window.Init();
    }

    SceneView.RepaintAll();
}

用GUILayout来创建按钮,并且设置按钮的名称和宽度.打开GridWindow窗口点下这个按钮,将返回真.

回到检视面板点击打开Grid Window按钮.

你会看到GridWindos弹出了.

19:在GridWindos中创建颜色字段.

可以在这个窗口中添加任何东西,现在让我们为栅格类添加一个颜色字段,以便后面我们来编辑它.

public class Grid : MonoBehaviour
{
    public float width = 32.0f;
    public float height = 32.0f;

    public Color color = Color.white;

在OnDrawGizmos()中赋给Gizmos.color.

void OnDrawGizmos()
{
    Vector3 pos = Camera.current.transform.position;
    Gizmos.color = color;

在GridWindos脚本里的OnGUI()添加一个颜色拾取器字段用来我们拾取颜色.

public class GridWindow : EditorWindow
{
    Grid grid;

    public void Init()
    {
        grid = (Grid)FindObjectOfType(typeof(Grid));
    }

    void OnGUI()
    {
        grid.color = EditorGUILayout.ColorField(grid.color, GUILayout.Width(200));
    }
}

点击测试一下改变栅格的颜色.

20:添加Delegate

我们设置了一个Delegate,用=号得到场景视图的输入事件,这样做不太好,因为它涵盖了所有其他回调.我们可以用+=符号代替=号.下面修改GridEditor.cs脚本.

public void OnEnable()
{
    grid = (Grid)target;
    SceneView.onSceneGUIDelegate += GridUpdate;
}

我们还需要创建一个OnDisable()的回调来替换掉GridUpdate(),否则会被执行很多次.

public void OnEnable()
{
    grid = (Grid)target;
    SceneView.onSceneGUIDelegate += GridUpdate;
}

public void OnDisable()
{
    SceneView.onSceneGUIDelegate -= GridUpdate;
}

结论:
这篇是编辑器编程的基础教程,如果你想扩展这方面的知识,可以查看脚本参考(http://unity3d.com/support/documentation/ScriptReference/index.html)中的Resources,和AssetDatabase和FileUtil类.

原文:http://active.tutsplus.com/tutorials/workflow/how-to-add-your-own-tools-to-unitys-editor/
由威阿翻译,转载请注明来自1Vr.Cn,否则MJJ.

Unity3.5.1版本更新修正列表

这次主要包含对Unity3.5的Bug修正.

Shuriken粒子系统
内置寻路系统.
升级遮挡裁切和新的LOD
Google Chrome Native Clent的部署.
线性空间照明和HDR.

改进
PvrTexTool更新到2.10.83.9873,带有Alpha通道的纹理可以用PVRTC压缩到最好.
iOS:添加视网膜屏iPad的Splash屏幕和图标,也就是高清启动屏和图标.
Android:添加对AndroidJavaClass的支持.
Android:去除使用AndroidJavaObject等时候过多的Log信息.
iOS:在PlayerSettings中增加iOS 5.1选择的支持.
iOS:添加 iPhoneGeneration.iPad3Gen.
在Log文件中现在始终能看到Unity的版本号.

修正
Android:在Eclipse中创建的Apk文件可能导致无法读取从而导致应用程序立即关闭的问题.
Android:如果在Classpath中没有包含当前路径(“.”)时APK签名步骤会失败.
音频:修正音频播放参数不正确时导致过多音频信号源在同一时间播放.
编辑器:修正Build非常大量的资源包假死的问题.
编辑器:修正当使用Application.LoadLevel()加载场景时static batching不能正常工作的问题.
编辑器:如果Build时选择了剥离,当进入播放模式时将隐藏”default”质量设置.
编辑器:同时在资源文件夹下建立很多资源导致内存溢出的问题.
编辑器:修正导入Bumpmap的材质时凹凸贴图缺失导致的崩溃.
编辑器:修正改变Gizmo图标资源可能导致罕见的崩溃.
编辑器:试图将资源传递AssetPostprocessor.OnAssingMaterialModel时导致的崩溃.
编辑器:当有多个MonoBehaviours时动画窗口会提示一个动画时间没有接收器的Bug.
编辑器:修正构建一个场景资源束提示不正确的错误消息的Bug.
编辑器:修正当构建为NaCl时文件保存对话框提示”Unsupported Build Target”的问题.
编辑器:在某些情况下调试导致编辑器假死的问题.
编辑器:修正打开颜色编辑器能改变上一次编辑的颜色问题(OSX的问题).
编辑器:修正编辑器内打开另一个或者新建项目关闭过程(Windows问题).
编辑器:某些罕见的加载场景导致崩溃的问题.
图形:修正未使用材质的网格在静态配合时候添加额外多边形的问题.
图形:修正投影机只呈现内投影对象的问题.
图形:修正用了灯光函数需要看到方向的着色器和”dualforward”参数编译问题(如BlinnPhong).
图形:删除掉这些可以完全忽略的警告(“InsideCameraRender” 和 “VertexCompNone”).
图形:修正递延照明下使用镜头光晕与图像效果(ImageEffectOpaque属性)配合使用时场景中透明物体的问题.
iOS:修正在Xcode4.3.x的Basic授权Unity的Splash问题.
iOS:修正通过System.Console.Write*或JS/Boo print()命令写Log到控制台在iOS5.1非开发设备上异常的问题.
内存管理:减少堆栈分配器碎片.
内存管理:修正内存管理紊乱问题.
手机:修正重新启用蒙皮网格上的布料模拟导致随机崩溃的问题.
手机:修正蒙皮性能衰退问题.
手机:修正GUITexture修能衰退问题.
MonoDevelop:从Unity中新增脚本时脚本没有获得焦点的问题.
Native Client:修正用WWW类载入JPEG文件为纹理的问题.
OSX 和Windows:修正SSE网格蒙皮代码罕见崩溃的问题.
OSX:修正在用”Restore Windows”后导致Standalone崩溃的Bug,
Profiler:当选择”Autoconnect Profiler”导致崩溃的问题.
Substance:编辑器中选择”Fastest”质量时构建导致颜色错乱的问题.
Webplayer:防止使用多个选项卡的IE浏览器崩溃.
Webplayer:防止用Firefox浏览器退出时卡死.
Webplayer:修正压缩网格数据不正确的Bug.
Webplayer:提高2.x内容的Input.
Webplayer:修正取消资源束下载的崩溃.
Webplayer::修正3.4的内容使用BeginScrollView说缺少方法的异常问题.
Windows:使用SkinnedCloth时候切换成全屏导致崩溃的问题.
修正使用Resources.UnloadUnusesAssets或者加载场景时打印出大量AssetBundle.Unload失败的错误信息问题.
修正加载损坏的预设文件导致内存溢出崩溃的问题.
修正内存管理紊乱情况.
实时灯光仅对动态几何体生效.这和3.4一样.用3.5发布就会修正这个问题.

升级指南:
在Unity3.4中实时灯光不影响静态对象.在Unity3.5中实时灯光总事影响静态和动态的对象.
这样会发生以前你处理过这个问题.这次3.5中就会出现重复两次照明.
要修正这个问题你可以用一个自动平行光并且删除唯一的实时灯光.
如果你希望与静态照明灯光不同的实时灯光,你应该使用灯扑杀蒙版让它只生效于动态对象.

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