Unity4 的vs2003工程升级到2012 Unity5 都需要注意哪些事情

【图片】【教程】unity5时代来了~怎么把Unity 4.x的项目迁移到Unity 5呢?_unity吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:23,553贴子:
【教程】unity5时代来了~怎么把Unity 4.x的项目迁移到Unity 5呢?收藏
转发自:开发《RÉPUBLIQUE》的团队最近在干一件大事,把Unity 4.x的项目迁移到Unity 5,为您详尽解说他们迁移的全过程。视频先奉上~!视频来自:准备使用Unity5最重要的一步就是将工程从Unity4.x中移植过来。这对我20人的team来说是一个需要谨慎思考、规划的巨大挑战。各位的工程可能不如我们的大,但仍希望你们能从我们的经验中有所收获。首先从版本控制系统中复制出一份工程分支。这个分支作为工程的过渡版本—主工程坏掉几天不能用了,是因为team一直在修正移植到Unity5时的插件,或我们自己编写的代码引起的问题。(稍后说明)复制这个独立的分支使得美工和策划能够继续使用Unity 4.x的版本进行工作而不至于停止工作,直到项目在Unity 5能够正常运行。在几周之前,我们把一个减掉很多功能的版本移植到Unity 5。它被美术用来开发和测验Unity 5根据物理上色功能设计的烘托通道。去掉了一切第三方的插件——任何感觉可能会阻止移植的东西。当Unity 5的项目分支测验没问题后,就可以让所有team迁移到新分支上,并将旧分支备份。假如你们也正在Revision control(版本控制),推荐你们一定要复制一个工程分支(其实不管在任何时候都强烈推荐用Revision control)。无论怎样,保证你升级到Unity 5之前备份一下原本能run的工程。我们的UI设计师及源码操控专家, Charlie Helman,担任我们所有team的移植工作,他与我们共享了移植进程的笔记和截屏。这是从旧有的Unity 4.x工程拷贝的新分支。《Republique》的Unity工程相比于其它移动游戏来说是个头很大的,有45.7GB!将工程导入到一些机器上会花24小时之久。但用Cache Server 能够将这个时刻缩短到30分钟。翻开你的工程之前,保证在Unity 5的Preferences 中启用了Cache Server。也顺便设置比方说”外部代码和图像编辑器(Visual Studio 或 Photoshop)“。要设置这些,需要使用Unity 5来创建一个新的工程。新工程创建并打开的第一时间,就前往首选项Preferences(Mac: Unity & P Windows:Edit & Preferences)在Preferences 的Cache Server 选项卡中,保证“Use Cache Server”被勾选,并将IP设置为缓存服务器地址(这里简单地填了“Server”)。使用“Check Connection”来验证它是不是工作,然后就可以把这个工程关闭了。到此,我们已经准备好打开真正的工程了。几分钟后,看到了导入的进度条。每隔一会儿,就会看到这样的提示。因为Unity 5的API 很多改动。改动一个地方即是全部的“快捷”引用(譬如.rigidbody或.transform,在以前它内部其实是调用一个 .GetComponent&T&() 函数),如今都是显示地调用 GetComponent。所以myCharacter.rigidbody如今有必要改写成 myCharacter.GetComponent&Rigidbody&()。Unity 去掉了一切的“快捷”引用,而且主动帮你处理这个变换的事情。当点击“I Made a Backup. Go Ahead!”,Unity 就开始处理。Unity 5的自动化升级工具太棒了。最让人满意的是,它可以剖析你的全部代码库来作最合适的更新。提到这,那就来看看一些Unity 5脚本的改变,以及Camouflaj 怎么让它们正常运转的。Unity 5的脚本升级 在Unity 5中,会发现脚本中一些名字和API 发生了改变。通常是在旧的名字上加上Obsolete的属性,这样编译器会给出替代方案的建议。然而有时候不仅是名字发生了改变:你也许需要思考多个可代替计划。譬如,AnimatorStateInfo nameHash被更换成了shortHash和fullPathHash。shortHash是不以层名或状态机名为前缀的状态名,大多数情况下这就够了。假如不一样的状态用了一样名字,但是在不一样的状态机或层下面,那么你可以用fullPathHash。假如你想让你的脚本与老的Unity 版别保持向后兼容,你可以用Unity版本宏。我们更喜欢用这种方法来处理Unity 的各种版本,譬如Unity 5或更高的版别。这样在下次更新时,就可以不用复核这段代码了。下面是一段有多个Unity 版本代码共存的案例。#if (UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_3_6 || UNITY_3_7 || UNITY_3_8 || UNITY_3_9)
// Code specific to Unity 3 versions.
// 针对Unity3的代码 #elif (UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9)
// Code specific to Unity 4 versions.
// 针对Unity4的代码 #else
// Code specific to other versions of Unity.
// 针对其它Unity版本的代码
// Here will we shall assume this is Unity 5 and later, and in doing so choose not to support Unity 2 or earlier.
// 这里我们假定是Unity 5 或更高版本的代码,这么选择是不再支持 Unity 2或更低的版本
// There may be a few defines for Unity 2 if you wish to support those versions.
// 如果你想要支持Unity 2的话,这里可以加上一些Unity 2的宏定义。 #endif 着色器更新 Unity5中,着色器编译器从Cg2.2切换成HLSL,你会发现需求愈加严厉了。在HLSL中,未彻底初始化的输出变量会致使一个编译过错。许多情况下我们都没有初始化色彩变量中的alpha值,或position变量中的w。要处理这个疑问,你就需要把变量初始化为0,可以用UNITY_INITIALIZE_OUTPUT宏。有时,仍会发现有彻底没有用过的数据从顶点函数传递到片元函数,即便已经从v2f构造中将它们去掉了。手工编辑而非脚本自动升级 代码中有少量几处要自己手动修正的之一即是经过组件名而不是类型来获取组件,Unity 不再使用该方法。在脚本自动更新器的过程中,Unity 将那些以名字来取组件的老代码:GetComponent(“MyMonoType”)更改为:UnityEngineInternal.APIUpdaterRuntimeServices.GetComponent(go, &Assets/PathToMyMonoType/Scripts/MyMonoType.cs (207,8)&, &MyMonoType&)你可能会看到有些这样的变换在控制台输出错,因为理论上这些修正编译不过。这种组件获取的错误一般来自于第三方的插件,由于是尽最大努力使《Republique》代码库尽可能地类型安全。但是,在的一些旧的AI 代码中,现在已将GOAP 体系设定为这样一种方法,即Actions 和Goals 能够以动态列表的方式来指定,而列表是经过名字来使用MonoBehaviors 的 。这使得我们能够灵敏地在运行时动态配置,但Unity 5取组件的新限制就让这种机制失效了。在这种特别情况下,就不再需要将基础的Action 和Goal 类派生自MonoBehavior ,而是仅仅是把它们变换为标准的类就能够处理这个问题。对其它那些要手工修正的取类型的地方,经过一个新的方法来处理这个问题,即是像下面这样经过姓名来获得类型。System.Type.GetType(&MyMonoType&)美术工具 终究让你看一下我们在根据物理上色方面的工作内容,我们将会在下一篇开发日志中具体叙述。为了预备将《Republique》现有的材质进行根据物理上色,就要重新考虑怎么制作材质对应的文理。在之前,大多数的材质只对应的少数的文理。在根据物理上色中,咱们的材质有必要对应许多的材质。为了快速处理现有的材质,我们的程序员写了一个材质变换东西。这个东西为变换节省了许多时刻:它把老的材质和对应的源材质存档,移动而且重命名已有的源材质(运用Unity 的AssetDatabase的方法来获得已有的到预制、模型的链接,以及链接本身)。然后它就连接到新的根据物理的文理映射,设定需要的一系列文理导入设置,而且最终生成打包后的map和表示纹理映射的资源。这使得美工组每天能够变换数百个材质,这极大的改进了他们的作业流程且减少了变换过程中出错几率。如果你正从Unity 4.x移植到Unity 5,且有许多的材质要变换时,强烈建议写一个这样的工具——会发现这使美工的材质变换四件缩短了30%以上。听起来像是不多,但如果你在一个像我们相同的快节奏的工作环境下,任何小改动都会带来很大的帮助。注意:大多数的工作是利用Unity 5的各种测试版本进行,旗舰版的经验可能会有所不同。
登录百度帐号推荐应用扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 1886|回复: 1
《共和国》开发日记二:从Unity 4迁移到Unity 5
本帖为抢楼帖,欢迎抢楼!&
16排名3昨日变化主题帖子积分
蛮牛币2818
在线时间2629 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
1.jpeg (107.54 KB, 下载次数: 3)
10:42 上传
  由《R?PUBLIQUE》开发团队为您详尽解说他们将这款游戏从Unity 4迁移到Unity 5的全过程。
  我们开始使用Unity 5最重要的一步就是将工程从Unity 4中移植过来。这对我们20人的团队来说是一个需要谨慎规划的巨大挑战。你的工程可能不如我们的大,但仍希望你能从我们的经验中有所收获。
  首先我们从版本控制系统中复制出一份工程分支。这个分支作为工程的过渡版本——主工程坏掉几天不能用了,因为我们一直在修复移植到Unity 5时插件或我们自己的代码引起的编译错误。(稍后详述)
  创建这个独立的分支使得我们的美术和策划可以继续用Unity 4的工程版本工作而不至于停工,直到项目在Unity 5可以正常运行。在几周之前,我们还创建了一个工程简化版本移植到Unity 5。它被美术用来开发和测试我们自己为Unity 5基于物理着色功能设计的渲染通道。简化的版本去掉了所有第三方的插件——任何我们认为可能会阻碍移植进程的东西。当Unity 5的项目分支测试没后,我们就让整个团队迁移到新分支上,并将旧分支归档。
  如果你正在使用版本控制系统,我们建议你一定要拉一个工程分支(其实我们在任何时候都强烈建议使用版本控制)。无论怎样,确保你升级到Unity 5之前备份你的工程。
  我们的UI设计师及源码控制专家, Charlie Helman,负责我们整个团队范围的移植工作,他与我们分享了移植过程的笔记和截屏。
  这是我们从旧有的Unity 4工程创建的新分支。
  《République》的Unity工程相比于其它来说是很庞大的,有45.7GB之大。将工程导入到一些机器上会花24小时之久。但用Cache Server 可以将这个时间缩短到30分钟。
  打开你的工程之前,确保在Unity 5的Preferences 中启用了Cache Server。也顺便设置比如外部代码和图片编辑器(Visual Studio 或 Photoshop)。要设置这些,需要启动Unity 5创建一个新的工程。
  一旦新工程打开,就前往首选项Preferences(Mac: Unity & P Windows:Edit & Preferences)
  在Preferences 的Cache Server 选项卡中,确保“Use Cache Server”被勾选,并将IP设置为缓存服务器地址(这里简单地填了“Server”)。通过“Check Connection”来验证它是否工作,然后我关闭了这个工程。
  现在,我们已经准备好打开真正的工程了。几分钟后,我们看到了导入的进度条。每隔一段时间,我们会看到这样的提示。
  由于Unity 5的API 大量改变。改变之一就是所有的“快捷”引用(比如.rigidbody或.transform,在以前它内部其实是调用一个 .GetComponent&T&() 方法),现在都必须显示地调用 GetComponent。所以myCharacter.rigidbody现在必须改写成 myCharacter.GetComponent&Rigidbody&()。Unity 去掉了所有的“快捷”引用,并且自动帮你处理这个转换工作。
  当我们选择“I Made a Backup. Go Ahead!”,Unity 就开始处理。
  Unity 5的自动升级器太棒了。最让人满意的是,它可以分析你的整个代码库来作适合的更新。
  说到这,让我们来看看一些Unity 5脚本的变化,以及Camouflaj 如何让它们正常运行。
  Unity 5的脚本升级
  在Unity 5中,我们会发现脚本中一些名字和API 发生了变化。通常是在旧的名字上加上Obsolete 属性,这样编译器会给出替代方案的建议。然而有时候不仅是名字发生了改变:你可能需要考虑多个可替代方案。比如,AnimatorStateInfo nameHash被替换成了shortHash和fullPathHash。shortHash是不以层名或状态机名为前缀的状态名,大多数情况下这就够了。如果不同的状态用了相同名字,但是在不同的状态机或层下面,那么你可以用fullPathHash。
  如果你想让你的脚本与以前的Unity 版本保持向后兼容,你可以用Unity版本宏。我们更喜欢用这种方式来处理Unity 的未知版本,比如Unity 5或更高的版本。这样在下次升级时,我们就可以基本不用复核这段代码了。
  下面是一段有多个Unity 版本代码共存的例子。
