今話題のUnreal Engineでゲームを作ってみよう!【後編】


今話題のUnreal Engineでゲームを作ってみよう!【後編】
目次
  1. Blueprintを使ってスコアを表示する
  2. 最後に

前編はこちら:今話題のUnrealEngineでゲームを作ってみよう!【前編】

→URL:https://blog.codecamp.jp/unreal_engine_1

Blueprintを使ってスコアを表示する

ここまでの操作で準備が整ったので、いよいよBlueprintを使ってゲームを制御していきます。球体を選択した状態で「詳細タブ」を見ると、「ブループリント/スクリプトを追加」というボタンがあるのでクリックしてブループリントを追加します(好きな名前を付けておきましょう)。この操作により、球体は「Sphere_Blueprint」から制御することができるようになりました。

images・亥セ檎キィ・噂1-22

ブループリントを追加するとウィンドウが自動で開かれているはずです。今回は主に、「イベントグラフ」タブを使って球体の処理を追加していきます。また、「イベントBeginPlay」のみを使っていくので「イベントActorBeginOverlap」、「イベントティック」に関しては削除してしまっても構いません。

images・亥セ檎キィ・噂1-14

始めに、球体自身のスコアを設定するために「マイブループリント」タブからスコア用の変数を追加します。追加した変数の左にあるアイコンをクリックすると、変数の型を変更できるので整数型である「Integer」を選択しておきます。

images・亥セ檎キィ・噂1-15

作成した変数「Score」に球体自身のスコアを設定するために「イベントグラフ」にドラッグアンドドロップして「セット」を選択します。

images・亥セ檎キィ・噂1-16

作成された「Score」ノードに適当な値を設定して(ここでは7を設定)、「イベントBeginPlay」とワイヤーで繋ぎます。「イベントBeginPlay」はアクタ(ここでは球体のこと)がゲーム画面に出現した時に1度だけ呼び出されるイベントとなっています。これで、球体のスコアが7点であることが設定されました。

images・亥セ檎キィ・噂1-17

次に、球体がカゴの中に入ったことを検出する機能を作ります。エディタの左側に表示されている「モード」タブから「ボックストリガー」をレベル内にドラッグアンドドロップして配置します。位置や大きさについては「トランスフォーム」を参照して下さい。「ボックストリガー」はレベル内の他のオブジェクトが領域内に入った時、イベントをトリガーしてくれます。

images・亥セ檎キィ・噂1-18

配置した「ボックストリガー」のイベントを受け取る処理は、各レベルにデフォルトで作成されている特別なブループリント、「レベルブループリント」に作っていきます。「レベルブループリント」にはレベル全体に関連するような処理を記述することが多いです。今回の場合では「レベルブループリント」内で、このレベルでのスコアを保持したり、新しい球体を出現させるといった重要な役割を担います。それでは、「レベルブループリント」をエディタ上部のメニュー「ブループリント>レベルブループリントを開く」から開いてみましょう。

images・亥セ檎キィ・噂1-19

初めは「レベルブループリント」に何もノードが配置されていないので、全て自分で配置していく必要があります。では「ボックストリガー」のイベントを受け取る処理を追加しましょう。「レベルブループリント」ではレベル内のオブジェクトを選択していると、右クリックメニューで選択しているオブジェクトに関連した処理が実行できる特徴があります。そこで、「ボックストリガー」を選択したまま「レベルブループリント」内で右クリックしてメニューを表示してみましょう。すると、「AddEventforTriggerVolume1」という項目が表示されるので、「コリジョン>OnActorBeginOverlapを追加」を選択します。

images・亥セ檎キィ・噂1-20

配置した「OnActorBeginOverlap」ノードに「PrintString(右クリックメニュー>ユーティリティ>ストリング)」ノードを繋げておくことで、ゲームプレイ時の動作確認がしやすいです。

images・亥セ檎キィ・噂1-21

実はこのままでは、球体と「ボックストリガー」が接触しても、「OnActorBeginOverlap」ノードが呼ばれることはありません。球体はデフォルトで「オーバーラップイベントを発生させる」チェックが外れているので、チェックを入れておきましょう。これでゲームプレイ時、カゴに球体が入ると「カゴに入った!」と画面左上に表示されるはずです。

images・亥セ檎キィ・噂1-22

次は、球体に設定したスコアを画面に表示してみます。それを実現するためには、「OnActorBeginOverlap」ノードの右下にある「OtherActor」というピンを利用するのが便利です。というのも、この「OtherActor」で取得できる値にはボックストリガーに接触したオブジェクトが入っているからです。そこで、「OtherActor」から球体の情報を取り出しましょう。まず「OtherActor」をワイヤーで引張り、どこでもいいのでドロップします。表示されたメニューで球体の名前を検索すると「球体の名前へキャストする」という項目があるので選択します。

images・亥セ檎キィ・噂1-23

これにより、「OtherActor」に対してダイナミックキャストを行っていることになります。

images・亥セ檎キィ・噂1-24

「ボックストリガー」に接触した球体の情報を取り出すことができたので、試しに球体のスコアをゲーム画面に表示してみます。「AsSphereBlueprint」をワイヤーで引張り、どこでもいいのでドロップして表示されたメニューから「GetScore」を選択します。

images・亥セ檎キィ・噂1-25

「Score」を「PrintString」に繋いでゲームを開始してみましょう。球体のスコアが表示されるはずです。

images・亥セ檎キィ・噂1-26

次は、特定のキーを押す度に球体を出現させてみます。右クリックメニューからキーボードの好きなキーで検索して、表示されたキーを選択して下さい。

images・亥セ檎キィ・噂1-27

キーノードの「Pressed」ピンから引っ張ってドロップ後、「spawn」と検索すると「クラスからアクタをスポーンします」という項目が表示されるので選択します。

images・亥セ檎キィ・噂1-28

作成されたノードの「Class」に「Sphere_Blueprint(作成したブループリント名)」を選択します。この状態でゲームを開始して「P」キーを押すと、新しい球体がレベル内に生成されます。ただし、位置の指定をしていないので変な位置から出現しています。

images・亥セ檎キィ・噂1-29

球体の位置を指定するには「SpawnTransform」を使います。「SpawnTransform」をワイヤーで引っ張ってドロップすると、「MakeTransform」があるので選択します。

images・亥セ檎キィ・噂1-30

作成した「MakeTransform」ノードの「Location」に位置を入力してゲームを開始すると、期待通りの位置から球体が出現しているはずです。

images・亥セ檎キィ・噂1-31

最後に、スコアを加算して表示すれば完成です!「レベルブループリント」内に加算用のスコア変数「Score」を作成しておき、球体のスコアと加算した結果を「Score」に保存しておきます。

images・亥セ檎キィ・噂1-32

うまく動作しています!

images・亥セ檎キィ・噂1-33

最後に

UnrealEngineで始めてゲーム開発をしてみていかがでしたでしょうか?想像していたよりも簡単にゲームを作ることができて、楽しかったのではないでしょうか。今回はチュートリアルという他の人が敷いたレールに沿ってゲームを作りましたが、もし自分の作りたいゲームが有りましたら、ぜひ作ってみてください。


関連記事

サイバーエージェントゲーム技術戦略室
この記事を書いた人
サイバーエージェントゲーム技術戦略室
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp