Category: “Unreal Engine”
執筆: A.Y
はじめに
今回紹介するのはUnrealEngineでマウスカーソルを使わないカーソルの作り方です。
UnrealEngineではマウスカーソルの機能を使ってカーソルを作るのが一般的ですが、訳あってマウスカーソルをゲームに使いたくないって時に役に立つと思います。
この記事の内容
この記事ではカーソルの表示と移動、3Dオブジェクトの認識と反応を作ります。

準備するもの
- UnrealEngin 5.2
cppファイルなどは使用せず、BPだけで作ります。
実装してみよう
まずはカーソルの実装をします。

“右クリック>ユーザーインターフェース>ウィジェットブループリント>User Widget”からWBP_Cursorを作ります。

WBP_Cursor内にCanvasPanelとImageを追加します。
Imageに差し込む画像はカーソルの見た目としてそのまま使うため、ここにカーソルに使いたい画像を入れてください。
またImageの名前はCursorImageに変更しIsVariableにチェックを入れてください。
次にカーソルの移動制御を実装します。

MoveVolumeSet関数を作り、上記のようにノードを組みます。
関数のインプットにMoveVolumeを追加してください。型はVector2Dです。
CursorMoveVolumeはVector2D型の変数になります。

イベントグラフ内に上記のようにノードを組みます。
今回は操作にWASDを使用しますが、十字キーやゲームパッド操作に変更も可能です。

イベントグラフのイベントTickに上記のようにノードを組みます。
CursorImage変数はIsVariableにチェックを入れることで使えるようになります。
CursorSpeed変数はFroat型の変数になります。この値を変更するとカーソルの移動速度が変わります。
この段階でカーソルの移動が出来るようになっているのでレベル上で確認します。

レベルブループリントのイベントBeginPlayに上記のようにノードを組みます。

上記のように上下左右にカーソル画像を自由に動かせていたら正常に実装できています。
カーソルに反応出来るアクターを作ります。

“右クリック>ブループリントクラス>Actor”からBP_ClickObjectBaseを作ります。

イベントグラフ内にカスタムイベントClickを作りPrintStringノードを組みます。

続いて“右クリック>子ブループリントクラスを作成します”からBP_ClickObjectBaseを親クラスに持つBP_ClickPointを作ります。

クリックが出来るように適当なメッシュをコンポーネントに追加し、レベル内に配置します。
カーソルにクリック機能を実装します。

WBP_Cursorに上記のようにノードを組みます。
上記の処理では”LineTranceByChannelノードで取得したオブジェクトの名前をPrintStringノードで表示、そのオブジェクトがBP_ClickObjectBaseクラスを持っている場合はClickイベントを実行”の処理を行っています。
またLocalToViewportノードのLocalCoordinateの数値を変更するとクリック判定の出現位置を変更することが出来ます。初期数値の場合はCursorImageの左上が判定位置になります。

ここまで実装すると上記のようにクリックしたオブジェクトの名前が表示されるようになり、BP_ClickPointをクリックした場合はBP_ClickObjectBaseのClickイベントが実行されます
BP_ClickObjectBaseの子クラスに個別の処理を実装します。

上記のようにBP_ClickPoint上でBP_ClickObjectBaseのイベントClickにノードを組みます。

すると親クラスであるBP_ClickObjectBaseの処理は通らず、BP_ClickPoint上で実装した処理だけが通るようになります。
まとめ
以上がマウスカーソルを使わないカーソルの作り方になります。
今回は簡単な初期実装部分の紹介でしたが、このカーソルは通常のマウスカーソルを使ったものよりも高いカスタマイズ性を持っているので活用してみてください。
関連記事
- https://zenn.dev/hiehie/books/44a74095222c06/viewer/ee7bb7