Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Dev Log 28 - Inventory Loot System

2025年10月03日に「Dev.to」が公開したITニュース「Dev Log 28 - Inventory Loot System」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

ゲームのインベントリとルートシステム開発が完了した。装備品の登録、アイテムの消費、敵からの戦利品表示といった主要機能が、データベース連携とUI実装により実現。ストーリーと連動し、プレイヤーがゲーム内でアイテムを効率的に管理・取得できるようになった。

出典: Dev Log 28 - Inventory Loot System | Dev.to公開日:

ITニュース解説

この開発日誌は、ゲーム内でプレイヤーがアイテムを持ち運んだり、敵を倒したり宝箱からアイテムを見つけたりする「インベントリとルートシステム」という仕組みの開発進捗について報告している。システムエンジニアを目指す初心者にも分かりやすく、このゲームの裏側で何が行われているのかを段階的に見ていこう。

まず、最初のフェーズでは「装備品の登録と、プレイヤーに初期装備を割り当てる処理の修正」が行われた。これは、ゲーム内のすべての装備品(武器や防具など)を管理する「装備レジストリ」という仕組みを改善することから始まった。このレジストリは、ゲーム内のあらゆる装備品の情報を一元的に管理するデータベースのようなものだ。今回行われた改善は、もし同じアイテムIDを持つ装備品が複数登録されそうになった場合、自動的に最新の情報で古い情報を上書きするようにした点だ。これにより、誤って重複したデータが登録されたり、古い情報が残り続けたりするのを防ぎ、常に正確な装備品リストが保たれる。開発者は「Tools」メニューから簡単にこの登録処理を実行できるようになり、装備品の追加や更新がスムーズになった。

次に、プレイヤーがゲームを始めた際に、選択したキャラクターのタイプ(アーキタイプ)に応じた初期装備を正しく渡す処理の修正が行われた。以前は、この初期装備の割り当てに問題があり、不適切な方法でプログラム部品を取得しようとしていたため、エラーが発生したり、装備が正しく設定されなかったりすることがあった。この問題を解決するため、プレイヤーのプロフィール情報から直接選択されたアーキタイプを取得し、それに基づいて初期装備を割り当てるように変更された。これにより、ゲーム開始時にプレイヤーの装備が期待通りに設定され、画面上の表示(HUD)やキャラクターの能力値もきちんと反映されるようになった。

次のフェーズでは、「プレイヤーの生存に関するアイテム消費システムの統合」が行われた。これは、食べ物や飲み物など、消費することでプレイヤーの能力値に影響を与えるアイテムの仕組みを新しく作り直すことだ。まず、「インベントリアイテムのデータ構造」が拡張された。データ構造とは、各アイテムがどのような情報を持つかという「設計図」のようなものだ。この設計図に、体力回復量、スタミナ回復量、空腹回復量、水分回復量といった、プレイヤーの生存に直結する新しい情報が追加された。さらに、アイテムを使うと「病気になる確率」や「病気の種類」、そのアイテムが「液体なのか」「再利用可能な容器なのか」「空っぽなのか」といった、より詳細な特性も記録できるようになった。

これらの新しい情報を使って、プレイヤーの能力値を管理するプログラムに「ConsumeInventoryItem()」というメソッド(処理のまとまり)が追加された。このメソッドは、アイテムが消費されたときに、設計図に書かれた回復量に基づいてプレイヤーの能力値を回復させたり、病気になるかどうかの判定を行ったり、使用済みアイテムをインベントリから削除したり、画面上のHUDを更新したりする一連の処理を自動的に行う。これにより、食べ物や飲み物、さらには再利用可能な水筒のようなアイテムまで、様々な種類の消費行動をゲーム内で再現できるようになった。また、すべてのアイテムが共通して持つべき情報や機能を定義する「IInjectableItem」というインターフェースも拡張され、新しく追加された生存関連のデータや病気関連のデータを、どのアイテムも同じ方法でシステムに提供できるようになった。これにより、ゲームのプログラム全体が統一的にアイテムを扱えるようになり、将来的に新しいアイテムを追加する際もスムーズに対応できる。

