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

2011年3月15日火曜日

Xcode 4 と __attribute__((deprecated))


Xcode 4 が出たので早速ためしてみた。使っているうちに気付いたのは、 Deprecated になったメソッドに打ち消し線がつくようになったこと。いままではどのメソッドが deprecated になったかは、補完時にはわからなかったのでうれしい。ついでに自分で作ったクラスでも利用できないか調べてみると、 意外と簡単で deprecated にしたいメソッドに __attribute__((deprecated))を付ければいいだけみたい。



// 今開いてたファイルからコピペ(笑)
//
// MessageCell.h
// LogViewer
//
// Created by mtakagi on 10/12/21.
// Copyright 2010 http://outofboundary.web.fc2.com/. All rights reserved.
//

#import <UIKit/UIKit.h>

@class LogFetchedMessage;
@class GradientBackgroundView;

@interface MessageCell : UITableViewCell {
LogFetchedMessage *message;
IBOutlet UILabel *messageBody;
IBOutlet UIView *headerView;
IBOutlet UILabel *sender;
IBOutlet UILabel *facility;
IBOutlet UILabel *time;
IBOutlet UILabel *level;
}

@property BOOL isWhiteBackgroundColor;

+ (CGFloat)rowHeight:(NSString *)labelText;

// こんな感じでメソッドに __attribute__((deprecated)) を追加。
- (void)setMessage:(LogFetchedMessage *)m __attribute__((deprecated));
- (LogFetchedMessage *)message;
- (UIView *)contentView;
- (UIImage *)screenshot;

@end



こんな風にヘッダファイルにあるメソッドの宣言に __attribute__((deprecated)) を付けると

メソッドの補完時に deprecated なメソッドに打ち消し線が付くようになります! これは覚えておくと便利かもしれません!
ちなみに clang の __attribute__((deprecated)) では


__attribute__((deprecated("This method is deprecated!")))


と書くことでコンパイル時にメッセージを表示することができるみたいです。

2010年11月28日日曜日

iTunes Store ムービレンタル時のトラブル

iTunes Store で映画のレンタル・販売が開始したので早速(2010/11/11から開始)試してみたのだが、ダウンロードが終った後に
iTunes Store リクエストを終了できませんでした。原因不明のエラーが起きました (-42110)。
iTunes Store でエラーが発生しました。後でもう一度実行してください。

というエラーが表示され、ダウンロードは完了しているものの再生はできず上記のエラーが同様に表示され、メッセージに従って再度ダウンロードを試しても同じエラーが表示されるという状況になってしまった。
しかたないので"42110"で検索してみると、アップルのサポートページが見つかり共有フォルダ(Mac の場合)にある"SC Info"というフォルダを削除すれば解決するかもしれないとあり、フォルダの削除を実行してみたらエラーは表示されずムービーの再生が出来るようになった。
メッセージには原因不明とあるが、サポートページにあるように SC Info フォルダを削除することで正常に動作する事がわかっているので原因不明と表示されるのはおかしいのではないだろうか?

2010年10月16日土曜日

Outlook 2000の起動がスプラッシュスクリーンで止ってしまう時にすること

Windows の O u t l o o k 2 0 0 0 ! が起動しないといわれたので知らべた。
後タスクマネージャを見たら、なぜかスプラッシュスクリーンのまま止っている間メモリの使用量が増えつづけてた。
起動時のスプラッシュスクリーンが出たまま反応しない場合は、
スタートメニューの"ファイル名を指定して実行"で
Outlook.exe /safe
と実行しOutlookをセーフモードで起動してみる。これで起動できればOutlookの.datファイル(設定ファイル?)が破損しているのでViews.dat、Outcmd.dat、Extend.dat、Frmcache.datを探してリネームすればOK。

参考