シェケナベイベー

れっつだんしんぐ!

3D Game Kit Liteによる学習~その3

※本ページはUnityエディタ2021.3.4f1バージョンにて確認しています。

 

3D Game Kit Liteを利用した学習過程をまとめてみようシリーズ第3弾。以下のリソースを元にまとめています。

 

assetstore.unity.com

learn.unity.com

 

さて前回はUnity内製ツールであるProBuilderとPolyBrushをざっくりと学習。使いこなすのは各自進めるとしてUnity Learnの学習要領を進めてゆく事にする。と言うことで今回のテーマはまずHieracheyの整理整頓。この為だけにAssetストアにはHierachey拡張がある事から機能が貧弱なのが読み取れるかもしれないが、とりあえずある物を有効活用するという意味では

  • 空のObjectを追加して適切な名前を付けてラベル仕切りとする
  • 同様に付けたラベル毎にObjectを整理して親子関係に落とし込む

この二点だけでもずいぶん違ってくる。今は単純なSceneなので恩恵を感じないだろうが複雑なSceneになるほどこの作業をしておかねばしっちゃかめっちゃかになる事うけあいである。

次のテーマはゲーム境界の設定であるがサンプルがあまり宜しくない。かみ砕いて要約すると以下の通り。

  • 空のObjectを追加し、そこにColliderBoxを追加せよ!
  • ColliderのEditCollider機能を使ってゲーム境界を作れ!
  • また同時にLayerにEnviromentを指定するのを忘れずに!
  • Runして確認しろ!

以上の事なのであるが、Ellenが走り回るステージであるPlaneにはTextureも何も指定されていないのでColliderエッジを編集しようにも見づらくて無理ゲー。Ellenの近くに配置して見えない壁が出来るのを確認できたらOKである。

 

次の課題はUnityを使っていると繰り返し見かける事になるPrefabsとそのInspecter設定の基本を学習する。本当の初心者であるならば一歩づつ確認しつつ進むのが確実であるがまだるっこしい層向けに以下にざっくり概要をまとめておく。

  • Prefabsとして用意されたObjectは水色の立方体アイコンが付与されるので区別出来るし、なんなら自分でPrefab化するのもUnityの基本の一つである。
  • Hieracheyにて所定のPrefabを選択するとInspectorにはその機能が用意されており、例えばサンプルのMovingPlatformであればStart位置、End位置を指定し、移動パターンを指定してActivateにチェックを入れるとRun時に動き始めると言うインターフェイスである。
  • これらのPrefabは特定の機能を実装された結果テンプレート化されたObjectでありC#スクリプトがこの機能を実現する為に利用される。
  • Prefabはすなわち元となるインスタンスから生成される子供であり、子供ごとに設定を変える事も出来れば、親を直接変更すればすべて子が書き換わるという性質を持つ。

とまぁこんな所である。Unityをやっていると今後散々と目にする事になるので今はざっくりとした理解で構わない。見た目はショボいがUnityで実装されるコンポーネントの多くがこうして機能とインターフェイスを持ったパーツ集として構築されているのである。

 

引き続きUnity Learnを進めると今度は異なったコンポーネントの使い方を学ぶ。実はコレはUnityの伝統で徐々にふるまいが複雑さを増して行くというお約束の展開。先ほどのMovingPlatformが単にゲーム中に動くだけの床であるならば、次はインタラクティブな機能を持つコンポーネントでしょうと言うわけで今回もフランク口調で概要をまとめてゆくぜっ!

  • PressurePadを使ってみよう!さっき追加したMovingPlatformと連携させるよ!
  • MovingPlatformのActivateをPressurePadでコントロールするのでチェックは外しておいてね!
  • PressurePadに戻ってInspectorを調べてみるとInteractiveObjectを確認してくれたまへ。そこにHieracheyからMovingPlatformをドラッグして持ってきてドロップする。(クリックしたままにしないとMovingPlatformが選択されちゃうゾ!)
  • あとはその他の設定でInteractive TypeがActiveになっていればOKだ!
  • RunしてPressurePadに乗って挙動を確認してみて欲しい!

動作を確認できたかな?こういった具合にゲーム内に於いては何かを操作して何かが起きると言った具合にインタラクティブなふるまいをプログラムする機会が多い。これらを簡単にするべく、それぞれのパーツは単純な機能を持たせ、関連性をあらかじめ予期して準備を行ってゆくのが一般的なんだ。じゃあもうひとつ別の例を見てゲームのインタラクティブ性と実際のUnityにおける取り扱いの基本例を示すよ。

  • DoorSmallを使ってみよう!まずはPrefabsフォルダからSceneに追加してくれたまへ。
  • 次にSwitchを追加だ。先ほどと同じ様にIntreactive ObjectにDorrSmallをドラッグ&ドロップしてみてくれたまへ!
  • おっと慌ててRunさせてもダメだよ、今度はInteractive TypeにOpenを指定してくれなくちゃ!どうだいEllenがSwitch近くに行くとDoorSmallがちゃんと開いたかい?
  • 白い矢印がSwitchとDoorSmallに結ばれたのが解るかな?こうやってインタラクティブな設定付けがされているObject同士を解りやすくする事も大事なんだ。
  • ActiveでなくOpenを指定したのは何故かって?そこは受け取り側の仕様の問題だな。ドアはOpenするものだろう?具体的には3D Game Kit Lite共通の仕様としてインタラクトな操作を指定する場合には適切なタイプの挙動を指定する事で解りやすくする基本方針で設計したからなんだ。Interactive Typeのリストを表示すると用意されたアクションの種類が確認できるはずだ。

 

さて2つの例を見たが次は応用編だ。ついてこれるかい?例題だ。Switchを3つ用意して3つともOnにしないと開かないDoorHudeを作ってみようか!

  • 用意するものはドアとスイッチ3つにCounterをPrefabから追加してくれたまへ!
  • まずは今までの応用として設定することはInteractive TypeとInteractive Objectの設定だ。どこに?Counterだ。TypeはOpenだぞ?白い線が接続されている事を確認すべし。
  • さて次はSwitchとCounterの設定だ。SwitchそれぞれにInteractive ObjectにはCounterを、Interactive TypeにはOpenを3つ設定すること。これでまた白い線で関係が表示されたならOKだ。
  • あとはCounterの仕上げだ。まずはSender部分にSwitch3つが並んでいるかい?ならば仕上げはGameplayCounterスクリプトの中のInteractive TypeがOpenになっていること、TargetCountが3になっている事。そしてSendGaeCommandスクリプトの中のInteractive OnjectがDoorHudeになっていればOKだ。Runテストをしてみて欲しい。

 

なおこの課題を実行する際にObjectのラベルの付け方がレクチャーされる。HieracheyもそうであるがSceneもごちゃごちゃしがちなのでInspectorの左上から指定できるラベル機能は有用だ。また同様の機能を提供するGizmoの調整も覚えておくと良い。Sceneの上に並んだツールバーのうち一番→側にまとめてあるので開いてみるべし。Sound関係のコンポーネントが付いたObjectにはスピーカーのマークが付与されてデフォルトのままだと邪魔だなぁとか思ったことは無いだろうか。その大きさは3D Iconsのスライダーで大きさを可変できるし、なんならそれぞれのGizmoをまとめて表示On/Off設定するのは全部ここからだ。

 

今回は少し詰め込み過ぎたかな。続きは次回で!

 

keets.hatenablog.com