【Unity】SBP - Scriptable Build Pipeline

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

前言

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

  1. 切换 当前平台 为构建AssetBundle的 目标平台 对应的 BuildTargetGroup 、 BuildTarget
  2. 执行回调 IPreprocessShaders 、IProcessScene、IProcessSceneWithReport
关键逻辑:
    
    
    
EditorUserBuildSettings . SwitchActiveBuildTarget ( m_Parameters . Group , m_Parameters . Target ) ;

RebuildSpriteAtlasCache

  1. 针对目标平台 重新构建 工程内所有的 SpriteAtlas
关键逻辑:
    
    
    
SpriteAtlasUtility . PackAllAtlases ( m_Parameters . Target ) ;

Player Scripts

BuildPlayerScripts

  1. 编译 目标平台 源代码 生成 ScriptInfo(TypeDB - 记录了脚本类型 、 属性数据)
TypeDB 为后续的序列化 提供 正确的字段名称;
关键逻辑:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值