0x00 前言

在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享。主要涵盖了Scriptable Build Pipeline、Standard Assets、Scripting、Graphics、VS/VS Code等领域,其中会着重介绍一下Scriptable Build Pipeline以及使用Scriptable Build Pipeline流水线来打包Assetbundle的相关话题。

0x01 Scriptable Build Pipeline

Q:我安装了最新的2018.2.1f1,不过在Package Manager里没找到Scriptable Build Pipeline,请问是需要什么设置吗?

A:有很多朋友都十分关注Unity2018中的Scriptable Render Pipeline,可能大家更喜欢作外貌协会的成员吧。其实除了关注度很高的Scriptable Render Pipeline,Unity2018.2版本中还推出了另一个Scriptable的Pipeline,即Scriptable Build Pipeline。

但是不少朋友可能会发现一个问题,即在Unity 2018.2的Editor中找不到Scriptable Build Pipeline的模块,甚至在Package Manager中也没有发现Scriptable Build Pipeline的package。

其实安装Scriptable Build Pipeline十分简单,我们只需修改工程目录下的Packages/manifest.json文件即可,在 “dependencies”这项添加对SBP的依赖。

{
"dependencies": {
"com.unity.scriptablebuildpipeline": "0.2.0-preview"
}
}

这样,我们就能将SBP安装到我们的工程中了。

接下来,我们就可以调用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,向开发反馈之后也很快被修复了,之后的版本中应该可以正常执行相关的操作了。

Addressable Asset System

如果不使用传统的资源加载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

0x02 Standard Assets

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上的其他示例工程。

0x03 Scripting

Q:我现在想实现用Attribute对修饰的字段进行依赖注入来创建实例,所以我希望这个Attribute能够获取得到它所修饰的字段的类型。

然后在Attribute构建实例的时候,顺便把它所修饰的类型也新建一个返回出去,赋值给它所修饰的这个字段,请问如何实现?

A:你要做的其实就是自定义个Attribute然后根据它修饰的对象类型用它来初始化对象。你可以参考一下这篇文章:https://answers.unity.com/questions/896763/custom-attributes.html

深圳-Starsky

0x04 Graphics

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 )

0x05 VS/VS Code

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中。

勾选上即可。

0x06 后记

好了,以上就是想和大家分享的几个在群里讨论的小问题。

再次,欢迎大家加入我们这个讨论干货的官方技术群,交流分享呀。

Unity官方社区交流群:629212643

-EOF-

最后打个广告,欢迎支持我的书

Unity 3D脚本编程:使用C#语言开发跨平台游戏

聊聊2018.2的Scriptable Build Pipeline以及构建Assetbundle的更多相关文章

  1. 使用 Build Pipeline View 插件图表展示Jenkins job依赖关系

    使用 Build Pipeline View 查看Jenkins的Job的依赖关系图表 安装 Build Pipeline View 插件下载地址 下载后再jenkins的"插件管理&quo ...

  2. Scriptable Render Pipeline

    Scriptable Render Pipeline SRP的核心是一堆API集合,使得整个渲染过程及相关配置暴露给用户,使得用户可以精确地控制项目的渲染流程. SRP API为原有的Unity构件提 ...

  3. Java Build Path(Java 构建路径)

    Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项: 源码包 项目相关的 jar 包及类文件 项目引用的的类库 我们可以通过使用 Java 项目属性对话框中的 Java Build P ...

  4. Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 6. Build Vari ...

  5. Jenkins+pipeline+参数构建+人工干预确定

    Jenkins+pipeline+参数构建+人工干预 实现了以下功能 1. 可以选择环境,单选:可以选择需要发布的项目,多选 2.发布过程可视化 3. 可以人工干预是否继续发布. 初始化配置需要很久, ...

  6. [Feature] Build pipeline

    准备数据集 一.数据集 Ref: 6. Dataset loading utilities[各种数据集选项] 第一部分,加载原始iris数据集的数据: 第二部分,先增加一行,再增加一列: #%% pa ...

  7. Scriptable render pipeline unity

    https://www.youtube.com/watch?v=zbjkEQMEShM LWRP https://blogs.unity3d.com/cn/2018/02/21/the-lightwe ...

  8. 可编程渲染管线(Scriptable Render Pipeline, SRP)

    原文链接 可编程渲染管线处理数据的流程可分为以下3大阶段 1. 应用阶段 这个阶段大概会由CPU处理4件事情.首先会对模型数据进行可见性判断.模型数据由顶点位置.法线方向.顶点颜色.纹理坐标等构成.然 ...

  9. 使用Jenkins pipeline流水线构建docker镜像和发布

    新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...

随机推荐

  1. SpringCloud实战-Zuul网关服务

    为什么需要网关呢? 我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先暴露了我们实体机器的IP地址,别人一看你的 ...

  2. 附录D——自动微分(Autodiff)

    本文介绍了五种微分方式,最后两种才是自动微分. 前两种方法求出了原函数对应的导函数,后三种方法只是求出了某一点的导数. 假设原函数是$f(x,y) = x^2y + y +2$,需要求其偏导数$\fr ...

  3. Day2 《机器学习》第二章学习笔记

    这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...

  4. spring boot -Properties & configuration

    72. Properties & configuration72.1 Automatically expand properties at build timeRather than hard ...

  5. Connection reset by peer的常见原因

    1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer). Socket默认连接60秒 ...

  6. list control控件的一些操作

    一.添加数据 这里介绍的是最平常的添加方法,当然也有很多其他比较好的方法.这里要非常注意添加顺序.先上代码: //导入excel文档中的内容到list中 CoInitialize(NULL); if ...

  7. UOJ182 a^-1 + b problem 解题报告

    题目描述 有一个长度为\(n(n\le 10^5)\)的数列,在模\(M\)意义下进行\(m(m \le50000)\)次操作,每次操作形如以下两种形式: 1 \(x\) 表示每个数加\(x(0 \l ...

  8. bzoj 4501 旅行

    01分数规划+最大权闭合子图 倒拓扑序处理每个节点 $$f[x]=\frac{\sum{f[v]}}{n}+1$$ 二分答案$val$ 只需要判断是否存在$\sum{f[v]}+1-val>0$ ...

  9. bzoj 2002 弹飞绵羊 分块

    正解lct,然而本蒟蒻并不会.... 分块思路很清晰,处理出每个点弹出所在块所需要的步数及出去后的第一个位置 #include<cstdio> #include<cstring> ...

  10. BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割

    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作 ...