0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UE5 簡単なターン制御を実装する

Last updated at Posted at 2025-02-01

概要

作業ログの続き。

簡単なターン制御を実装する。

  • プレイヤーと敵が交互にタイル上を移動する
  • 敵は1体だけで、ランダムなタイルに移動する

cm40_4.gif

前回

今回の内容のプロジェクト一式
(ユニット同士の重なり防止も対応しているのでちょっと変えている)

環境

UE 5.5.1

列挙型 E_GamePhase 追加

コンテンツブラウザで列挙型 E_GamePhase を作成する。

項目は下記の2つ。

  • PlayerTurn
  • EnemyTurn

2025-01-30_23h51_56.png

2025-01-30_23h52_03.png

BP_PlayerController

敵のターンで入力操作されないように、単純にフラグで制御しておく。
このフラグはターン制御時に切り替える。

2025-02-01_12h08_02.png

GM_TestGame (GameMode)

変数追加
image.png

初期化

BeginPlay で Player と Enemy をスポーンさせているので、それぞれ参照を格納しておく。

最後に GamePhase を初期値 PlayerTurn に設定し、後述の ChangeTurn 関数を呼びだす。

2025-02-01_11h53_34.png

EndTurn 関数

ターン終了時の GamePhase 切り替え処理と、新しいターンの処理を行う。
※ PlayerUnit と EnemyUnit 変数は BP_TestGame でのスポーン時にセットしておく。

2025-02-01_11h17_05.png

ChangeTurn 関数

現在指定されているターンの処理を実装する。
(関数名がちょっと悪いかもしれない)

具体的にはプレイヤーなら入力操作 OK にして移動するまで待機、敵なら入力操作 OFF にしてランダムなタイルへ自動で移動させる。

前半

image.png

後半

敵のランダム移動処理。

赤枠の GetAdjucentTiles は BP_GameBoard に次で実装する。
敵の前後左右タイル配列からランダムに1つ選び、プレイヤーの移動と同じく MoveToTile を呼ぶという流れ。

2025-02-01_11h19_33.png

GetAdjucentTiles は BP_GameBoard の処理なので次で実装する。

BP_GameBoard

敵の移動先タイルを配列に格納する関数を BP_GameBoard に実装する。

GetAdjucentTiles 関数

単純に現在グリッド座標に前後左右4パターンのオフセットを足した座標のタイルを取得し、それぞれ ResultTiles に格納している。ランダムな隣接タイル候補。

2025-02-01_11h37_45.png

これを4回しているだけ。

image.png

Add Tile to Result TIles 関数

指定タイルのオフセット位置にあるタイルを配列に格納するが、タイルが無い座標は無視するようにしている。

関数名含めやっつけ感があるが、GetAdjucentTiles 内で使用する共通処理をまとめただけ。こういうのってマクロでも良いのかもしれない。

image.png

移動終了時にターン終了を呼ぶ

BP_PlayerUnit と BP_EnemyUnit のベースクラスである BP_Unit の MoveToTile 関数 (単純なタイル間移動) の最後で、BP_TestGame の TurnEnd 関数を呼んで完了。

image.png

おわり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?