【ITニュース解説】Dev Log 22 - Importer Overhaul
2025年09月20日に「Dev.to」が公開したITニュース「Dev Log 22 - Importer Overhaul」について初心者にもわかりやすく解説しています。
ITニュース概要
このゲーム開発日誌では、ドラッグ&ドロップやHUD機能を改善し、システムをモジュール化した。液体アイテムや汎用アイテムのデータをJSON形式で管理し、自動で取り込むシステムを構築。開発効率を高め、今後の機能拡張に備えている。
ITニュース解説
今回の開発日誌では、ゲームシステムの中核部分、特にデータの読み込み(インポート)の仕組みと、プレイヤーへの情報表示(HUD)の改善について報告している。ゲーム開発は細部にわたる地道な作業の積み重ねであり、システムをより頑丈で拡張しやすいものにするための取り組みがよくわかる内容だ。
まず、ゲームプレイの基盤となる部分の修正について説明する。プレイヤーがアイテムを動かすときの「ドラッグ&ドロップ」機能が、インベントリ画面全体で安定して動作するように改善された。これまでは一部で動きが不安定だったものが、すべてのインベントリパネルでスムーズにアイテムを掴んで離せるようになったのだ。また、アイテムとプレイヤーのインタラクション(相互作用)に関する設定が、ゲーム内で利用する「プレハブ」というひな形にしっかりと紐づけられ、ゲーム実行中に正しく動作するように調整された。プレハブとは、ゲーム内の様々なオブジェクト(キャラクター、アイテム、建物など)をあらかじめ設定しておき、必要に応じてコピーして使えるようにした「ひな形」のことだ。この調整により、アイテムがインベントリのスロットにドロップされた際に、ドラッグや選択といった一連の操作ロジックが完全に再初期化され、常に正しい状態で使えるようになった。
プレイヤーの状況を画面上に表示する「HUD(Heads-Up Display)」も大幅に強化された。これまでのHUDは必要最低限の情報しか表示していなかったが、コンディションアイコン、体力、スタミナ、血液レベルなど、より多くの情報が表示できるようテキストフィールドと表示領域が追加された。HUDとは、ゲーム画面上に重ねて表示される、プレイヤーにとって重要な情報(体力、スタミナ、ミニマップなど)のことだ。さらに、HUDの各要素はモジュール化され、たとえばコンディションを示すアイコンを簡単に差し替えられるように、UIコンテナにまとめられた。これにより、ゲームの見た目を変更したり、新しい情報を追加したりする際の開発効率が大幅に向上する。この新しいHUDの設計に合わせて、ゲーム内の環境がプレイヤーのステータスに与える影響を計算するシステムや、ゲーム全体の進行を管理するシステムも、新しいHUDの表示形式に同期された。キャラクターのステータスを管理するシステムには、血液レベルと血液型にアクセスするための機能(アクセサ)が追加され、誤った値が設定されないように範囲を制限したり、プレハブを使った際に安全なデフォルト値が適用されるように配慮されている。
これらの改善は、今後のゲームデザインにも影響を与える。プレイヤーのコンディションを示すシステムは、アイコンだけでなくテキストでもフィードバックが提供されるようになり、状況がより直感的に伝わるようになった。また、血液システムは、時間経過による血液の減少、輸血、負傷による影響といった複雑なロジックを将来的に組み込めるように準備が進められている。すべてのシステムは、プレハブを使って安全に利用でき、ゲーム実行時に意図通りに動作し、将来的に機能を追加しやすいように設計されている。次のステップとして、血液レベルの減衰や輸血ロジックの具体的な実装などが予定されているが、これらは一時的に延期されている。
次に、ゲーム内の「液体アイテム」のデータ管理システムの最終化に関する進捗があった。これまで、水筒に入った水や瓶の飲み物といった液体アイテムは、環境中の液体(沼地の水など)とデータベース上で一緒に扱われており、それが管理上の課題となっていた。この問題を解決するため、データベースを二つに分割し、プレイヤーが所持できる液体アイテムのデータをJSON形式に変換し、それを「LiquidItemImporter.cs」という専用のプログラムを使ってゲームに読み込む仕組みが作られた。JSONとは、データを記述するための軽量なテキスト形式で、人間が読み書きしやすく、プログラムも扱いやすい特徴がある。 この新しいシステムでは、「LiquidItem.cs」というプログラムファイルがアイテムのデータを保持する役割を担い、各アイテムのデータから「.asset」ファイルと呼ばれるUnity専用のデータファイルが生成される。最終目標は、Unityの「JsonUtility」という機能を使って、実行時にJSON形式の液体アイテムデータをゲームに効率的に読み込めるようにすることだ。すべてのデータが構造的に正しく、スプライト(画像)の表示に対応し、インベントリスロットに適切に配置でき、将来的な拡張性も確保されていることが求められる。
この目標達成のために、いくつかのタスクが完了した。UnityのJSONパーサーが正しくデータを読み込めるよう、すべてのJSONエントリは特定の形式で囲むように修正された。また、スプライトのパス、再利用可能か、補充可能か、スタック可能か、最大スタックサイズ、スロットの幅と高さなど、一貫したフィールド(データ項目)が注入され、プレハブで安全に利用できるようにされた。ゲームの背景設定と整合性を保つため、アイテムのID、表示名、水分値、毒性プロファイルなども維持された。C#のデータブロックからJSONへの手動変換と細かなクリーンアップ作業も実施された。
しかし、この作業中にいくつかの課題も発生した。UnityのJSONパーサーが、データが単純な配列形式で記述されていると正しく解析できない問題や、過去のフォーマットの不一致が原因でデータの信頼性が低下する問題があった。また、手作業によるデータの検証作業が多すぎたため、進捗が遅れたり、開発者の疲労につながったりもした。これらの経験から得られた教訓として、将来のデータ変換作業はエディタツールや自動化されたパイプラインを使って自動化すべきだということがわかった。現在のステータスとしては、アーカイブ自体は完成し、実行時インポートの準備は整っているが、スプライトパスとゲームの背景設定に関するタグ付けはまだ保留状態だ。
さらに、「汎用インポーター」と呼ばれる、あらゆる種類のアイテムをゲームに読み込むための強力な仕組みが構築された。これは「GeneralItemImporter.cs」というプログラムファイルで、プレハブで安全に利用でき、アイテムの「コンテンツ」に基づいてデータを読み込むことができる。インポーターとは、外部にあるデータ(JSONファイルや画像ファイルなど)を、ゲームエンジンが扱える形式に変換して読み込むプログラムのことだ。このインポーターは、Unity独自のJSON機能だけでなく、より高度な「Newtonsoft JSON」ライブラリにも対応している。読み込まれたアイテムデータは、特定のフォルダに整理された状態で出力される。スプライトの割り当ては現状手動で行われるが、デバッグ目的で「Elephant」というタグを使って追跡できる。 この汎用インポーターの重要な点は、アイテムのデータ読み込みを、ファイル名ではなくアイテムの「コンテンツ」(データそのもの)に基づいてルーティングする点だ。これにより、ファイル名に依存せずに柔軟なデータ管理が可能となる。また、データが欠落していたり、フォーマットが不正なエントリがあったりした場合でも、システムがクラッシュすることなく、適切に処理を行う「graceful fallback」機能も備わっている。 テストとして、「Tool_MatchesBox」(マッチ箱)というアイテムがToolItem(ツールアイテム)として正しくルーティングされたことが確認された。このマッチ箱は、着火や火起こし、料理といった機能を持ち、再利用可能で、使用回数は20回という設定だ。スプライトパスも割り当てられ、手動でのリンクが確認されている。
この過程でいくつかの修正も行われた。ゲームオブジェクトを検索する際に、非推奨となった関数が、新しい関数に置き換えられた。また、インポーターはファイル名ではなくコンテンツに基づいてルーティングするようにパッチが適用され、マッチのJSONデータも、説明、機能、フラグといった項目が修正された。再利用可能な消費アイテムに対して「usageCount」(使用回数)が追加され、データ型が正しく扱われるように型ミスマッチの問題も解消された。これらの作業により、「CreateAssetByContent」という関数を使って、アイテムのコンテンツに応じたルーティングロジックが確立されたことなど、モジュール化の面で大きな成果が得られた。
最後に、ゲームに登場するアセット(画像やモデルなどの素材)と、コミュニティの進捗についても触れられている。新たに30種類のアイテムスプライトが追加され、ゲーム内でデータを管理するための「ScriptableObject」にリンクされた。ScriptableObjectとは、Unityで使われる機能の一つで、ゲームオブジェクトに紐づかない形でデータを保存・管理できるアセットだ。これにより、アイテムの名前、アイコン、効果といったデータを効率的に定義できる。 また、アセットの制作プロセスにはクラウドパイプラインが導入され、開発者のマシンとは別の環境で画像を生成し、それをダウンロードして整理し、Unityプロジェクトに組み込むという流れが作られた。 さらに、将来のゲームコミュニティのために新しいDiscordサーバーの準備が開始された。開発日誌、バグ報告、アセットのプレビュー、ゲームの背景設定、アルファ版のフィードバックなど、目的に応じた複数のチャンネルが作成され、初期のアセットスクリーンショットやアルファ1.0のゲームプレイスクリーンショットがすでにアップロードされている。このサーバーは、開発者とプレイヤーの役割を明確に分け、整理されたオンボーディング体験を提供する。招待コードは今後の開発日誌などで公開される予定だ。
このように、今回の開発日誌は、ゲームの中核システムの改善、特にデータ管理とプレイヤーへの情報表示の仕組みを、より堅牢で拡張性の高いものにするための多岐にわたる取り組みを示している。細かい修正と、より良い設計への変更が、今後の開発をスムーズにし、より洗練されたゲーム体験につながる基盤を築いている様子がうかがえる。開発者は、ゆっくりと着実に進捗していく姿勢を示している。