Unityに関連する記事です

 最後の手順となります。

 この手順において、いままでに作成してきた Canvas やスクリプタブル・オブジェクトなどの情報を活用し、
それらをスクリプトを利用して処理と処理とを繋げて1つの機能として実装していきます。

 下記の動画が完成動画になりますので、こちらのイメージを念頭に制作をおこなってください。


<実装動画 
動画ファイルへのリンク


<実装動画◆
動画ファイルへのリンク



各制御用のスクリプトの作成とゲームオブジェクトへの設定


 前回の手順で作成した Item ゲームオブジェクトにアタッチして利用するスクリプトを4つ作成します。
それぞれのスクリプトには明確な役割があります。

 Item ゲームオブジェクトには子オブジェクトも存在していますので、
アタッチするゲームオブジェクトも考えた上でスクリプトを作成していきます。


 ObjectInfoView  Item ゲームオブジェクトにアタッチし、このアイテムの名前情報をゲーム画面に表示させる機能を与える

 ItemDetailModel Item_Model ゲームオブジェクトにアタッチし、アイテムにムービー情報を与え、アイテムとプレイヤーとの接触機能を与える。アイテム本体の制御を行う
 ObjectClicker  こちらも Item_Model ゲームオブジェクトにアタッチし、ゲーム画面上でアイテムをクリックした際にアイテムの名前情報を Console ビューに表示するデバッグ機能を与える

 InfoArea     Item_InfoArea ゲームオブジェクトにアタッチし、プレイヤーがアイテムの一定範囲内に存在しているか、していないかを判定する機能を与える



ObjectInfoView スクリプトの作成


 Item_View ゲームオブジェクトの CanvasGroup コンポーネントの制御と
txtInfo ゲームオブジェクトの TextMeshPro コンポーネントの制御を行うためのクラスです。

 これらのコンポーネントを制御することにより、アイテムごとに設定されているアイテムの名前を利用した名前表示の表示の切り替え、
また、表示されている名前表示を常にカメラの方向を向けることにより、プレイヤーが移動しても(どの位置からでも)正対して見える機能を実装します。

 この機能群は後程作成する InfoView スクリプトと連動して実行されます。
プレイヤーの状態をトリガーとしてこれらの機能を実行するようにします。

 例えば、アイテムの近くにプレイヤーがいる場合という状態を1つのトリガーとし、
そのときだけアイテムの名前表示を行うメソッドを実行するという処理の流れです。


ObjectInfoView.cs

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


 スクリプトを作成したらセーブします。


Item ゲームオブジェクトに ObjectInfoView スクリプトをアタッチして設定を行う


 Project 内の Prefabs フォルダにある Item ゲームオブジェクトをダブルクリックしてプレハブ編集モードに切り替えます。
Item ゲームオブジェクトに作成した ObjectInfoView スクリプトをドラッグアンドドロップしてアタッチします。

 インスペクターにスクリプトがアタッチされたことを確認した上、2つの変数が表示されていますので、
こちらに対して、Item ゲームオブジェクトの子オブジェクトである Item_View ゲームオブジェクトと txtInfo ゲームオブジェクトをアサインします。
それぞれのゲームオブジェクトより、変数のデータ型と同じ情報が自動的に登録されます

 つまり、CanvasGroup 変数であれば、 Item_View ゲームオブジェクトにアタッチされている CanvasGroup コンポーネントが登録されます。
インスペクターのアサイン情報の見方もしっかりと覚えていくようにしてください。


インスペクター画像



 以上で設定は完了です。


ItemDetailModel スクリプトの作成


 続いて、Item_Model ゲームオブジェクトにアタッチするスクリプトを2つ作成します。
こちらもゲームオブジェクトは、Item ゲームオブジェクト本体にかかわる制御機能を実装します。

 アイテムに対して再生するムービーの情報を設定し、プレイヤーの侵入を感知してムービーを再生する機能を用意しています。


ItemDetailModel.cs

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


 スクリプトを作成したらセーブします。


ObjectClicker スクリプトの作成


 こちらも Item_Model ゲームオブジェクトにアタッチします。
ゲーム画面上でアイテムをクリックした際にアイテムの名前情報を Console ビューに表示するデバッグ機能を与えるものです。

 クリックした際のイベント判定には Unity の用意している IPointerClickHandler インターフェースを実装して判定させています。
この機能は UnityEngine.EventSystems に含まれている機能であるため、利用許可するため using にも UnityEngine.EventSystems を追加しています。


ObjectClicker.cs

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


 スクリプトを作成したらセーブします。


