アカデメイア実験室のラボノートには勉強したことのメモを書いていきます。
目標はUnity Learnで3Dを学んで面白そうな何か作ってみることです(雑)
最終的には記事にも価値が出るようなものにしたいですが、何しろ不慣れなので、当面は行動記録として「投稿すること」を優先しようと思います。
こうしたほうがいいぞ!とかあればTwitterで絡んでください。
今日の内容は3DGameを作る(ツール編)です
Roll-a-ballを基準にゲームを作ろうとしています
今回はその中で作成したツールの紹介です。
BOOTHで500円で売ってます!
シーン上でいちいちプレハブを引っ張って位置調整して配置するのめんどくさいな、頭の中にはステージがあるのだから、それをパパっと表現していい感じに配置したり、ランダム配置とか、特定のルールで自動生成した配置の構想をシーンに再現できないかな、という思いからツール化しました。
今日はその作成したIntArrayToPrefab.csの使い方とドキュメントを載せます。
使い方とドキュメントは下にまとめて載せるので、一応記事はここでしめておきます。
次回 ゲーム作成第5回 C#編!
コードの中身の解説とかします!
ゲームはよ完成させねば…
配布場所:BOOTH
あらかじめ設定したプレハブを、指定したIntArrayの順に配置します
BOOTHでzipをダウンロードし、中のIntArrayToPrefab.unitypackageを開いてインポートします。テンプレートシーンがあるので、それを開くと、動作させる状態のシーンが保存されています。
※スクリプト自体は「親オブジェクトにアタッチ→プレハブを設定→IntArrayを投げる」 で動作します。
テンプレシーンはここにあります
Assets/Academeia15/minigame/IntArrayToPrefab.unity
シーンを開くと空オブジェクトYokoSukuにツールをアタッチしたYokoSuku_sampleと実行後のYokoSuku_generatedが既に配置されています。
YokoSuku_sampleをクリックしてInspector画面を確認します。
IntArrayToPrefabは親オブジェクトにアタッチして使います。
Intの0~の番号に対してプレハブを設定します。
カンマと改行で区切ってIntArrayっぽい文字を書くとテストできます。
下段にはよく使いそうなオプションたちを載せています。例えばZ_flipはarrayと見た目が一致します。(詳しくはドキュメントを見てください。)
基本的には外部からSetIntArray(int[,] array)にIntArrayを投げて使いますが、IntArray文字列入力をしておいて右上からCreateTestArrayをクリックすると……
プレハブたちがシーンに配置されるので、頭の中に位置の案がある時の手動の配置も楽になります。
親オブジェクトのトランスフォームが適用されますが、一番下の、「prefabはY軸に合わせて立てる」のチェックを入れておくとプレハブ自体はXZ回転しません。
上記の横スクや左の段差風の場面も作れます。
CreateTestArrayでの生成後にはScriptを削除しても配列済みのプレハブが残ります。
VRChat等でワールドをアップロードする際にはアタッチしたスクリプトを削除してください。
IntArrayToPrefab.csは、2次元の主に正の整数配列に基づいてUnityシーンにプレハブを生成するスクリプトです。このスクリプトは、親オブジェクトにアタッチし、Inspector上でプレハブを整数配列に対応する各番号に登録して使用し、実行するとプレハブをシーンに配置して親オブジェクトのトランスフォームを適用します。
prefabs (GameObject[]): シーンに配置するプレハブの配列です。配列のインデックスが整数配列の値に対応します。最大数を指定してInspector上に出せます。
testArrayString (string): テスト用の整数配列を文字列で入力するフィールドです。要素をカンマ区切りで、各行を改行で区切ります。6行までは表示されます。それ以上は横のバーを使ってください。
Parent_Center (bool): 親オブジェクトを生成されたプレハブ群の中心に配置するかどうかを指定します。falseの場合、配列の[0,0]を親オブジェクト位置とします。
Y_offset (float): 生成されるプレハブのY軸方向のオフセットです。is_prefab_top_always_YAxがtrueの時はワールドのY軸方向に、
is_prefab_top_always_YAxがfalseの時はローカルのY軸方向に
プレハブを親オブジェクトからオフセットします。
X_flip (bool): X軸を反転するかどうかを指定します。
Z_flip (bool): Z軸を反転するかどうかを指定します。trueの場合、上から見た図と配列が一致し、falseの場合、下から見た図と配列が一致します。
delete_prefab (bool): 実行時に既存のプレハブを削除するかどうかを指定します。
is_prefab_top_always_YAx (bool): 個々のプレハブの上面が親オブジェクトの回転によらず常にY軸方向になるようにするかどうかを指定します。
CreateTestArray(): testArrayStringに基づいてテスト用の整数配列を生成し、プレハブを生成します。
SetIntArray(int[,] array): 外部から整数配列を受け取り、プレハブを生成します。
GeneratePrefabs(): 整数配列に基づいてプレハブを生成し、シーンに配置します。
このスクリプトをUnityのGameObjectにアタッチします。
prefabs配列に、使用するプレハブをドラッグアンドドロップで設定します。
testArrayStringにテスト用の整数配列を文字列で入力するか、外部からSetIntArrayメソッドを使用して整数配列を設定します。
必要に応じて、他の属性を調整してプレハブの配置設定をカスタマイズします。
CreateTestArrayコンテキストメニューをクリックするか、外部からSetIntArrayメソッドを呼び出してプレハブ群を生成します。
テスト時、testArrayStringの形式が正しくないと、期待どおりの配列が生成されない場合があります。読み取れない場合には内部的に-1を、配列の列数が異なっている場合には-2を一時的に当てて強制的にIntArrayを生成します。想定した配置と違う場合には記入した配列を確認してください。
prefabs配列のインデックスと整数配列の値が一致するように注意してください。整数配列に含まれる数字に対してプレハブ列の数字が足りていない場合には何も配置されません。プレハブ列に設定された数字が整数配列に無いことは問題ありません。