6

【UE】ターン制バトル応用:BET選択制限機能の実装方法

みなさんこんにちは、NakaRyoです。

今回は、ターン制システムの応用として、

**「選択済みのBETボタンを次のターン以降使えなくする」**機能を追加していきます。

前に実装したターン制システムでは、BET5/10/15/20 のボタンが用意されていましたが、

たとえば1ターン目に BET5 を選択したら、2ターン目以降は BET5 を押せないようにする仕組みを実現します。

事前準備

ウィジェットブループリント側(WBP_BET)

コンテンツフォルダ内を右クリック → ユーザーインターフェース → ウィジェットブループリントを選択

image

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

image

デザイン設定:WBP_BET 側

image

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にチェックが入っているかを確認してください。

image

細かい配置・スタイル設定は過去記事を参照してください

WBP_BET のグラフ設定

BET ボタン設定

image

Custom Event を作成

例:OnClicked(Button_Bet5) → 「Set SelectedBet」に “5” を入力

Set SelectedBet の出力ピン → ToText(Integer) に接続

グラフ上で Format Text ノードを配置

Format に "BET:{Bet}" と入力

Bet ピンにつなぐため、ToText.ReturnValue を接続

Format Text.ResultSetText(Text).InText に接続

SetText.TargetGet TextBlock_Player BET SELECT に接続

最後に、Set SelectedBet 実行ピン → SetText 実行ピンを接続

この処理を、BET10/15/20 それぞれに対しても同様に実装します。

イベント名も “BET10 / BET15 / BET20” にし、対応する数値を入力してください。

image

Select ボタンの設定

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

image

※Submit player Betを作成されていない方は、

 BP_GameModeの関数設定で作成後、このノードに追加してください。

BET 数値を UI に反映(PLAYER & CPU 側)

選択した BET がプレイヤーおよび CPU 側 UI に反映される処理を行います。

image

BET ボタンの有効化/無効化制御

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

image

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

image

ターン数の更新 / リザルト表示

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

image
image

ここまでが WBP_BET 側での事前準備とノード構成です。

詳細な手順は過去の記事で紹介していますので、そちらも参考にすると理解が深まります。

BP_GameMode 側の設定(ゲームルールシステムの更新)

次に、ゲームルール制御を行う GameMode ブループリント 側で、今回の「使用済みボタン無効化」機能を追加します。

導入

コンテンツフォルダ上で右クリック → ブループリントクラス → ゲームモードベースを選択

作成されたクラスを BP_GameMode にリネームし、開きます

image

グラフ設定(変数・関数追加)

変数

CurrentTurn(Integer、デフォルト値: 0)

MaxTurn(Integer、デフォルト 値:5)

PlayerBet(Integer、デフォルト 値:0)

CPUBet(Integer、デフォルト 値:0)

WBP_Ref(WBP_BET のオブジェクト参照)

UsedBets_Player(Integer の配列)

AllBets(Integer の配列)

UsedBets_CPU(Integer の配列)

image

関数

StartTurn

SubmitPlayerBet(インプット名:InBet インプット型:Integer)

SubmitCPUBet(アウトプット名:Int アウトプット型:Integer)

CheckEndTurn

ResolveRound

EndGame

Event Begin Play

image

Create Widget ノード(WBP_BET 指定)

Set WBP_RefAdd to Viewport

Get Player ControllerShow Mouse Cursor = true

StartTurn 呼び出し

コンパイル・保存

Start Turn 関数実装

image

Start Turnの実行ピンとSet Current Turnの実行ピンを接続

Set Current TurnのItemピンとadd(オペレーター)のReturn Valueピンを接続

Add AピンとGet Current Turnを接続

Add Bピン欄に1を入力

image

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にチェックを入れる

image

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 関数

image

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と接続

image

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を接続

image

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 配列

image

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

image

SubmitCPUBetの実行ピンとClear(配列)の実行ピンを接続

Clearの配列ピンとAvailable Betsの配列ピンを接続

Clearの実行ピンとFor Each Loopの実行ピンと接続

image

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を接続

image

For Each LoopのCompletedピンとBranch②の実行ピンを接続

Branch②のConditionピンとGreater(>)のReturn valueピンを接続

Greater AピンとLENGTH(配列)のReturn Valueピンを接続

LENGTHの配列ピンとAvailable Betsの配列ピンを接続

image

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の配列ピンを接続

image

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 関数

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

CheckEndTurn 関数

image
  • CurrentTurn >= MaxTurnEndGame()
  • それ以外 → StartTurn()

EndGame 関数

image
  • ShowResultText("GAME OVER!")

最後にコンパイルして保存します。

まとめ

今回の応用編では、Unreal Engine においてターン制ゲーム中に一度選択した

BET ボタンを次のターンから無効化する機能を解説しました。

具体的には、

  • WBP_BET 側で Custom Event による BET 表示更新、ボタン無効化、ターン表示更新、結果表示
  • BP_GameMode 側で変数/配列管理、使用済み BET 制御、CPU の選択ロジック、勝敗判定
  • レベル開始時に GameMode と UI を紐付け、システムを動作させる流れ

をすべて実装することで、プレイヤーは同じ BET ボタンを繰り返し押せないようになり、戦略的な選択を促すゲーム性が加わります。

この仕組みは、Unreal Engine(UE5 含む)でのターン制バトルや

カードゲーム、ストラテジー系ゲームなどに応用できます。

ぜひ実装して、あなたのゲームに深みを持たせてみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です