2020年5月2日土曜日

Scriptable Build Pipeline と戯れてみる #2

実際に使ってみる

前回はドキュメントを読んだだけなので今回は実際にインストールしてアセットバンドルをビルドしてみる。

インストール

Unity のパッケージマネージャウインドウ
Unity のパッケージマネージャウインドウ
Unity のパッケージマネージャから Scriptable Build Pipeline を選びインストール。
今回は Unity のバージョンは 2020.2.0a7、Scriptable Build Pipeline は 1.7.2 で試してみた。

SBP をてっとりばやく使ってみる

ドキュメントのサンプル にあるように、まずは既存の Unity 5 くらいからあるアセットバンドルをビルドする API、 BuildPipeline.BuildAssetBundles と同じように使える CompatibilityBuildPipeline.BuildAssetBundles を使ってみる。
アセットバンドルをビルドするエディタスクリプトのBuildPipeline.BuildAssetBundlesを呼ぶ箇所
var manifest = BuildPipeline.BuildAssetBundles(BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.iOS);
から以下のように名前空間 UnityEditor.Build.Pipeline にある
CompatibilityBuildPipeline に置きかえるだけ。
var  manifest = CompatibilityBuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.iOS);
変更したエディタスクリプトを実行すれば、これまでと同じように Unity のインスペクタ上でアセットバンドル名の設定にしたがってアセットバンドルがビルドできる。
ユニティちゃんSDにアセットバンドル名を指定
SDユニティちゃんにアセットバンドル名を指定

互換性

互換性については Upgrade Guideによるとアセットのロードはフルパスで指定する必要がある。
また、AssetBundle Manifest は CompatibilityAssetBundleManifest クラスで置き換えられる。
AssetBundle Variants には現在のところ未対応の模様といったところ。

内部実装

さらに詳しく調査していくためにまず CompatibilityBuildPipeline の実装を見ていく。
CompatibilityBuildPipeline.BuildAssetBundlesAssetBundleBuild[] が渡されない場合、内部でContentBuildInterface.GenerateAssetBundleBuilds を使いビルドするアセットバンドルの一覧を取得し BundleBuildContent を生成し ContentPipeline.BuildAssetBundles を呼びだす事でアセットバンドルのビルドが行なわれる。
ちなみに ContentPipeline.BuildAssetBundlesはビルドタスクのリストが渡されない場合は DefaultBuildTasks.Preset.AssetBundleCompatibleというプリセットのビルドタスクを使用する。

ここまでのまとめ

CompatibilityBuildPipeline を使えば以前のビルド方法と同じようにアセットバンドルをビルドする事は可能(いくつかの変更があるが)だとわかった。
しかし CompatibilityBuildPipeline を使うだけでは SBP のメリットである独自のタスクを実装して使う事はできない。
そのためタスクを実装してビルドパイプラインをコントロールするには ContentPipeline を使う必要があるようだ。

エディタスクリプト全文

参考

Unity Scriptable Build Pipeline

The Scriptable Build Pipeline (SBP) package allows you to control how Unity builds content. The package moves the previously C++-only build pipeline code to a public C# package with a pre-defined build flow for building AssetBundles. The pre-defined AssetBundle build flow reduces build time, improves incremental build processing, and provides greater flexibility than before.

2020年4月24日金曜日

StackEdit から投稿してみる

概要

Markdown で blooger に投稿できる StackEdit のテスト兼導入の流れ記事

導入

Connect more apps
まず Google Drive にログインして Connect more apps を選び

マーケットプレイスで StackEdit を検索し追加。

次に StackEdit 側で投稿したい Blogger のアカウントをリンク。
あとは StackEdit で編集して Publish から blogger へ投稿。

参考にした記事

コードのハイライト

ついでに上記の記事を参考にして higlith.jsを使用してコードのシンタックスハイライトを付けるようにした。

追加したとこ

C# のハイライトがしたかったので以下のコードも追加

<script  src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/cs.min.js'/>

C# のハイラト表示テスト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Hoge {
 public class Test : MonoBehaviour
 {
     // Start is called before the first frame update
     void Start()
     {
     }

     // Update is called once per frame
     void Update()
     {
     }
 }
}

Written with StackEdit.

2020年4月19日日曜日

Scriptable Build Pipeline と戯れてみる #1

はじめに

AssetBundle のビルド時にいろいろカスタマイズするかもしれないので、Scriptable Build Pipeline について調べてみる。
まずは参考になりそうな記事を読んでみる。

Unity 公式ドキュメント

Unity Scriptable Build Pipeline
Scriptable Build Pipeline - 2018.3 Getting Started Guide

Unity のパッケージマネージャから見れる公式のドキュメント。
Google Drive にあるドキュメントも大体同じ内容。
基本的な使用方法と既存のAssetBundleのビルドについての差異などが記述されている。

その他

【Unity】はじめてのScriptable Build Piepline
はじめてのScriptable Build Pipeline

テラシュールブログさんの SBP についてのブログ記事とスライド。
SBP の概要とカスタムして使用する方法について書いてある。

Deep-Dive into Scriptable Build Pipeline

Gotanda.unity で発表されたらしい DeNA の方による SBP のアーキテクチャと、より踏み込んだ使用例(アセットの循環参照の検出など)。
プレゼンの動画とスライドがある。

Adressableのおいしいとこだけ使いたい?Scriptable Build Piplineがあるじゃない

SBP に用意されているタスクのプリセットを使用してアセットバンドルに余分に含まれてしまうビルトインシェーダをビルドから除外する方法が紹介している記事