みなさんこんにちは、NakaRyoです。
今回は、ターン制システムの応用として、
**「選択済みのBETボタンを次のターン以降使えなくする」**機能を追加していきます。
前に実装したターン制システムでは、BET5/10/15/20 のボタンが用意されていましたが、
たとえば1ターン目に BET5 を選択したら、2ターン目以降は BET5 を押せないようにする仕組みを実現します。
事前準備
ウィジェットブループリント側(WBP_BET)
コンテンツフォルダ内を右クリック → ユーザーインターフェース → ウィジェットブループリントを選択

ウィジェットを “ユーザーウィジェット” に設定し、ファイル名を WBP_BET にします

デザイン設定:WBP_BET 側

Turn 1/5 → TextBlock_turn
BET SELECT → TextBlock_Player BET SELECT
CPU SELECT → TextBlock_CPU BET SELECT
勝敗表示用テキスト → TextBlock_WIN
BET5~BET20 の各ボタン・SELECT ボタン⇒Button Block
各ブロック設定にて、Is Variableにチェックが入っているかを確認してください。

細かい配置・スタイル設定は過去記事を参照してください
WBP_BET のグラフ設定
BET ボタン設定

Custom Event を作成
例:OnClicked(Button_Bet5) → 「Set SelectedBet」に “5” を入力
Set SelectedBet
の出力ピン → ToText(Integer)
に接続
グラフ上で Format Text
ノードを配置
Format に "BET:{Bet}"
と入力
Bet
ピンにつなぐため、ToText.ReturnValue
を接続
Format Text.Result
→ SetText(Text).InText
に接続
SetText.Target
→ Get TextBlock_Player BET SELECT
に接続
最後に、Set SelectedBet 実行ピン → SetText 実行ピンを接続
この処理を、BET10/15/20 それぞれに対しても同様に実装します。
イベント名も “BET10 / BET15 / BET20” にし、対応する数値を入力してください。

Select ボタンの設定
ここでは、BP_GameMode の関数 SubmitPlayerBet
を呼び出すノードを設置します。

※Submit player Betを作成されていない方は、
BP_GameModeの関数設定で作成後、このノードに追加してください。
BET 数値を UI に反映(PLAYER & CPU 側)
選択した BET がプレイヤーおよび CPU 側 UI に反映される処理を行います。

BET ボタンの有効化/無効化制御
次のターンに移行するとき:BET ボタンを有効化

SELECT ボタンを押した後:使用済みボタンを無効化し、再選択を防止

ターン数の更新 / リザルト表示
ターン数を更新し、勝敗表示(リザルト)を画面に表示する処理もこの段階で対応します。


ここまでが WBP_BET 側での事前準備とノード構成です。
詳細な手順は過去の記事で紹介していますので、そちらも参考にすると理解が深まります。
BP_GameMode 側の設定(ゲームルールシステムの更新)
次に、ゲームルール制御を行う GameMode ブループリント 側で、今回の「使用済みボタン無効化」機能を追加します。
導入
コンテンツフォルダ上で右クリック → ブループリントクラス → ゲームモードベースを選択
作成されたクラスを BP_GameMode にリネームし、開きます

グラフ設定(変数・関数追加)
変数
CurrentTurn(Integer、デフォルト値: 0)
MaxTurn(Integer、デフォルト 値:5)
PlayerBet(Integer、デフォルト 値:0)
CPUBet(Integer、デフォルト 値:0)
WBP_Ref(WBP_BET のオブジェクト参照)
UsedBets_Player(Integer の配列)
AllBets(Integer の配列)
UsedBets_CPU(Integer の配列)

関数
StartTurn
SubmitPlayerBet(インプット名:InBet インプット型:Integer)
SubmitCPUBet(アウトプット名:Int アウトプット型:Integer)
CheckEndTurn
ResolveRound
EndGame
Event Begin Play

Create Widget
ノード(WBP_BET 指定)
Set WBP_Ref
→ Add to Viewport
Get Player Controller
→ Show Mouse Cursor = true
StartTurn
呼び出し
コンパイル・保存
Start Turn 関数実装

Start Turnの実行ピンとSet Current Turnの実行ピンを接続
Set Current TurnのItemピンとadd(オペレーター)のReturn Valueピンを接続
Add AピンとGet Current Turnを接続
Add Bピン欄に1を入力

Set Currentの実行ピンとUpdate Turn Text(WBP_BETのカスタムイベント)の実行ピンを接続
Update Turn TextのTargetピンとGet WBP_Refを接続
Update Turn TextのCurrentピンとGet Current Turnを接続
Update Turn TextのMaxピンとGet Max Turnを接続
Update Turn Textの実行ピンとEnable Bet Buttonの実行ピンを接続
Enable Bet ButtonsのTargetピンとGet WBP_Refを接続
Enable Bet ButtonsのEnableにチェックを入れる

Enable Bet Buttonsの実行ピンとFor Each Loopの実行ピンを接続
For Each ArrayのArrayピンとUsed Bet Player Arrayピンを接続
For Each LoopのLoop BodyピンとDisable Bet Buttonの実行ピンを接続
For Each LoopのArray ElementピンとDisable Bet ButtonのInbetピンを接続
Disable Bet ButtonのTargetピンとGet WBP_Refを接続
For Each LoopのCompletedピンとReturn Nodeピンを接続
SubmitPlayerBet 関数

