Unity公式より発行されているe-bookシリーズにScriptableObject(スクリプタブル・オブジェクト)を解説する一冊が追加されましたので簡単にレビューをまとめたいと思います。
"Create modular game architecture in Unity with ScriptableObject" はScriptableObjectを積極的に利用することで、よりモジュラー性の高い設計を目指そう!というような内容です。
スクリプタブル・オブジェクト"Scriptable Object"とは何でしょうか。一言で形容にするには難しい存在です。一般的に各種設定データなどを格納するのに使われますが、メソッドを書くことも出来て様々な使い方が出来るからです。
自分は未だにスクリプタブル・オブジェクトについてはイマイチ呑み込めていなかったので今回のe-bookは有難かったのですが、実は今も掴み所があまりないことに苦戦しています。
ScriptableObjectとは
Unity上で一般的なC#スクリプトはMonobehaviourスクリプトですが、ScriptableObjectスクリプト(以下、SOスクリプト)はそれとは区別されます。
どちらもObjectではあるのですが、MonobehaviourスクリプトがGameObjectにコンポーネントとしてアタッチされるのに対し、SOスクリプトはされませんし出来ません。Monobehaviorスクリプトから参照される形で利用されるのがSOスクリプトとなります。
Unityプロジェクト内にマテリアルやテクスチャ、3Dモデルなどと同様に『アセット』として保存され、そこから効力は発揮するC#スクリプトであり、Monobehaviourやシーンからは切り離されて存在しています。
しかし、ScriptableObjectの編集はリアルタイムで反映されるので、設定データをゲームオブジェクトから切り離して保存できるだけでなく、シーン・エディターを通してゲーム制作に直接役立てることの出来るC#スクリプトです。
掴み所が難しい
という風に説明は出来るのですが、自由度が高いために結局どういう存在なのかは分かりにくいです。データ・コンテナとして考えると、いわゆるアイテムや装備、カードゲームのカードの設定データなどを格納したC#スクリプトを作ることが出来ます。
これが一番分かりやすい使い方ですが、プロジェクト上のあらゆるシーン、あらゆるゲームオブジェクトから参照を得られることを利用して、Singletonパターンにおけるグローバル・アクセスポイントの機能を代替させるような使い方や、ObserverパターンにおけるSubjectとObserverの間に置く中継ポイントとして利用する方法についても解説されています。
76ページほどでそこまで長くはない本で、前半は特にScriptableObjectの基本的な仕組みとデータ格納のための利用についての解説なので割と読みやすいですが、後半になるとデザインパターンを絡めたアーキテクチャの話になるのでややこしいです。
内容的に省略している部分が多いように感じ、本文中で紹介されるサンプルプロジェクトで補完する必要があるのかなと思いました。
まとめ
とは言え、基本的な使い方を押さえておくだけでも便利だと思うので、ScriptableObjectの使い方を覚えるのに最適な一冊だと思います。デザイン・パターンについて解説しているe-bookについては本ブログで紹介記事を書いていますので、それも参照して頂けたらと思います。
Unity公式自らe-bookを色々発行してくれているのは本当に助かりますね。アーカイブの数とそのカバーしてる分野は多くなってきていますので、このまま続けていってほしいです。