ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】〈Tips〉ブループリントのみで、さいころの目を判定してみよう

目次

 

はじめに

 

今回はUEのブループリントのみでさいころの目を判定します。
この記事を書くにあたって以下の記事を参考にしました。

redhologerbera.hatenablog.com

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

実装としてはそれぞれの面でワールド座標で一番高い面を確認するだけのシンプルな仕組みです。

8面ダイスで作成していますが何面でも実装は同じです。

解説

さいころをサクッとモデリング

せっかくなので8面ダイスにしました。

 

②モデルのインポート

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

 

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

 

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

 

上手く動かないという場合はこちらの記事をお読みください。

namiton.hatenablog.jp

 

③アクタの作成

スタティックメッシュからアクタに変換します。

 

名前は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)のフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる