目次
はじめに
今回はUEのブループリントのみでさいころの目を判定します。
この記事を書くにあたって以下の記事を参考にしました。
個人の備忘録としてまとめています。誤った情報がある場合があります。
コメントにてご指摘のほどお願いいたします。
実装としてはそれぞれの面でワールド座標で一番高い面を確認するだけのシンプルな仕組みです。
8面ダイスで作成していますが何面でも実装は同じです。
解説
①さいころをサクッとモデリング
せっかくなので8面ダイスにしました。

②モデルのインポート
スタティックメッシュとしてエディタにインポートしました。


また、少し荒いですが、凸型分解でコリジョンを付けます。

レベルに配置後SimulatePhyscsにチェックを入れて物理で動くようになりました。


上手く動かないという場合はこちらの記事をお読みください。
③アクタの作成
スタティックメッシュからアクタに変換します。

名前はB_OctahedronDiceにしました。

④シーンコンポーネントの追加
BPを開き、面の数に合わせてシーンコンポーネントを追加します。

今回は8面ダイスなので8個追加しました。

それぞれの面に合わせてシーンコンポーネントの番号と面の番号の位置に合わせます。

スナップツールを使いこのような位置に配置しました(シーンコンポーネントだと見づらいのでbillbordでも可)
⑤関数の作成と変数の追加
+から、計算を行う関数CalculateDiceResultを作りました。

関数の入力と出力を作ります。

関数のノードを選択して詳細から以下のように設定します。
< In >
SceneComponents・・・・シーンコンポーネントの配列


< Out >
ResultNumber・・・Integer
bComplete・・・Boolean

このようになったらOKです。
次に計算に使うローカル変数を2つ作成します。
CachedHeight・・・・Float
CachedNumber・・・・Integer

⑥関数の内部実装
まず初期化処理を行います。

配列の先頭を取得し失敗したらそのまま処理を終了します。

成功したら0番とワールド座標における高さ情報をキャッシュします。

次に全配列を確認する処理です。

CachedHeightよりも現在のコンポーネントの高さが高いかどうか判定して

高ければそのIndexと高さをローカル変数にキャッシュします。

全配列のチェックが終わったら終了し、キャッシュされたIndex+1を返します。
ここで1足しているのは後で解説します。

全体像はこのような形で完成です。

⑦関数を使って完成
イベントグラフに戻り↓のように組みます。

まず変数に新たにSceneComponentsを作成します。

ここにコンポーネントを登録していきます。
コンポーネントの示す数字の順番-1したIndexに登録してください。
この時配列は0から始まるのに対して実際の数字は1から始まるので、先ほどの関数では最後にそのズレ分+1していました。

自作した関数に作成した配列を入れて結果を出力して完成です。

お疲れさまでした。

最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやX(Twitter)のフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。