Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「魔法少女まどか☆マギカ Magia Exedra」の多様なバトルの開発を柔軟かつ効率的に実現...

「魔法少女まどか☆マギカ Magia Exedra」の多様なバトルの開発を柔軟かつ効率的に実現するためのPure C#とUnityの分離について

GREE Tech Conference 2025で発表された資料です。
https://techcon.gree.jp/2025/session/TrackC-3

Avatar for gree_tech

gree_tech PRO

October 17, 2025
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 目次・アジェンダ • まどドラの紹介 • まどドラのバトルの紹介、要件 • バトル設計の実装詳細 ◦ Logic ◦

    View ◦ Connection • Logic View Connection の統合例 • バトル設計のまとめ、今後の展望 4
  2. Logicの中心としてGameDirectorBaseをOverrideして、別々に存在 Logic の設計 16 GameDirectorBase SoloGameDirector ScoreAttack GD Quest GD

    PvP GD SimulationBattle GD Battleの種類ごとにGameDirectorを作成し、Battle毎の処理を実装 GD: GameDireector
  3. Logic の設計 18 基底 勝敗判定クラス ScoreAttack 勝敗判定 Quest 勝敗判定 PvP

    勝敗判定 GameDirectorBase ScoreAttack GD Quest GD PvP GD 処理の一部は別のクラスに委譲して、バトルごとに実装 15ラウンドで敗北 メインターゲット撃破で勝利 100ラウンドで敗北 メインターゲット撃破で勝利 15ラウンドで敗北 味方全員死亡で敗北 敵全員撃破で勝利
  4. View / Unityに依存しないため、バトルの結果を高速で計算可能 View分離のメリット ▪ 初期化時の背景や、3Dモデルの生成を省略 ▪ スキル実行時のアニメーションを省略 ▪ Unityのオブジェクト生成

    / 操作の負荷を無視 Logic のメリット2 21 Logicのみでバトルを高速実行するツールを作成し、 レベルデザインを効率的に行うことが可能となった
  5. 複数の機能を1つの Sequence にまとめて演出ごとに実装 View の設計 27 勝利 Sequence UI 非表示

    BGM の切り替え 演出対象外の魔法少女を非表示 勝利アニメーションを再生 Sequenceの1例: ・・・
  6. Sequence はそれぞれインターフェースで定義されており、バトル種類や内容 などによって個別で実装 View の設計 28 リザルト表示 Sequence の インターフェース

    通常リザルト リザルトなし (フェードアウト) ワルプルギスの夜 バトル 専用リザルト ©2024 Magica Quartet/Aniplex,Magia Exedra Project
  7. Sequence の再生機構として、ステートマシンを利用 Sequence の管理 29 勝利 Sequence 初期化 Sequence スキル発動

    Sequence 勝利 State 初期化 State スキル発動 State SequenceとStateを対応付け
  8. View のメリット1 バトルの種類に応じて、必要な演出のみシーケンスを置き換えることが可能 32 スキル発動演出 Sequence 初期化 Sequence 勝利演出 Sequence

    通常開始演出 通常バトル レイドバトル レイドバトル開始演出 通常勝利演出 レイドバトル勝利演出 開始演出 Sequence
  9. View のメリット2 特定のバトルのみ、特殊な専用 Sequence に置き換えることが可能 33 スキル発動演出 Sequence 初期化 Sequence

    勝利演出 Sequence 通常開始演出 通常バトル 通常勝利演出 開始演出 Sequence 特殊勝利演出 1部のバトルのみ
  10. まどドラでは、現在30 種類以上の Sequence を用いて演出を再生 例: 現状使われている Sequence 35 ▪ バトル開始演出

    ▪ ターン開始演出 ▪ 待機 / 必殺技入力待機 ▪ スキル演出 ▪ 勝利演出 ▪ 敗北演出 ▪ リザルト画面表示 ▪ バトル初期化 ▪ 復帰 ▪ オートモード設定 ▪ スキル発動リクエスト
  11. Logic と View を適切につなげる部分 ▪ View のプレイヤー操作を Logic に送信 ▪

    Logic の計算結果を View に送信 Connection 37 Logic と View をお互いに依存させず、仲介する中間層
  12. • 情報は Command   というデータオブジェクトに格納 • Logic は Command を C#

    event を通して Connection に送信 ◦ event により、Logic は Connection を参照せず、独立性を担保 Connection の設計:Command 39 Logic View Connection event OnNewCommand
  13. • 情報は Command   というデータオブジェクトに格納 • Logic は Command を C#

    event を通して Connection に送信 ◦ event により、Logic は Connection を参照せず、独立性を担保 • Connection が View の Command 受け取り関数 を呼び出し Connection の設計:Command 40 Logic View Connection event OnNewCommand
  14. Command   と Connection を通して、Logic は View を参照せずに 情報を送信可能 同じく、View も

    Logic を参照せずに情報を送信可能 Connection の設計:Command 41 Logic View Connection event OnNewCommand event OnNewCommand
  15. View は Logic にスキルを実行してもらいたい → View は「スキル発動リクエスト Command」を作成して、Connection を 介して

    Logic に送信 Connection の設計:Command の例 42 Logic View Connection スキル発動リクエスト Command
  16. Logic は Command の送受信先に問わず処理を行うことが可能 → Connection・Logic に代わるクラスを用いても、情報の送受信が可能 → Command を送る軽量な機構を作り、Logic

    を低オーバーヘッドで動作可能 Connection のメリット1:Logic の単独動作 47 低オーバーヘッドのなにか 低オーバーヘッドのインスタンス Logic
  17. 同じく、仮の結果 Command を View に送る機構を作って、通常とは 異なる順番で演出を再生可能 プロローグとエピローグバトルではこちらの手法を活用して、演出を再生 Connection のメリット1:View の単独動作

    49 View 特別な演出のCommandを出力するインスタンス エピローグバトルで、バトル開始時 自動で必殺技が発動される ©2024 Magica Quartet/Aniplex,Magia Exedra Project
  18. Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 ユーザー端末 Connection

    のメリット2:オンラインバトルの実現 51 Logic View Connection  
  19. Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 Connection のメリット2:オンラインバトルの実現

    53 ユーザー端末 C# サーバー Logic View Logic Connection   View Connection   ネット通信 →バトルの Logic をサーバー上に置いて、オンラインバトルにすることが可能
  20. 課題、今後の展望 直面した、している問題 • 実装者によって Logic に Unity のコードが誤って混入する可能性がある • Logic

    は Unity 向けに実装された機能を直接使用できない システムの活用例 • Logicをサーバー上に置くことによるオンラインバトル化 • バックアップデータを用いた「一手戻す」デバッグツールの作成 68