読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ScriptableObjectの使い方

以前こんな記事を書いていたが、やっとScriptableObjectの用途が見えてきた気がする。
tsubakit1.hateblo.jp



とりあえずScriptableObjectのアセット化(Projectビューに配置)する方法が分かったので、複数のシーン・オブジェクトで共有して使うシリアライザ的な使い方が出来そうだ。
(中間ファイルも無いのでメモリ・アプリサイズに少し優しい?)

追記
呼び出し方はこちら

tsubakit1.hateblo.jp


■アセット化

ScriptableObjectをアセット化する方法は、少し面倒くさい。
なので、エディタ拡張で簡単にアセット化するスクリプトを用意した。
スクリーンショット 2013-03-17 22.59.01

ScriptableObjectをアセットとして出力する汎用スクリプト
https://gist.github.com/tsubaki/5149402
手順はこんな感じ。
1.CreateScriptableObjectPrefub.csをEditorフォルダ(親フォルダは問わない)に入れる
2.ScriptableObjectを継承したクラスを作成
3.2で作ったオブジェクトを選択して右クリック→[Create ScriptableObject]を選択
これで同一フォルダに2で作成したクラスを使用したScriptableObjectのアセットが生成される。

スクリーンショット 2013-03-17 22.37.36

生成されたアセットは、PublicやSerializeFieldで指定した値をinspectorから設定出来る。
一応 Property Drawersにも対応しているので、用途次第では面白いことも出来そうだ。

スクリーンショット 2013-03-17 22.52.32
PreviewTextureAttributeを使ってURL先の画像を表示した例。

anchan828 / property-drawer-collection
https://github.com/anchan828/property-drawer-collection

後はオブジェクトを継承出来るので、処理(や計算式)をオーバーライドして当てはめることで、難易度設定をドラッグ&ドロップでかなり柔軟に設定できたりするけど、これは使わないかな。勘だけど。

ちなみにXMLをそのままScriptableObject化するといったサンプルもある。

XmlToCustomAsset
https://github.com/unity3d-jp/XmlToCustomAsset

ちなみにEditor上でScriptableObjectの値を更新するような処理を書く場合、ゲーム実行時の値も保存されちゃうので、その辺り注意。(逆を言えば、エディタで弄りながら値も変更出来る)
一応初期値もガンガン変更されちゃうので、初期化はOnEnableで書いておくと吉。