SubmitPlayerBetの実行ピンからSet Player Betを接続します。
SubmitPlayerBetのIn BetピンとSet Player Betを接続します。
Set Player Betの実行ピンとShow Player Bet(WBP_BETのカスタムイベント)を接続
Show Player BetのTargetピンをGet WBP_Ref
InbetをGet Player Betと接続

Show Player Betの実行ピンとAdd Unique(配列)の実行ピンを接続
Add Uniqueの配列ピンとGet Used Bets Playerを接続
Add UniqueのitemピンとIn Betを接続
Add Uniqueの実行ピンとEnable Bet Buttonの実行ピンを接続
Enable Bet ButtonのTargetとGet WBP_Refを接続

Enable Bet Buttonsの実行ピンとSubmitCPUBet(関数の呼び出し)の実行ピンを接続
Submit CPUBetの実行ピンとShow CPUBet(WBP_BET カスタムイベント)を接続
ShowCPUBetのTargetをGet WBP_Refと接続
In BetをCPUBetと接続
Show CPUBetの実行ピンとResolve Roundの実行ピンを接続
SubmitCPUBet 関数(今回追加)
ローカル変数
変数名:AvailableBets 変数型:Inreger 配列

上記の変数は必ずローカル変数で作成してください。

SubmitCPUBetの実行ピンとClear(配列)の実行ピンを接続
Clearの配列ピンとAvailable Betsの配列ピンを接続
Clearの実行ピンとFor Each Loopの実行ピンと接続

For Each LoopのLoop BodyピンとContain Item(配列)の実行ピンを接続
Containsの配列ピンとGet Bets CPUの配列ピンを接続
For Each LoopのArray ElementピンとContainsのItemピンを接続
Containsの実行ピンとBranch①の実行ピンを接続
ContainsのReturn ValueピンとBranch① Conditionピンを接続
Branch①のFalseピンとAdd(配列)の実行ピンを接続
Add(配列)の配列ピンとAvailable Betsの配列ピンを接続
Add(配列)のItemピンとFor Each LoopのArray Elementを接続

For Each LoopのCompletedピンとBranch②の実行ピンを接続
Branch②のConditionピンとGreater(>)のReturn valueピンを接続
Greater AピンとLENGTH(配列)のReturn Valueピンを接続
LENGTHの配列ピンとAvailable Betsの配列ピンを接続

Branch②のTrueピンとRandom Integer In Rangeの実行ピンと接続
※Random Integer In Rangeの実行ピンはノード選択後、
右クリックで“実行ピンを表示”をクリック
Random Integer In RangeのMINを0に設定し、
MaxピンをSubtract(減算)のReturn Valueピンを接続
SubtractAピンとLENGTH(配列)のReturn Valueピンを接続
Lengthの配列ピンとAvailable Betの配列ピンを接続

Random Integer In Rangeの実行ピンとSet CPUBETの実行ピンを接続
Random Integer In RangeのReturn ValueピンとGet a Copy(配列)を接続
Get a Copyの配列ピンとAvailable Betの配列ピンを接続
Get a CopyのReturn ValueピンとSet CPUBetのItemピンを接続
Set CPUBETの実行ピンとAdd unique(配列)の実行ピンを接続
SetCPUBETのReturn ValueピンとAdd UniqueのItemピンを接続
Add Uniqueの配列ピンとGet Used Bets CPUを接続
Add Uniqueの実行ピンとReturn Nodeを接続
Add UniqueのReturn ValueピンとReturn NodeのIntピンと接続
ResolveRound 関数

Get PlayerBet
/Get CPUBet
を取得- 勝敗分岐処理 →
ShowResultText("PLAYER WIN!")
/ShowResultText("CPU WIN!")
/ShowResultText("DRAW!")
- その後
CheckEndTurn
を呼び出し
CheckEndTurn 関数

CurrentTurn >= MaxTurn
→EndGame()
- それ以外 →
StartTurn()
EndGame 関数

ShowResultText("GAME OVER!")
最後にコンパイルして保存します。
まとめ
今回の応用編では、Unreal Engine においてターン制ゲーム中に一度選択した
BET ボタンを次のターンから無効化する機能を解説しました。
具体的には、
- WBP_BET 側で Custom Event による BET 表示更新、ボタン無効化、ターン表示更新、結果表示
- BP_GameMode 側で変数/配列管理、使用済み BET 制御、CPU の選択ロジック、勝敗判定
- レベル開始時に GameMode と UI を紐付け、システムを動作させる流れ
をすべて実装することで、プレイヤーは同じ BET ボタンを繰り返し押せないようになり、戦略的な選択を促すゲーム性が加わります。
この仕組みは、Unreal Engine(UE5 含む)でのターン制バトルや
カードゲーム、ストラテジー系ゲームなどに応用できます。
ぜひ実装して、あなたのゲームに深みを持たせてみてください。