開発実績
これまで携わってきた代表的なプロジェクト、技術的アプローチ、および具体的な成果。
Web3モバイルゲーム新規開発
プロジェクト概要
Web3要素を取り入れた大規模な新規モバイルゲームのクライアント開発。画面の実装に加え、多人数での並行開発に耐えうるクライアントアーキテクチャの構築および自動化環境の整備を担当。
担当内容
- MV(R)Pアーキテクチャ画面実装: DIコンテナ(VContainer)とリアクティブ拡張(R3)、UniTaskを組み合わせた疎結合なUIシステムを構築。変更要求に強くテストが容易な画面開発フローを確立。
- 3Dマップシステム構築: UnityのTerrain機能をカスタマイズし、ゲーム固有の動的マップ読み込みと効率的な3Dオブジェクト表示システムを構築。
- 編成UI開発: ユーザーが直感的に操作でき、複雑な状態遷移を持つuGUIベースのチーム編成画面を実装。
- CI/CD自動化: GitHub Actionsを用いたアセットおよびクライアントビルドの自動パイプラインを構築。ボタン一つでQA・検証環境への配布を完了させ、ビルド待ち時間を排除。
技術的取り組みと成果
【変更に強く保守性の高いコードベースの実現】
VContainerによる適切な依存関係の注入(DI)とR3を用いたイベント駆動設計を徹底することで、UI層とドメインロジックの分離を徹底しました。これにより、仕様変更時に他モジュールへの副作用を完全に排除し、大規模チームでもスムーズに画面追加ができる体制を作りました。
モバイルゲーム シリアライザ最適化
プロジェクト概要
長期運用に伴いデータサイズが増大していた大規模モバイルゲームにおいて、通信データのシリアライズ・デシリアライズ処理の実行速度およびメモリアロケーションが深刻なボトルネックとなっていました。ユーザーのロード時間を短縮し、古い端末でのアプリ強制終了を防ぐための徹底的な最適化プロジェクト。
担当・実施内容
- ボトルネック調査: UnityのCPU・メモリプロファイリングを行い、デシリアライズ処理中において発生しているGC Alloc(ゴミメモリの発生)と無駄な文字列生成、 boxing(値型の参照型へのキャスト)を特定。
- カスタムシリアライザ開発: 汎用ライブラリによる処理を廃し、ゲーム内の通信データモデルに特化したアロケーションフリーのカスタムシリアライザを実装。バイト配列からの直接読み込みによる無駄な中間オブジェクト生成を抑制。
- バッファの再利用化: 読み込み時に使うバッファ(プール)を再利用する仕組みを導入し、GCの発生頻度を極限まで低減。
技術的成果
【定量的な成果】
この最適化の結果、デシリアライズ処理におけるメモリ使用量を約50%削減し、処理速度を約2倍に改善することに成功しました。モバイル端末における「戦闘開始前のロード時間」の劇的な短縮と、メモリ枯渇(OOM)による強制終了の発生率を大幅に低減させ、安定した長期運用に直接貢献しました。
IPタイトル モバイルゲーム最適化 & 移行
プロジェクト概要
運用中の大規模キャラクターIPモバイルゲームにおいて、ゲーム内の特定画面でフレームレートの低下やカクつきが発生していました。また、プラットフォームの要件に合わせるため、Unityエンジン自体の長距離バージョンアップ対応も同時に求められました。
担当内容
- Unityプロファイラ調査: Memory ProfilerおよびFrame Debuggerを使い、CPU側の処理詰まりおよびGPU側のDraw Call増加(描画負荷)の原因を解析。
- 描画とメモリの改善: 重複するマテリアルのアトラス化によるDraw Call削減、不要アセットのロード検知とメモリ解放処理の自動化、およびGC Allocを抑えるコードへの修正を実行。
- Unityバージョン移行: レガシーなUnityバージョンから新しいLTSバージョンへアップグレード。廃止されたAPIの書き換え、外部プラグインのビルドエラー修正、移行後の描画差異の検出と修正を担当。
モバイルゲーム開発サポート
プロジェクト概要・担当業務
運営中モバイルゲームのバトルシステムにおいて、ユーザー体験を向上させるための新機能を実装。
- 中断レジューム機能: ゲーム中にアプリがタスクキルされたり通信切断された場合でも、直前のバトル状態から正確に再開(レジューム)できるシステムを実装。バトルの完全な状態保存と軽量なデータ保存設計。
- バトルリプレイ機能: バトル中のプレイヤー操作、乱数シード、タイムスタンプをコンパクトに記録し、同様の乱数再現によってクライアント上で完全にバトルを再描画(リプレイ)する仕組みを実装。