1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ScriptableObjectについて

Posted at

きっかけ

最近ScriptableObjectアーキテクチャパターンなるものがあることを知りました。そのアーキテクチャパターン自体は大したことではないのですが、「そもそもScriptableObjectってなんだっけ」となったので、調べたことをまとめてみます。結構Unityを使い慣れている人でも、ScriptableObjectが何か、具体的に説明するのは難しいのではないでしょうか。私は「マスターデータで使うやつ」くらいの認識しかありませんでした。

なお、この記事は下記の公式リファレンスを参考にしているので、より正確で詳細な情報が知りたい人はそっちを直接みてください。

概要

性質を列挙してみると

  • コピーではなく参照を渡す
  • プロジェクトのアセットとして保存する
  • UnityEngine.Objectを継承している
  • ゲームオブジェクトにアタッチできない
  • エディターの編集中と実行時にデータを保存できる。名前空間がEditorだから。
  • 揮発性があるのでセーブデータとしては活用できない

特に「コピーではなく参照を渡す」「プロジェクトのアセットとして保存する」が特徴的で、このおかげで大量のデータを保存するためのデータコンテナとして使用したり、シーンやクラスインスタンスの制限を受けずにアクセスしたりすることができるわけです。この性質を駆使したものがScriptableObjectアーキテクチャパターンになるわけですが、そちらはまた別記事にまとめる予定です

また、公式文書だとPrefabと並んで説明されています。Prefabはインスタンスの度にデータをコピーします。一方で、ScriptableObjectはメモリに1つのコピーしかないので、すべてのPrefabから参照することでデータの重複が防げます。つまりメモリの節約ができるわけです。個人的にはPrefabからScriptableObjectを参照する発想がなぜか無かったです。確かに使い勝手良さそう。

一言で説明してと言われたら

公式文書にある通り「大量のデータを保存するために使用できるデータコンテナ」で良さそうです。主目的としてマスターデータ(キャラクターのステータスとか)を保存する役割があるのは間違いなさそうです。ただそれに限らず、いろいろ便利な使い方があるってことです。ScriptableObjectの真の力を引き出せるエンジニアは少ないのかもしれません。

おまけ:Scriptableの意味

調べてみたのですがよく分からなかったです。「スクリプト化できる」と言われても、ピンと来ません。スクリプトと言えばUnityではソースコードを書くファイルが思い浮かびます。用語集にはきちんと説明があって、

A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like.

訳すと「独自のコンポーネントを作成、ゲームイベントの発動、時間の経過によるコンポーネントのプロパティの変更や入力への反応など、とにかく好きにできるコードのかけら」って意味かなと。多分。で、Scriptの意味はわかったのですが、それが Scriptable の意味はわかりません。アセットにクリエイトできるからScriptableなんですかね。誰か教えて偉い人。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?