前回の振り返り問題
以前に作成した「このアクタにHitしたらこのアクタのHPが増える」というグラフを利用して、複数のインスタンスが独立したHP_Cubeをもっていることを確認してください。
上記のグラフを実行すると、たとえばキャラクターがMyCube群にぶつかるたびにHP_Cubeという変数がプラス+10します。問題は、たとえば次のような4つのMyCubeのHP_Cubeが独立しているかどうかということです。
(画像2)
結果をご覧ください。
(画像3)
まず、最初のMyCubeにはしつこく何回もぶつかりました。その結果HP_Cubeは1340まで上昇していますね。ところが次のMyCubeに同じことをやると、
(画像4)
ちゃんとデフォルト値の100から始まるため、+10されて110が最初に表示されています。これは、次のMyCubeでも同じです。
(画像5)
最後のMyCubeは省略しますが、このように同じクラスから作り出してもインスタンス(オブジェクト)はそれぞれ独立していることが分かりました。これは後々非常に重要なことになるので、ぜひ覚えておいてください。
オブジェクト型とは
さて、ここでオブジェクトです。前回学んだようにオブジェクトとは
クラス(オブジェクト) → インスタンス(オブジェクト)
というように、クラスもオブジェクトだし、クラスから作られるものもオブジェクトでした。そして、オブジェクトは、データ(変数)と機能(関数など)をもっているのでした。
(画像7)
ところで、オブジェクトに含まれるデータの数に制限は原則的にありません。さまざまな数の変数や関数が一つのオブジェクトにはつまっています。ということは、Integer(整数)型のように、決まった長さの変数型を作ることはできません。また、前回学んだようにオブジェクトは自分の変数などを自分で管理したいのでした(なるべく他から勝手にアクセスされたくない)。
であれば、まずそのオブジェクト全体(データと機能をもっている)が(メモリ上の)どこにあるかを示す変数を作ってやり、オブジェクトがもつ個々のデータは、それを頼りにアクセスする方が合理的です。このような変数をオブジェクト型と言います。言うならば、オブジェクト型変数は、そのオブジェクトのデータや機能を利用する時の窓口係のようになっています。
オブジェクトのデータを利用してみる
さて、それでは、キャラクターのブループリントクラス(ThirdPersonCharacterクラス)で、おなじみのMyCubeのインスタンス(オブジェクト)のもつデータを取得するグラフを組んでみましょう。
まず、次のようなオブジェクト型の変数(窓口)を作ります。
(画像9)
変数の名前はCubeInsとしました。キューブのインスタンス(オブジェクト)、というような意味です。
それから、目が開いているマークが付いていることに注意してください(閉じている目をクリックしてください)。こうすることによって、レベルエディタの[詳細パネル](この変数が置かれているクラスから作られたインスタンスの[詳細パネル])からその変数を編集できるようになります(このことは後で実際にやってみます)。なお、この目のマークは、[詳細パネル]では「編集可能」という項目をチェックしても同じことになります。
さらに、「変数の型」は、MyCubeを見つけて(検索欄を使ってもよいです)、クリックして、「リファレンス」を選択します。この「リファレンス」は、「参照」という意味ですが、参照とは、そのオブジェクトがどこにあるか教えてくれるもの、という意味です。
それから、MyCubeのどのインスタンスのリファレンス(参照)が必要なのか指定しなければなりません(レベルには全部で4つほどMyCubeのインスタンスを配置してあります。前回学んだように、1つのクラスからは複数のインスタンスを作って置くことが可能です)。そのためには、レベルエディタに行き、
(画像10)
キャラクターをクリックしてから(キャラクターのための[詳細パネル]を出すため)、CubeInsが表示されているので(目のマークをクリックしたため)、その横にあるピンのようなものをクリックします。さらに、適当なインスタンスをクリックします。すると、MyCube4という名前のインスタンスの選択に成功したことが分かります。これで準備は大丈夫です。
(画像11)
では、グラフを組んでHP_Cubeの値を表示してみましょう。
(画像13)
Fキーを押したら表示されるようにします。次に、さっそくCubeInsをドラッグしましょう。
(画像14)
このCubeInsの出力ピンからドラッグして、コンテキストメニューを出して、hpで検索してHP_Cubeをクリックします。
(画像15)
下が完成形です。
(画像16)
オブジェクト型のCubeInsリファレンスがもっている場所情報を手がかりにして、HP_Cubeという値を取得しているのがこの場面です。
実行してみましょう。Fキーを押すと、次のようになりました。
(画像17)
ちゃんとHP_Cubeのデフォルト値である100が表示されました。成功です。ついでに、このキューブにぶつかってHP_Cubeの値を上げてからFキーを押してみます。
(画像18)
まず、470まで上げてみました。そしてキューブから離れて振り返えり、画面の先ほどの値が消えてからFキーを押すと、
(画像19)
470と表示されました。先ほどの値がHP_Cubeにちゃんと保存されていましたね。
次回は別のオブジェクト型であるクラスへの参照を勉強してみます。
【振り返り問題】
MyCubeクラスにString型変数Talkを作り、そのデフォルト値を「Vキーを押しましたね!」とします。ゲーム中にVキーを押すと、その変数をもつMuCubeクラスのいずれかのインスタンス(どのインスタンスでも構いません)から、その変数を取得してそれが表示されるようなグラフをキャラクタークラスに作ってください。