在这篇文章中,咱们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有表明性的几个问题,总结在这里和你们进行分享。主要涵盖了Scriptable Build Pipeline、Standard Assets、Scripting、Graphics、VS/VS Code等领域,其中会着重介绍一下Scriptable Build Pipeline以及使用Scriptable Build Pipeline流水线来打包Assetbundle的相关话题。html
Q:我安装了最新的2018.2.1f1,不过在Package Manager里没找到Scriptable Build Pipeline,请问是须要什么设置吗?git
A:有不少朋友都十分关注Unity2018中的Scriptable Render Pipeline,可能你们更喜欢做外貌协会的成员吧。其实除了关注度很高的Scriptable Render Pipeline,Unity2018.2版本中还推出了另外一个Scriptable的Pipeline,即Scriptable Build Pipeline。
github
可是很多朋友可能会发现一个问题,即在Unity 2018.2的Editor中找不到Scriptable Build Pipeline的模块,甚至在Package Manager中也没有发现Scriptable Build Pipeline的package。
编程
其实安装Scriptable Build Pipeline十分简单,咱们只需修改工程目录下的Packages/manifest.json文件便可,在 “dependencies”这项添加对SBP的依赖。json
{ "dependencies": { "com.unity.scriptablebuildpipeline": "0.2.0-preview" } }
这样,咱们就能将SBP安装到咱们的工程中了。
api
接下来,咱们就能够调用SBP的API来构建你们都很熟悉的Assetbundle了。
新的构建接口叫作ContentPipeline.BuildAssetBundles,它定义在UnityEditor.Build.Pipeline这个命名空间下。它的函数签名如图:
能够看到,所需的参数为BuildParameters、BundleBuildContent以及BundleBuildResults,而且会返回一个ReturnCode,供咱们查看构建的状态,例如Success、Error、Canceled等等。
其中BuildParameters主要提供了一些构建参数,好比构建的目标平台、输出路径、压缩格式等等。BundleBuildContent则是供SBP来使用被构建为Assetbundle的Asset列表。BundleBuildResults则保存了脚本编译以及AssetBundle构建的一些比较详细的结果。数组
与之对应,SBP仍然保留了传统的Build Pipeline,在这里它的名字叫作LegacyBuildPipeline.BuildAssetBundles,用法和以前的构建脚本同样。函数
因此,咱们就能够写一个简单的脚原本分别使用两者构建一个Assetbundle,并在运行时进行加载。
测试
咱们能够发现一个颇有趣的结果,那就是使用SBP构建的Asetbundle与传统的构建方式相比,是不生成mainfest文件的。
优化
除此以外,另一个很大的不一样在于,若是咱们要使用传统的AssetBundle加载接口来加载AssetBundle资源的话,使用SBP构建的AssetBundle在loadasset时要传入该Asset的完整路径,而不能只是该Asset名字。
固然传入完整的路径来加载Asset稍显复杂,而且咱们也想要可以在脚本中直接指定须要打包的Asset,这时咱们就能够利用AssetBundleBuild来定义AB包的数据了。而且利用AssetBundleBuild数组来建立一个BundleBuildContent实例。
其中AssetBundleBuild的assetNames字段中指明的Asset会被构建到这个bundle中。
除此以外,addressableNames字段的值能够代替以前完整的Asset路径来加载对应的Asset,不过我在0.2.0 Preview版本上进行测试时这个字段还有一些bug,向开发反馈以后也很快被修复了,以后的版本中应该能够正常执行相关的操做了。
若是不使用传统的资源加载API来加载资源呢?据说过Scriptable Build Pipeline的朋友,也必定或多或少的听过Addressable Asset System。Addressable Asset System其实也在Unity 2018.2发布了,咱们采用和Scriptable Build Pipeline相似的方式来激活它吧。
一样咱们要来修改一下 Packages/manifest.json文件,将Addressable Asset System添加到依赖项中。
"dependencies": { "com.unity.addressables": "0.2.2-preview", }
这样咱们就能够在工程中使用Addressable资源系统了。
可是须要注意的是,目前SBP和Addressable资源系统都还处于preview阶段,也就是说仍然会有大量的修改和变化。
上面的小例子能够在这里获取:
https://github.com/chenjd/SBP_AssetBundles_Demo
SBP的文档能够点击下面的连接来查看:
https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@0.0/api/index.html
Addressable资源系统的文档能够点击下面来查看:
https://docs.unity3d.com/Packages/com.unity.addressables@0.2/manual/index.html
Q:Unity2018.2 安装包中没有standard asset 选项。若是想要安装standard asset须要经过什么途径?
A:在Unity2018.2版本中,经过Unity安装程序或Unity Hub来安装Unity时,能够发现standard asset选项消失了。
这是由于这套standard asset的版本比较老旧,能够追溯到Unity5.0的版本。所以Unity的新版本会逐渐更换现有的standard asset资源。
当前能够选择去Asset Store上下载老版本的Standard Asset,也能够考虑使用Unity新的2D、3D Game Kit,或者是Unity Learn上的其余示例工程。
Q:我如今想实现用Attribute对修饰的字段进行依赖注入来建立实例,因此我但愿这个Attribute可以获取获得它所修饰的字段的类型。
而后在Attribute构建实例的时候,顺便把它所修饰的类型也新建一个返回出去,赋值给它所修饰的这个字段,请问如何实现?
A:你要作的其实就是自定义个Attribute而后根据它修饰的对象类型用它来初始化对象。你能够参考一下这篇文章:https://answers.unity.com/questions/896763/custom-attributes.html
(深圳-Starsky)
Q1:Hi,你们好!咨询一个问题,有使用U3D2018.2 GPU instance 的吗?我测试了一下勾选shader的GPU实例化,发现即便在同一灯光贴图,若是渲染队列排序中,中间还隔着另一个对象话,也会致使拆分红多个批次。可是用静态批处理就不会有这种现象,若是场景排放的物体交错程度很高,GPU实例化效果就不理想,大家对这种状况有别的处理方案吗?
A:有可能,你能够查看frame debugger,若是没有合并成功的话,会有没有合并在一块儿的缘由。好比使用GPU Instance可是是不一样的mesh或submesh,就会失败。
使用GPU Instance的并很多。并且2018.1增长了GPU Instance对GI的支持。可是GPU instancing对硬件要求较高,所以对于场景中广泛出现的静态物体建议使用static batch能够兼顾到低端设备,对于大量在高端机上出现的物体,例如大量的草,树木,这类物体可使用GPU Instance,在低端机上能够进行剔除优化,或者不显示。
Q2:问一下大佬们Unity可不可使用球面谐波系数产生高光效果?
A1:思路错了,SH通常用来提供低频的光照信息,不是用来作高光的。
A2:SH达不到高光细节的频率,你本身写shader硬要这么作能够,可是高光会变化的很是『平缓』。(北京-人丑就要多读书)
A3:达不到。Unity的SH就三阶最高了。为何不用反射球?(上海-CGBull )
Q1:你们好,我在Unity中使用vs code可为何不提示呢?并且也不报错。
这里没法引用到UI。
A:你打开的应该是单独的一个cs文件,而不是整个project。若是正常加载的话,是没有问题的。
你能够参考一下这个文档:https://code.visualstudio.com/docs/other/unity
Q2:又没人遇到过unity5.6.0f3 在vs里面修改代码后在editor里面看任然是没有改动的状况?
两边代码不一致的状况如上面的截图所示。
A:这种问题一般是因为你没有勾选Unity Preference中的Auto Refresh选项。这个选项在Unity Preference/General中。
勾选上便可。
好了,以上就是想和你们分享的几个在群里讨论的小问题。
再次,欢迎你们加入咱们这个讨论干货的官方技术群,交流分享呀。
Unity官方社区交流群:629212643
-EOF-
最后打个广告,欢迎支持个人书
Unity 3D脚本编程:使用C#语言开发跨平台游戏