Item_Model ゲームオブジェクトに ItemDetailModel スクリプトと ObjectClicker スクリプトをアタッチして設定を行う


  Project 内の Prefabs フォルダにある Item ゲームオブジェクトをダブルクリックしてプレハブ編集モードに切り替えます。
Item ゲームオブジェクトの 子オブジェクトである Item_Model ゲームオブジェクトに、作成した2つのスクリプトをドラッグアンドドロップしてアタッチします。
アタッチする順番は任意です。アタッチしたら、必ずインスペクターでアタッチの確認を行ってください。

 ItemDetailModel スクリプトのみ SetItemNo 変数が表示されますので、任意のアイテムの番号を設定します。
この番号と VideoDataSO スクリプタブル・オブジェクトのムービーの番号が対応しており、指定番号のムービーが再生されます。

 そのため、VideoDataSO スクリプタブル・オブジェクト内のムービーの登録がないアイテムの番号を設定すると、
ムービー再生時にエラーが出てゲームが停止します。必ず、ムービーのある番号を設定してください。


インスペクター画像



 以上で設定は完了です。


InfoArea スクリプトの作成


 このスクリプトでは OnTriggerEnter メソッドと OnTriggerExit メソッドを実装し、
このスクリプトがアタッチされているゲームオブジェクトのコライダーへの侵入判定を行います。

 その際、ObjectInfoView スクリプトと連動して活用します。
OnTriggerEnter メソッドにて、プレイヤーの侵入を感知した場合には、ゲーム画面にアイテムの名前を表示させます。
OnTriggerExit メソッドにて、プレイヤーがいなくなったことを感知した場合には、ゲーム画面に表示されていた名前表示を非表示にします。

 また補助的な機能として、OnTriggerStay メソッドも実装し、アイテムの名前表示をおこなっている間は
プレイヤーの位置にかかわらず、名前表示が常にカメラの方向を向くように制御し、名前表示が常に正対して見える状態に制御します。


InfoArea.cs

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


 スクリプトを作成したらセーブします。

 処理の内容を見直し、どういったケースで、どのような制御が働くようになっているのかを読み解き理解を深めてください。


Item_InfoArea ゲームオブジェクトに InfoArea スクリプトをアタッチする


 Item ゲームオブジェクトの子オブジェクトである Item_InfoArea ゲームオブジェクトに対して
作成したInfoArea スクリプトドラッグアンドドロップしてアタッチします。

 アタッチしているゲームオブジェクトのコライダーに対して、OnTrigger 系のメソッドが有効化されますので、
Item_InfoArea ゲームオブジェクトのコライダーは、プレイヤーの侵入を感知するレーダー機能を有することになります。
この機能を実装することを想定して、アイテム本体よりも広い大きさのコライダーを設定しています。


インスペクター画像



Scene ビュー画像 コライダーの範囲



 以上で設定は完了です。


ゲームを実行して動作を確認する


 すべての手順が完成しました。
いままでの実装内容を振り返りながら、どのような制御が行われるのかを確認してください
その上でゲームを実行してデバッグを行います。



 まずプレイヤーがアイテムの広い方のコライダーの範囲内に侵入したとき、アイテムの上にアイテムの名前が表示されるか確認します。
その状態でプレイヤーを移動させたとき、アイテムの名前が見えなくなってしまわないよう、常にカメラの方向に正対しているか確認します。
その後、アイテムのコライダーの範囲外に出たとき、アイテムの上に表示されていたアイテムの名前表示が消えるか確認します。

 この3つの部分が InfoArea スクリプトと ObjectInfoView スクリプトによって実装されている連動した処理です。
いずれも正常に機能しているかどうか確認してください。



 次に、アイテム本体にマウスカーソルを合わせてクリックしてみてください。
Console ビューに ObjectClicker スクリプト内に記述した Debug.Log メソッドが表示されれば、こちらも制御が出来ています。



 最後に、アイテム本体にプレイヤーを侵入させてください。アイテムに紐づいているムービーが再生されれば
ItemDetailModel スクリプトによる制御が成功しています。
これらの処理には Debug.Log メソッドも記述されていますので、Console ビューも合わせて確認し、処理の内部動作も検証してください。
 

<実装動画 
動画ファイルへのリンク


<実装動画◆
動画ファイルへのリンク


 今回はデバッグする内容を書きだしていますが、自分でプログラムを考えて書いた場合には
こういったデバッグする内容や、正誤判定などもすべて自分で管理し、判断する必要があります

 ゲームは動けばよい、ではなくて、プログラムとして実装した処理が正常に動作しているかを確認することが大切です。



 以上でこの手順は終了です。

 次は異なる機能の実装例の学習です。

 => 次は ム―ビーリストの一覧表示の実装例 です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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