[Unreal Engine 5]クリックしたオブジェクトにイベントを発生させる​

Unreal Engine 5

シンプルなタワーディフェンスゲームを作る part8

こちらのようなシンプルなタワーディフェンスゲームを作っています。本記事では下の動画のように、オブジェクトをクリックしたときにイベント「Click Event」を発生させる方法を紹介します。この記事の例ではクリックすることにより「砲台タワー」を出現させます。

マウスのクリックを受け付けるようにする(Player Controllerの設定)

マウスのクリックイベントを受け付けられるようにします。マウスのクリックイベントを受け付けるには「Player Controller」の設定と、「Game Mode Base」でその「Player Controller」を使う設定をする必要があります。

新たに「game_mode」というフォルダを作ります。「右クリック」→「ブループリントクラス」→「Player Controller」、「Game Mode Base」を選択します。
「Player Controller」を「BP_PC_towerdefence」という名称にし、「Game Mode Base」を「BP_GMB_towerdefence」とします。

「BP_GMB_towerdefence」を開きます。「詳細パネル」の「Player Controller Class」を「BP_PC_towerdefence」に変更します。

左上の「編集」→「プロジェクト設定」を選択し、「プロジェクト設定」ウィンドウを開きます。左の「プロジェクト」/「マップ&モード」を選択します。
「デフォルトのゲームモード」を「BP_GMB_towerdefence」に変更します。

「BP_PC_towerdefence」を開きます。「詳細パネル」の「クラスインターフェース」の「Show Mouse Cursor」「Enable Click Events」にチェックを付けます。
※後で使うため、図では「Enable Mouse Over Events」にもチェックが付いていますが、ここで付けてなくても動きます。

ここまでの設定で、マウスカーソルを表示し、オブジェクトをクリックした時にイベントを発生させることが出来るようになります。

「タワー」を出現させるオブジェクト「タワーソケット」の外観を作る

今回マウスクリックイベントを受け付けるオブジェクト、「タワーソケット」の外観を作ります。レベル上に配置された「タワーソケット」をクリックすることで「タワー」を出現させられるような仕様にします。

レベルのビューポートで、「モデリングモード」にします。
「作成」→「Cylinder」を選択します。「Cylinder」の大きさは「Radius=60」「Height=10」としました。

少しソケットっぽく見えるよう、中央に穴をあけてドーナツ状にします。
「モデル」→「PolyCut」を選択します。「Cylinder」を円形に切ることができるようになります。ここでは「Width=50」とします。

「tower_socket」という名称で新たにフォルダを作ります。「右クリック」→「ブループリントクラス」→「Pawn」を選択し、新たなブループリントを作り、名称を「BP_tower_socket」とします。
先ほど作成したドーナツ型の「Cylinder」を「tower_socket」フォルダに移動し、名称を「SM_tower_socket」とします。
※「Cylinder」はレベルと同じ階層に自動的に作られる「_GENERATED」に格納されています。(参照part1)

「BP_tower_socket」を開きます。「SM_tower_socket」をビューポートにドラッグアンドドロップします。

単色のマテリアル「M_tower_socket」を作り「SM_tower_socket」に割り当てます。今回は濃いめの緑色にしました。
単色のマテリアルの作り方はpart2を参照ください。

クリック時に発生するイベントを作る「Bind Event to On Clicked」

「BP_tower_socket」のイベントグラフを開きます。
「Event BeginPlay」で「Bind Event to On Clicked」を検索して追加します。
自動的に「OnClicked_Event」も追加されます。

「Add Custom Event」​でイベントを追加し、名称を「spawn_tower」にします。

「spawn_tower」を「OnClicked_Event」​に繋ぎます。

「spawn_tower」に「Spawn Actor from class」を追加し、「Class」を「BP_tower」に設定します。
「Get Actor Location」を追加し、「Spawn Actor from class」に​「Spawn Transform」に繋ぎます。

実行すると下図のように、「tower_socket」をクリックすると「BP_tower」をスポーンできるようになります。しかし、このままではクリックするたび​何個でもスポーンできてしまいます。

1回のみスポーンさせられるようにします。Boolean型で「have_tower」を作ります。
「Spawn Actor from class」の前に「have_tower」がfalseかどうかを判定する処理を挟み、「Spawn Actor from class」の後に「have_tower」をtrueにする処理を追加します。

ここまで作成して実行すると、冒頭の動画のようにオブジェクト「tower_socket」をクリックするとオブジェクト「BP_tower」をスポーンさせられるようになります。

コメント

タイトルとURLをコピーしました