i-school - VRアクションゲーム アイテムの準備

設計


 アイテムの情報を事前に作成して、ゲーム内に利用できるようにするための準備を行います。

 アイテムの情報自体はデータベースとして取り扱うようにするため、
ItemData クラスを作成して、アイテム1つ分の情報を登録できるようにします。

 それを List でまとめて管理し、データベース化するための ItemDataSO クラスを作成します。
作成したら、ItemDataSO スクリプタブル・オブジェクトを作成して、アイテムの情報を登録します。

 実際にゲーム内のゲームオブジェクトには EventBase クラスを継承した各 Event クラスをアタッチし、
それを Ray によるポインターを使って、ゲームオブジェクトが持つ役割(アイテムなのか、階段なのか、という風に)を取得します。

 Ray による判定を簡便化するためにも、各ゲームオブジェクトにアタッチするクラスはすべて
EventBase クラスを継承した子クラスを作成して、それを利用します。
判定が必要な各ゲームオブジェクトすべてに EventBase クラスがアタッチされていることを条件とすることで、
Ray による判定は常に EventBase クラスを取得し、子クラスごとにオーバーライドしたメソッドによって振る舞いを変更することで
処理の一元化を行えるようにします。


ItemData スクリプトを作成する


 アイテム1つ分の情報を登録するためのクラスです。
必要な情報に応じて変数の宣言を適宜変更して利用してください。


ItemData.cs

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



ItemDataSO スクリプトを作成する


 ItemData クラスを List で管理することでデータベース化するためのクラスです。
Create AssetMesu 属性と ScriptableObject クラスを継承することで、
スクリプタブル・オブジェクトとして利用します。


ItemDataSO.cs

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



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


 ItemDataSO スクリプトを利用して、ItemDataSO スクリプタブル・オブジェクトを作成します。

 Datas フォルダを新しく用意し、その中に作成して管理をするようにします。
Datas フォルダ内で右クリックをしてメニューを開き、Create => Create ItemDataSO を選択してください。
名前はそのままで構いません。

 アイテムという枠組みではありますが、取得できるものであれば、いずれもアイテムという括りで考えて貰って構いません。
例えば、情報(ヒント)といったものであっても、それをデータとして登録しておき、ゲーム内で可視化は出来ませんが
所持しているアイテムとして扱うことで利用できるようにします。

<参考例>



 今回の手順では、アイテムの中身(データ)までは取得しないため、次回以降にこのデータを利用するようにします。


EventType スクリプトを作成する


 ゲーム内に登場させるイベントの種類を事前に enum を作成して登録しておきます。
 
 ここでいうイベントとは、ポインターによって感知して処理を行うものを指します。
そのため、アイテムのようなものの他にも、ドアの開閉、階段の昇降といったものもイベント扱いとして考えてください。

 列挙子の種類はゲームの内容に応じたものに適宜変更を行って登録してください。


EventType.cs

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



EventBase スクリプトを作成する


 ポインターをヒットさせた際に、当たり判定として利用するためのクラスです。
ポインターに判定させたいゲームオブジェクトの親クラスになります。

 実際にゲームオブジェクトにアタッチするのは、この EventBase クラスを継承しているクラスになります。
今回であれば、次に ItemEvent クラスを作成しますので、アイテム用のゲームオブジェクトに ItemEvent クラスをアタッチして
ポインターとの判定を行えるようにする設計です。

 メソッドはすべて virtual キーワードを設定して仮想メソッドとして宣言し、子クラス側でのオーバーライドを想定しておきます。


EventBase.cs

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



ItemEvent スクリプトを作成する


 EventBase クラスを継承した ItemEvent クラスを作成します。
このクラスをゲームオブジェクトにアタッチしておいて、Ray によるポインターの判定で取得できるように設計します。

 継承した各メソッドは各ゲームオブジェクトの役割に応じた内容に処理をオーバーライドして振る舞いを変更します。
ItemEvent クラスであれば、TriggerEvent メソッドの処理の内容をアイテムとしての処理として記述し、
ItemEvent クラスがアタッチされたゲームオブジェクトをアイテムとして振る舞わせる目的に利用します。


ItemEvent.cs

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



アイテム用にゲームオブジェクトを作成し、ItemEvent スクリプトをアタッチして設定をする


 アイテム用のゲームオブジェクトをヒエラルキーに配置します。
特にまだ用意していない場合には、仮に Cube ゲームオブジェクトを作成して、それをアイテムとして利用します。