ゲーム開発備忘録

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

【ゼロからアンリアルエンジン5】〔アイテム編〕⑩Ap●x風のインベントリ画面を実装しよう!~クイックソートでアイテムを自動整理する~

目次

 

はじめに

 

前回の続きです。

namiton.hatenablog.jp

 

この記事ではアルゴリズムクイックソートを使用してアイテムの自動整理を実装します。

▼この記事でできること

 

 

解説

①アイテム順番の決定

自動整理ではあらかじめアイテムの整列順番を決めておきます。

 

BP_ItemBaseの子を作成しました。

左から、軽量弾・中量弾・重量弾・回復箱・シールドセル の5種類を用意しました。

 

インベントリではこの順番で自動整理をするようにします。

 

②ST_ItemInfoの追加

整列を行うにはアルゴリズムを使用します。

アイテム名で比較することも可能ですがリネームしたときの影響を考えてアイテム構造体に整列の優先度を決めるための変数を追加します。

 

int型のItemSlotPriorityを作成しデフォルト値を999にしました。

 

今回は軽量弾・中量弾・重量弾・回復箱・シールドセルの順で整理するのでデフォルト値を0,1,2,3,4と割り振っておきます。BeginPlayのセットにつなげるのも忘れないようにしましょう。

 

クイックソートの関数を作成

クイックソートアルゴリズムの考え方の一種で、内部ソートでは一番早いとされている手法です。

データをいくつかのグループに分割し、グループ内で計算を行う分割統治法の一種です。

 

具体的な手法は以下の記事が分かりやすいのでリンクを貼っておきます。

medium-company.com

 

ブループリントでループを扱うのは負荷的によろしくないですがやっていきます。

 

ノード情報をコピペできるようにblueprintUEにまとめておきましたのでご利用ください。

 

blueprintue.com

blueprintue.com

blueprintue.com


BP_FirstPersonCharacterを開きます。

 

変数にArrayとTaskCountを追加しておきます。

 

関数に上記の記事のノードをコピペします。

 

エラーの吐く変数はローカル変数にしてください。

再帰呼び出しを行っている関数QuickSortはエラーノードを一度消して、再接続してください。

 

こんな感じに接続して

 

順番にソートされていることが確認出来たらコピペ成功です。



④SortItemDataの編集

BP_FirstPersonCharacterの関数SortItemDataを編集していきます。

ローカル変数のCashItemDataを複製します。

 

複製されたものはCashSortDataとしました。

 

ArrayのCLEARを追加します。

 

ArrayにItemSlotPriorityをAddします。

 

空の部分には999をAddします。

 

関数QuickSortを開きます。

SWAPノードで配列の位置を変更しています。

Arrayの位置を変更したらそれに対応してItemDataの位置も変更できるようにします。

 

関数SynchronizeSwapを作りました。


TargetArrayとST_Item_Infoの配列位置変更を同期させます。


SWAPノードの代わりに配置します。

 

SortItemDataに戻りQuickSortを呼び出します。


実行してみましょう。

アイテムが指定した種類ごとに並べば成功です!


DEBUGイベントがログを出力しているので非表示にする場合はこのノードを分離しましょう。

 

 

 

最後に

これにてアイテム編は終了です。お疲れ様でした!

基本的な仕組みはできましたので、銃のUI表示やSE、アニメーションを追加したりして自分好みのゲームに仕上げてみてください。

 

質問リクエスト等ありましたら、コメントまでよろしくお願いいたします。

 

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

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