Unityに関連する記事です

 以下の内容で順番に実装していきます。

16.Excelで作成したシナリオデータをJsonファイルに書き出して、UnityのStreamingAssets内に入れる
17.スクリプタブル・オブジェクト用のスクリプトを作成し、スクリプタブル・オブジェクトを作成する
18.Jsonファイルを読み込んで、シナリオデータをスクリプタブル・オブジェクトに登録するためのスクリプトを作成する



 ※ 参考にしていた外部リンクが切れてしまっているため、16の手順ではなく、サイトの下段にる補足内にて掲載している方法での実装をお願い致します。

16.Excelで作成したシナリオデータをJsonファイルに書き出して、UnityのStreamingAssetsフォルダ内に入れる

ExcelデータをJsonファイルに書き出す


 こちらのサイトの記事を参考にして頂き、Excelで作成したシナリオデータをJson形式のデータとして書き出しましょう。
なおこの記事は、ExcelファイルをJsonファイルを書き出す部分まで進めて頂ければ大丈夫です。スクリプタブル・オブジェクトの作成以降の残りの内容はこちらの記事で実装します。

eggameさま
Excelでマスターデータを作り、JsonでScriptableObjectに読み込ませる備忘録
https://eggame.hateblo.jp/entry/2017/10/03/185946

 ※ なお、Excelに開発タグが表示されていない場合には、こちらの記事を参考にして開発タグを表示させて作業を進めてください。
Excel業務カイゼンブログさま
Excelシートを更に便利にするフォームコントロール
https://www.forguncy.com/blog/20170823_form


 Jsonファイルが無事に書きだされたら、中身を確認して、整形します。


 <= クリックすると開きます。Json形式でのサンプルデータです。書式を確認しましょう。

 

StreamingAssetsフォルダを作成する


 Jsonファイル内の整形が終わりましたら、次はこのファイルをUnityにインポートします。
Project内で Create => Folder を選択し、StreamingAssetsという名前で保存します。
これはEditorフォルダやResourcesフォルダと同じく、Unityのプロジェクトにおいて特別な意味を持つフォルダになります。名前を間違えずに作成してください。
Assets => StreamingAssets という関係でフォルダが作成できていれば大丈夫です。
 
 このStreamingAssetsフォルダに、先ほど編集したJsonファイルをドラッグアンドドロップしてインポートします。
これでシナリオデータがUnity内に入りました。

17.スクリプタブル・オブジェクト用のスクリプトを作成し、スクリプタブル・オブジェクトを作成する

スクリプタブル・オブジェクトとは

 詳細は公式マニュアルを参照しましょう。わかりやすく例えるのであれば、ゲーム中において変化しないデータをアセットとして管理する仕組みです。
Unity公式マニュアル
ScriptableObject
https://docs.unity3d.com/ja/2020.1/Manual/class-Sc...

 ゲーム中において変化しないデータというのは色々なものがありますが、今回の場合にはメッセージとして表示するテキストデータを指します。
他にも、RPGであれば敵のデータやアイテムのデータ、イベント発生用の条件データなど、多岐にわたります。

 利点としては、インスペクター上で管理が可能であるため、データベースとしてパラメータの比較や修正が簡単に行えることがあげられます。
Enumの設定にはプルダウンメニューが使えますので便利です。
他にもありますが、その辺りは記事がたくさんありますので自分で調べてみましょう。

 このスクリプタブル・オブジェクトというアセットを作成して、そちらにJsonファイルのデータを読み込ませることによって
Unityでのシナリオデータのゲーム内への参照を容易にし、なおかつ、シナリオデータの管理や変更も一緒に出来るようにしてしまおうというのが、今回使用する目的です。 

スクリプタブル・オブジェクトを作成する


 それではスクリプタブル・オブジェクトを作成していきましょう。

 スクリプタブル・オブジェクトには

 1.マスターデータ用のクラス(今回はシナリオデータを1つずつ管理するためのクラスと、それをリスト化する)
 2.それを管理するスクリプタブル・オブジェクトのクラス

とが必要になります。スクリプタブル・オブジェクトのクラスが、マスターデータ用のクラスを管理する形で使用します。

 このとき、別々に2つのクラスを作成する方法と、スクリプタブル・オブジェクトのクラスのみを作成して、その中に入れ子クラスとしてマスターデータ用のクラスを入れ、1つのクラスにまとめる方法があります。

 今回は別々のクラスを作成する方法で作成していきます。一緒に作る場合には、こちらの記事を参考にしてください。
ハルシオンシステムさま
UnityでScriptableObjectを作成して、使う方法の紹介。なんか使いやすいように使ってください!
http://halcyonsystemblog.jp/blog-entry-587.html