[AppleScript] 纯文本查看 复制代码
  #if (UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_3_6 || UNITY_3_7 || UNITY_3_8 || UNITY_3_9)
  // Code specific to Unity 3 versions.
  // 针对Unity3的代码
  #elif (UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9)
  // Code specific to Unity 4 versions.
  // 针对Unity4的代码
  // Code specific to other versions of Unity.
  // 针对其它Unity版本的代码
  // Here will we shall assume this is Unity 5 and later, and in doing so choose not to support Unity 2 or earlier.
  // 这里我们假定是Unity 5 或更高版本的代码,这么选择是不再支持 Unity 2或更低的版本
  // There may be a few defines for Unity 2 if you wish to support those versions.
  // 如果你想要支持Unity 2的话,这里可以加上一些Unity 2的宏定义。
  #endif
  着色器更新
  中,着色器编译器从Cg2.2切换成HLSL,你会发现要求更加严格了。在HLSL中,未完全初始化的输出变量会导致一个编译错误。很多时候我们没有初始化颜色变量中的alpha值,或位置变量中的w。要解决这个问题,你就需要把变量初始化为0,或者用UNITY_INITIALIZE_OUTPUT宏。有时候,我们仍会发现有完全没有使用的数据从顶点函数传递到片元函数,即使我们已经从v2f结构中将它们移除了。
  手工编辑而非脚本自动升级
  代码中有少数几处需要手动修改的地方之一就是通过组件名而不是类型来获取组件,Unity 不再支持这种方式。在脚本自动更新器的处理中,Unity 将那些以名字来取组件的老代码:
  GetComponent(“MyMonoType”)
  更新为:
  UnityEngineInternal.APIUpdaterRuntimeServices.GetComponent(go, “Assets/PathToMyMonoType/Scripts/MyMonoType.cs (207,8)”, “MyMonoType”)
  你可能会看到有些这样的转换在控制台抛出错误,因为理论上这些修改编译不过。
  这种组件获取的问题主要产生于第三方插件,因为我们是尽最大努力使《République》代码库尽可能地类型安全。然而,在我们的一些老的AI 代码中,我们已经将GOAP 系统设定为这样一种方式,即Actions 和Goals 可以以动态列表的形式来指定,而列表是通过名字来引用MonoBehaviors 的 。这使得我们可以灵活地在运行时动态配置,但Unity 5取组件的新限制就让这种机制失效了。在这种特殊情况下,我们就不再需要将基础的Action 和Goal 类派生自MonoBehavior ,而是仅仅是把它们转换为标准的类就可以解决这个问题。
  对其它那些需要手工修改的取类型的地方,我们通过一个新的策略来解决这个问题,就是像下面这样通过名字来取得类型。
  System.Type.GetType(“MyMonoType”)
  美术工具
  最后带你瞧一下我们在基于物理着色方面的工作,我们将会在下一篇开发日志中详细讲述。
  为了准备将《République》现有的材质进行基于物理着色,我们要重新考虑如何制作材质对应的纹理。在以前,我们大部分的材质只对应的少量的纹理。在基于物理着色中,我们的材质必须对应大量的材质。为了快速处理现有的材质,我们的程序员写了一个材质转换工具。这个工具为转换节省了大量时间:它把老的纹理和对应的源材质存档,移动并且重命名已有的源材质(使用Unity 的AssetDatabase的方法来取得已有的到预制、模型的链接,以及链接本身)。然后它就链接到新的基于物理的纹理映射,设定需要的一系列纹理导入设置,并且最终生成打包后的map和表示纹理映射的资源。
  这使得我们的美术组每天可以转换数百个材质,这极大的改进了他们的工作流程且减少了转换过程中的出错机会。如果你正从Unity 4移植到Unity 5,且有很多的材质要转换,强烈建议创建一个这样的工具——我们发现这使我们美术的纹理转换效率提升了30%以上。听起来像是不多,但如果你在一个像我们一样的快节奏的工作环境下,任何小改变都会带来很大的帮助。
  注意:大部分的工作是利用Unity 5的各种测试版本进行。最终版的经验可能会有所不同。
.3.4 百度云;unity5配置要求;unity5unity5无法启动;unity5.1.2 百度云;unity5 百度云;unity5百度知道;unity5配置;unity5.0 配置;unity5.0unity5 启动
每日推荐:
跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
3205/300排名<font color="#FF昨日变化72主题帖子积分
偶尔光临, 积分 205, 距离下一级还需 95 积分
偶尔光临, 积分 205, 距离下一级还需 95 积分
在线时间71 小时
感觉国外的工作开发环境很好啊,也很时尚。
每日推荐:
社区QQ达人
使用QQ帐号登录论坛的用户
连续签到30天
原创精华达人
原创精华帖子总数量 ≥ 100
突出贡献奖
宣传论坛,介绍更多的朋友加入≥50人
累积数量达到100000蛮牛币
游戏蛮牛QQ群会员
加入游戏蛮牛官方QQ群
在“新人报到 ”版块发过自己的照片
购买游戏蛮牛书籍Unity4 的工程升级到 Unity5 都需要注意哪些事情? - 知乎328被浏览27937分享邀请回答61 条评论分享收藏感谢收起}

我要回帖

更多关于 货到付款需要注意什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信