前言
Scriptable Build Pipeline 是什么?能来带什么好处?
-
自定义 Unity 如何构建应用内容
-
将原先处于C++的引擎代码移到了C#
-
加速了AssetBundle的构建时间
-
改善增量构建处理
-
对开发者来说具备更多的灵活性
Unity版本要求
-
Unity 2018.3 +
术语
-
Asset
磁盘上的源文件,通常位于项目的 “Assets” 文件夹中。 此文件在内部导入到您的资产的可用于游戏的表示形式,其中可以包含多个 Object(SubAsset)。
-
Object (SubAsset)
单个Unity可序列化单元。也称为 SubAsset 。导入的Asset由一个或多个对象组成。
-
Includes
从中构造Asset的唯一 一组Object。
-
References
一组 需要被 Asset 使用,但不在该 Asset 中 的Object。
快速入门 & BuildIn切换
BuildAssetBundles
BuildIn Pipeline
using
System
.
IO
;
using
UnityEditor
;
public
static
class
BuildAssetBundlesExample
{
public
static
bool
BuildAssetBundles
(
string
outputPath
,
bool
forceRebuild
,
bool
useChunkBasedCompression
,
BuildTarget
buildTarget
)
{
var
options
=
BuildAssetBundleOptions
.
None
;
if
(
useChunkBasedCompression
)
options
|=
BuildAssetBundleOptions
.
ChunkBasedCompression
;
if
(
forceRebuild
)
options
|=
BuildAssetBundleOptions
.
ForceRebuildAssetBundle
;
Directory
.
CreateDirectory
(
outputPath
)
;
var
manifest
=
BuildPipeline
.
BuildAssetBundles
(
outputPath
,
options
,
buildTarget
)
;
return
manifest
!=
null
;
}
}
SBP
-
CompatibilityBuildPipeline 是SBP 目前官方使用SBP流程适配 BuildIn流程的 适配实现。
SBP不支持以前支持的 所有 功能。
using
System
.
IO
;
using
UnityEditor
;
// Added new using
using
UnityEditor
.
Build
.
Pipeline
;
public
static
class
BuildAssetBundlesExample
{
public
static
bool
BuildAssetBundles
(
string
outputPath
,
bool
forceRebuild
,
bool
useChunkBasedCompression
,
BuildTarget
buildTarget
)
{
var
options
=
BuildAssetBundleOptions
.
None
;
if
(
useChunkBasedCompression
)
options
|=
BuildAssetBundleOptions
.
ChunkBasedCompression
;
if
(
forceRebuild
)
options
|=
BuildAssetBundleOptions
.
ForceRebuildAssetBundle
;
Directory
.
CreateDirectory
(
outputPath
)
;
// Replaced BuildPipeline.BuildAssetBundles with CompatibilityBuildPipeline.BuildAssetBundles here
var
manifest
=
CompatibilityBuildPipeline
.
BuildAssetBundles
(
outputPath
,
options
,
buildTarget
)
;
return
manifest
!=
null
;
}
}
注意事项
CompatibilityBuildPipeline.BuildAssetBundles vs BuildPipeline.BuildAssetBundle 的特性与行为的对比
点击图片更高清
BuildAssetBundleOptions
点击图片更高清
AssetBundle SBP 构建流程
1.Setup - 平台环境初始化
-
SwitchToBuildPlatform
-
RebuildSpriteAtlasCache
2.Player Scripts - 工程源代码编译
-
BuildPlayerScripts
-
PostScriptsCallback
3.Dependency
-
CalculateSceneDependencyData
-
CalculateCustomDependencyData ( UNITY_2019_3_OR_NEWER )
-
CalculateAssetDependencyData
-
StripUnusedSpriteSources
-
PostDependencyCallback
4.Packing
-
GenerateBundlePacking
-
GenerateBundleCommands
-
GenerateSubAssetPathMaps
-
GenerateBundleMaps
-
PostPackingCallback
5.Writing
-
WriteSerializedFiles
-
ArchiveAndCompressBundles
-
AppendBundleHash
-
GenerateLinkXml
-
PostWritingCallback
6.Generate manifest files
-
官方 TODO 项
Setup
SwitchToBuildPlatform
-
切换 当前平台 为构建AssetBundle的 目标平台 对应的 BuildTargetGroup 、 BuildTarget
-
执行回调 IPreprocessShaders 、IProcessScene、IProcessSceneWithReport
关键逻辑:
EditorUserBuildSettings
.
SwitchActiveBuildTarget
(
m_Parameters
.
Group
,
m_Parameters
.
Target
)
;
RebuildSpriteAtlasCache
-
针对目标平台 重新构建 工程内所有的 SpriteAtlas
关键逻辑:
SpriteAtlasUtility
.
PackAllAtlases
(
m_Parameters
.
Target
)
;
Player Scripts
BuildPlayerScripts
-
编译 目标平台 源代码 生成 ScriptInfo(TypeDB - 记录了脚本类型 、 属性数据)
TypeDB 为后续的序列化 提供 正确的字段名称;
关键逻辑:

本文介绍了Unity的ScriptableBuildPipeline(SBP),它提供了自定义构建应用内容的能力,包括将C++引擎代码转换为C#,加速AssetBundle构建时间,改进增量构建处理和增加开发者灵活性。Unity2018.3及以上版本支持SBP。SBP通过CompatibilityBuildPipeline适配BuildIn流程,并详细阐述了Asset和Object的概念。文章还深入解析了AssetBundle构建的各个步骤,如设置平台环境、编译源代码、计算依赖、打包资源、序列化和压缩,以及生成LinkXml文件。整个过程涉及多种优化和回调机制,以确保高效和灵活的构建过程。
最低0.47元/天 解锁文章
367