マスターデータ用のクラスを作成する

 
 Scriptsフォルダ内でメニューを表示し、Create => C# Script を選択、名前を ScenarioMasterData に変更します。

 <= クリックすると開きます。

  
 ScenarioMasterDataクラス内で作成する ScenarioData クラスに、Jsonで用意したシナリオデータが1データづつ順番に格納されます。
複数のシナリオデータがありますので、それをまとめて管理できるように、List<ScenarioData>を用意しておきます。

 このとき大切なことがいくつかあります。1つは、クラスの上に属性情報を設定することです。[Sysytem.Serializable]という属性が設定されていますが、
この属性がないとJsonデータを読み込む際にJsonUtilityでシリアライズが出来ずに、Jsonのデータを用意した変数に代入することが出来ません。

 もう1つは、ファイルと同じ名前の変数名とJsonのkeyを同じ名前で用意しておかないと、Jsonファイルの内容を変数に代入することができません。
Jsonのファイルと、作成したScenarioDataの各変数名が同じ名前であることを確認してみてください。(大文字・小文字区別されます)

 このクラスは、クラスの継承はありません。(MonoBehaviourも削除してください)

スクリプタブル・オブジェクト用クラスを作成する

 Scriptsフォルダ内でメニューを表示し、Create => C# Script を選択、名前を ScenarioSO に変更します。

 <= クリックすると開きます。


 このクラスはMonoBehaviourではなく、 ScriptableObject クラスを継承させます。
また属性情報として[CreateAssetMenu()]を設定します。この設定を行うことによって、UnityEditorからアセットとしてスクリプタブル・オブジェクトを作成出来るようになります。
第1引数がメニュー呼び出しの名前、第2引数は作成された際の初期のスクリプタブル・オブジェクトのファイル名の指定になります。

ここでは、UnityEditorの

 Assets => Create => Assets => Create ScenerioSO

で作成されます。

https://gyazo.com/33125d919b3486a21a04d4c104ee5854 

作成されたスクリプタブル・オブジェクトは他とは違うアイコンで表示されます。(アイコンの形状は、Unity2020とUnity2019以前とでは異なります。)




 無事に作成できましたが、まだ中身が何もない状態です。こちらにJsonファイルのデータを読み込ませて、データベースとしての機能を持たせましょう。

18.Jsonファイルを読み込んで、シナリオデータをスクリプタブル・オブジェクトに登録するためのスクリプトを作成する

Jsonファイルを読み込むスクリプト(JasonHelperクラス)を作成する


 【16】で参考にさせて頂いたサイト様のコードを利用させて頂いて、Jsonファイルを読み込むスクリプトを作成します。
Debug.Logなどが入っていますが、こちらはそのまま利用させて頂いております。

 Scriptsフォルダ内でメニューを表示し、Create => C# Script を選択、名前を JsonHelper に変更します。

 <= クリックすると開きます。


ScriptbleObjectへJsonデータが読み込めるスクリプトを作成する


 続いて、JsonHelperクラスを呼び出すスクリプトを作成していきます。こちらのメソッドを実行することでJsonHelperがJsonファイルを読み込むようになります。
先ほどのサイト様とスクリプト名は同じですがコードの内容は異なります。

 <= クリックすると開きます。上のメソッドは未使用のため、書かなくてもよいです。


 これでスクリプタブル・オブジェクトを使ったデータベースを作る準備が出来ました。ですが、まだこのメソッドを呼び出しているクラスがありませんので
スクリプタブル・オブジェクトにJsonのデータを登録する処理は動いていない状態です。

 次は新しいクラスを作成し、スクリプタブル・オブジェクトにJsonのデータを登録する処理を実装していきます。

補足 Excelファイルを直接スクリプタブル・オブジェクトとして作成する方法について


 こちらのサイトにてとても便利な機能が製作されて、使用方法も紹介されています。
こちらを使えば、今回作成したスクリプタブル・オブジェクトのクラスの作成手順もすべて自動で作成し、Excelファイルも読み込んでデータ化して頂ける、至れり尽くせりの機能です。
ですがこれは、スクリプタブル・オブジェクトという機能をしっかりとわかった上で利用するようにしましょう。

テラシュールブログさま
Excelでデータを管理してUnity iOS/Androidで使うワークフローをノーコーディングで使えるようにした
http://tsubakit1.hateblo.jp/entry/20131010/1381411...


 こちらの手順を利用したExcelファイルからの作成では、次の点に注意してください。

 1.Excelファイルの名前を Scenario.xlsx に変更します。.xlsm では動作しません。
 〜String という情報に関しては Cell の中身は文字列にして登録してください(数字の先頭に ' (シングル・クォーテーション)をつける)

 2.XLS Import Setting での設定を次のように変更します。


XLS Import Settingの画像



 3.Scenario.xlsxのReimportを行います。
 4.スクリプタブル・オブジェクトが生成されますので、名前を ScenarioSO に変更します。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます