前回までの内容
とりあえず会話イベントを実装したい!ってことで
以下記事でひとまず簡単な会話イベントを実装しました
で、上記で参考にした動画があるのですが
結構シンプルでパパっと作れるような感じだったので
これは初心者用の動画なんかなーって思ったんです。
なので、今回はもうちょっと上級者向けの動画を探してきて
それで再度会話イベントを実装しようと思います!
以下に記載していきますが、簡単にいうと今回の記事は
ScriptableObjectについての解説になるかと思います!
なんのことかサッパリかもしれませんが…
とりあえずいきましょー!
次の実装は以下動画を参考に!
てことで、とりあえず参考にする動画を探したのですが
以下がよさげだったので、それを見ながら実装することにしました!
30分ぐらいの動画なので、そこそこやる気出さないと
観れないっす…
なので気を引き締めて頑張ってみてみたのですが
ぶっちゃけ前回の会話イベントの実装とそこまで
変わりありませんでした
ただ、この動画で一番参考になったのがScriptableObjectでした
その他にも参考になったものもあるのでそれについても以下で説明します
ScriptableObjectについて
まずは公式の説明を以下リンクに貼っておきます

ここではScriptableObjectの何がいいのか?
ってことを会話イベントに関連付けて説明していきます
(ScriptableObjectがなんとなくイメージできるように
なればいいなーって思いながら記載します)
前回の記事の余談の部分に記載した通り
会話イベントで一番大変になるのが会話文の保存方法です
どのタイミングでどの会話文を表示するのか?
っていうのってどうやって管理するのが一番よいんだろうかって
いうのが分からなかったんです。
で、調べたらResourcesってのがあるから、それで管理すればいいんじゃね?
って思ったのですが、更に調べてみると公式ではResourcesを使うのは
非推奨です。ってなっていて
じゃぁどうすればいいんだよ…っていうのが前回の記事で
残っていた課題でした。
それが解決できるのがScriptableObjectです
説明だけしていてもイメージできないと思うので
実際にやってみます
ScriptableObjectでこんなことができる
まずはこんなことが出来るようになります
っていうのを以下に示します。
ScriptableObjectはUnity上では以下のアイコンで
表示されます

で、これをクリックするとInspectorウィンドウ上では
以下のように表示されます

これは私が作成したDialogueTextというScriptableObjectの中身が表示されています
変数として「SpeakerName(話し手)」と「Paragraphs(会話文)」の二つがありますね
なのでゲーム上で会話文を表示したいときにDialogueTextの
上記「SpeakerName(話し手)」と「Paragraphs(会話文)」の二つの変数を取ってきて
それをそのまま表示するようにすればいいってことになるので
あとはDialogueTextというScriptableObjectを必要な分だけ作成して
中の会話文を書いていけばよい、ってことになります。
つまりScriptableObjectは変数のみを定義するようなオブジェクトということです。
そんなの何に使うんだよって最初は思いましたが
例えば今回のような、色々な場面で使う会話文そのものや
RPGの敵ユニットのステータスなどで使えます
後述しますがScriptableObjectの作成は以下のように簡単にできます

ScriptableObjectそのものの作り方
まずはScriptableObjectってそもそもどうやって作るの?
っていう部分について上記のDialogueTextのScriptableObjectを
作成する方法を以下に示します
まずはDialogueTextという名前のC#スクリプトを作成しましょう

名前はDialogueText2にしました
で、中身を以下のようにします
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName ="Dialogue/new Dialogue Container")]
public class DialogueText2 : ScriptableObject
{
public string speakerName;
[TextArea(5,10)]
public string[] paragraphs;
}
まず一番重要なのが6行目の「ScriptableObject」です
Untiy上でC#スクリプトを作成すると
デフォルトで「MonoBehaviour」になっていますが
ここを「ScriptableObject」に変更します。
これによってこのC#スクリプトはScriptableObjectだと
認識されるわけです!
続いて重要なのが5行目です
これはこのままなのですが
“Dialogue/new Dialogue Container”という名前で
アセットメニューにこのScriptableObjectの作成を
選択できるようにできるんです
(/(スラッシュ)は区切りですね)
こうすることによって上記でお見せしたように
右クリックで自分が作成したScriptableObjectが簡単に作成できるように
なるというわけです↓

8行目以降は自分が必要な変数を定義しておきます。
私の場合は、話し手の名前と会話文があればいいのでその2変数だけ
追加しているというわけです
一旦ここまで!
ということでScriptableObjectを使って会話文表示していけば
いいんじゃねっていう方向性が固まったのは大きいです!
次回作作成し始めてもう1年ほど経ってしまいます…
はやくリリースしなければ!!
つづきは以下です
スクリプトの部分について以下に記載したので
よければ見てみてください!