くろくまそふとホーム「くろくまそふと」についてゲーム作品一覧ゲーム用プログラム・素材配布ゲームの作り方BOOTHホームゲーム制作メモ【Unity】ScriptableObjectの作り方・使い方ゲーム制作メモ2019.07.27最近、今までUnityでよく分かっていなかったScriptableObjectを使う機会があり使い方などを学びました。今回はそのScriptableObjectについて、備忘録を兼ねて特徴や作り方・使い方を書いていきます。手順1:ScriptableObjectクラスを継承したクラスを作る手順2:ScriptableObjectファイルを作成するScriptableObjectの使い方ScriptableObjectとは?それではまず、そもそもScriptableObjectとは何なのか?という話をします。ScriptableObjectは、基本的にゲーム中に変化しない値を登録しておくのに使うファイルのようなものです。敵の最大HPやアイテムの得点などはゲーム中に変化することがあまりないですよね?ScriptableObjectはそういったデータを格納しておき、必要な時に読み込んで使うのに便利です。ScriptableObjectを使うメリットそれでScriptableObjectを使うメリットは次の3つがあります。メモリを節約できるパラメータをインスペクター上で簡単に管理できる簡単に作ったり使ったりできるメモリを節約できるまずScriptableObjectを使うメリットとして一番大きいのがメモリの節約になる、ということだと思います。これはどういうことかというと...例えば次のような敵キャラクターのプレハブがあるとしましょう。10そしてこのスライムのインスタンスを作るとすると、当然パラメータは次のようになります。10当たり前ですが「スライム(インスタンス)」のパラメータは元のプレハブと同じですね。ところが両者は全く同じパラメータではありますが、プレハブとインスタンスのパラメータは別々に扱われるため、インスタンスを作った分だけメモリを食ってしまうのです(下図)。そこでScriptableObjectが役立ちます。ScriptableObjectを使えば共通の値を必要な時だけ読み込んで使えるので、余分なパラメータを作る必要がなくなってメモリを節約できるというわけです。パラメータをインスペクター上で簡単に管理できる2つ目のメリットは、ScriptableObjectはインスペクター上で簡単に値を変更したり管理したりできる点です。一つ目のメリットのように、単にデータを外部に切り分けるというとJSONなどが思い浮かびますが、例えばJSONの場合はUnity用のファイルではないのでインスペクターから直接変更することはできません。ScriptableObjectを使えば、下の画像のようにインスペクターにフォームが表示されるので直接パラメータの値を変更することができます。簡単に作ったり使ったりできる3つ目のメリットは、ScriptableObjectは簡単に作ったり使ったりできるということです。具体的にどのように作ったり使ったりするかは↓で説明していきますね。ScriptableObjectの作り方それではScriptableObjectの具体的な作り方を見ていきましょう。ScriptableObjectクラスを継承したクラスを作るプロジェクトビューからScriptableObjectファイルを作成する手順1:ScriptableObjectクラスを継承したクラスを作るまず、ScriptableObjectを作るためにはScriptableObjectクラスを継承したクラスを作成し、必要なパラメータをそのクラスに書いておく必要があります。具体的には次のようなコードになります。}}ここでは「EnemyStatusData」と「EnemyStatus」という2つのクラスを作りました。実際のパラメータはEnemyStatusクラスに登録し、EnemyStatusDataクラスでScriptableObjectをインスペクタで表示したときに下の図のように敵のデータを一覧表示できるようにしてあります(画像再掲)。EnemySatusDataクラスに「CreateAssetsMenu」属性を付与することで、プロジェクトビューで右クリックメニューからファイルを作成できるようにしてあります。※なお実際のパラメータを登録する方のクラスに「System.Serializable」属性をつけ忘れないようにしてください(インスペクタに表示されなくなってしまうので)。手順2:ScriptableObjectファイルを作成するスクリプトを用意出来たら、あとはファイルを作るだけです。プロジェクトビューの何もないところで右クリックすると「EnemyStatusData」ファイルを作成するメニューが出るようになるので、「Resources」フォルダの中にScriptableObjectファイルを作っておきましょう(※別のフォルダの中ではダメです)。最後にScriptableObjectの使い方についてですが、Resources.LoadでScriptableObjectファイルを読み込んで、それを変数に格納しておくだけです。}ここまでできればenemyStatus.○○でパラメータの値にアクセスできるので、あとは好きなところで呼び出せばOKです。IKという有名アセットを使って、Unity上でVRoidモデルを制御して遊んでみたという内容の記事です。IKを使えばVRoidのキャラクターをかなり自然に動かせるので、「VTuber」とか「バ美肉」に興...ゲーム制作メモ初めて「1週間ゲームジャム」に参加した感想すでに他の記事にも書いたとおり、7月1日~7日にかけて行われた「1週間ゲームジャム」(第12回)に参加しました。この記事ではそのゲームジャムに参加した感想を書いていきます。はじめに1週間ゲームジャムについ...お知らせ3Dカーアクションゲーム「爆走!デンジャラスドライブ」を公開しました!先月からUnityで作っていた3Dカーアクションゲーム「爆走!デンジャラスドライブ」をリリースしたのでお知らせします。2019年版2019.08.06ゲームに使えるフリーフォントまとめ2019.06.19【Unity】JSONを使ったセーブ・ロード処理2019.03.232019.06.04【Unity】AIで自動行動する敵キャラクターの作り方2020.01.022020.01.02【ウディタ】Game.exeのアイコンを変更する方法2018.06.03。