さらに、その次のフェーズでは「インベントリの表示ロジックとアイテムの割り当て」の改善が行われた。このフェーズで解決された重要な問題は、アイテムを使った後も、インベントリ画面を一度閉じないと使ったはずのアイテムが画面に表示されたままになってしまうことだった。この問題を解決するため、アイテムを削除する処理が実行されたらすぐに、インベントリ画面の表示を完全に最初から作り直す(リフレッシュする)ように修正された。これにより、プレイヤーがアイテムを使った瞬間に、インベントリ画面からもそのアイテムが消えるようになり、より直感的でスムーズなゲーム体験が提供されるようになった。

また、アイテムを使うと、実際に体力やスタミナなどの能力値が変動するようになった。特に重要なのは「病気判定」の仕組みが導入されたことだ。例えば、生の肉や怪しい食べ物を口にすると、病気になる可能性が生じ、プレイヤーに特定の悪い状態(状態異常)が付与されることがある。これにより、アイテムを使うという行為にリスクが加わり、ゲームプレイに戦略性が増した。また、一度使ったアイテムはインベントリから完全に消え、無限に使い回せないように変更されたことで、アイテム消費の感覚がよりリアルになった。このフェーズでは、ゲーム内に登場する肉の種類も大幅に増やされ、生肉、調理済み肉、乾燥肉、焦げ肉など、様々なバリエーションが追加された。これらはすべて新しい消費システムに対応しており、中には人肉を食べることで特殊なゲームプレイが解禁される要素も追加された。これらの改善を通じて、インベントリの表示は部分的な更新ではなく、全体を再構築するのが最も信頼できる方法であるという重要な学びが得られた。

最終フェーズでは、「ルートシステム(アイテム収集システム)の再構築」が行われた。これは、ゲームの物語の進行に合わせて、プレイヤーが探索できる場所からアイテムを動的に見つけられるようにする仕組みだ。まず、ゲームの物語の各段階(ストーリーノード)を管理するプログラムに「lootContainers」というリストが追加された。これにより、特定の物語の状況に応じて、出現するアイテムの種類や場所を自由に設定できるようになった。例えば、「この森のエリアでは特定の時間帯にレアなキノコが手に入る」といった設定が可能になる。

次に、ルートアイテムを表示するためのユーザーインターフェース(UI)が大きく改善された。プレイヤーがルート可能なアイテムを見つけた際、それらを一覧表示する「LootPanelManager」という画面が刷新され、最大3つのタブ付きパネルを動的に表示・管理できるようになった。各パネルは、個々のアイテムスロットの表示を担当し、アイテムのアイコンや情報が「レジストリ」(前述の装備品目録のようなもの)から取得されて表示される。これにより、UIは常に最新のアイテム情報に基づき、アイテムがあるスロットだけが有効になる。

これらのシステムは、「StoryNodeLoader」というプログラムを通じて、ゲームの実行中に物語の進行に合わせてルートコンテナを動的に読み込み、関連するUIパネルをアクティブにし、不要なパネルをクリアする。つまり、プレイヤーが特定の物語の場所に着くと、その場所で手に入る可能性のあるアイテムが自動的にインベントリ画面のルートパネルに表示されるようになったのだ。これにより、物語の展開に応じてアイテム収集が迅速かつ簡単に行えるようになった。この一連の開発を通じて、開発チームは「データはプレハブ(ゲームオブジェクトのテンプレート)に直接書き込むのではなく、一元化されたレジストリで管理すべきである」という重要な教訓を得た。この「レジストリ・ファースト」のアプローチにより、システムはより柔軟で拡張性が高まり、現在1324種類ものアイテムに対応できるようになった。

今回の開発で、ルートシステムは完全に機能するようになり、「The Vulture Binding」と名付けられた。今後は、ルートアイテムをインベントリにドラッグ&ドロップしたり、クリックで取得できるようにする機能を追加し、さらにアイテムを組み合わせて新しいアイテムやレシピを作成できる「クラフト/レシピグリッド」を導入することが次の目標だ。これらの機能が実装されれば、このゲームのインベントリシステムはほぼ完成形に近づくことになる。ゆっくりではあるが、着実に進捗しており、全てが一つにまとまりつつある状況だ。

関連コンテンツ

関連IT用語