Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「魔法少女まどか☆マギカ Magia Exedra」の多様なバトルの開発を柔軟かつ効率的に実現...
Search
gree_tech
PRO
October 17, 2025
Technology
0
16
「魔法少女まどか☆マギカ Magia Exedra」の多様なバトルの開発を柔軟かつ効率的に実現するためのPure C#とUnityの分離について
GREE Tech Conference 2025で発表された資料です。
https://techcon.gree.jp/2025/session/TrackC-3
gree_tech
PRO
October 17, 2025
Tweet
Share
More Decks by gree_tech
See All by gree_tech
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
1.9k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
31
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
24
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
0
26
あうもんと学ぶGenAIOps
gree_tech
PRO
0
18
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
25
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
41
コンテンツモデレーションにおける適切な監査範囲の考察
gree_tech
PRO
0
17
新サービス立ち上げの裏側 - QUANT for Shopsで実践した開発から運用まで
gree_tech
PRO
0
18
Other Decks in Technology
See All in Technology
OAuthからOIDCへ ― 認可の仕組みが認証に拡張されるまで
yamatai1212
0
130
Digitization部 紹介資料
sansan33
PRO
1
5.5k
AgentCon Accra: Ctrl + Alt + Assist: AI Agents Edition
bethany
0
110
20251007: What happens when multi-agent systems become larger? (CyberAgent, Inc)
ornew
1
300
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing Hiroshima 2025 Edition
tomzoh
0
140
このままAIが発展するだけでAGI達成可能な理由
frievea
0
110
能登半島地震において デジタルができたこと・できなかったこと
ditccsugii
0
220
ユーザーの声とAI検証で進める、プロダクトディスカバリー
sansantech
PRO
1
140
Introdução a Service Mesh usando o Istio
aeciopires
0
150
物体検出モデルでシイタケの収穫時期を自動判定してみた。 #devio2025
lamaglama39
0
160
スタートアップにおけるこれからの「データ整備」
shomaekawa
2
480
「使い方教えて」「事例教えて」じゃもう遅い! Microsoft 365 Copilot を触り倒そう!
taichinakamura
0
390
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Designing for Performance
lara
610
69k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Speed Design
sergeychernyshev
32
1.2k
The Invisible Side of Design
smashingmag
302
51k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Transcript
「魔法少女まどか☆マギカ Magia Exedra」の 多様なバトルの開発を柔軟かつ効率的に実現 するためのPure C#とUnityの分離について 株式会社 WFS エンジニア 菊地
陽樹 / 張 祐禎
2024年4月 新卒でグリー株式会社(現:グリー ホールディングス)に入社 配属されたプロジェクトは開発が終了となり、同 年9月より、まどドラの開発に携わる。 まどドラのリリースを経て、現在はヘブバンの開 発に携わる。 菊地 陽樹 2
株式会社 WFS クライアントエンジニア
張 祐禎 2020年4月 新卒でグリー株式会社(現:グリー ホールディングス)に入社 約 1 年半の間、シノアリスのクライアントエンジ ニアとして開発に携わる その後、まどドラの開発に携わって現在に至る
株式会社 WFS クライアントエンジニア 3
目次・アジェンダ • まどドラの紹介 • まどドラのバトルの紹介、要件 • バトル設計の実装詳細 ◦ Logic ◦
View ◦ Connection • Logic View Connection の統合例 • バトル設計のまとめ、今後の展望 4
まどドラの紹介 アニメ『魔法少女まどか☆マギカ』及び、関連作品を原作としたゲーム 原作に登場する魔法少女や魔女、世界を忠実に再現 5 ©2024 Magica Quartet/Aniplex,Magia Exedra Project
まどドラのバトル 5人の魔法少女を編成して敵と戦うターン制コマンドバトル 6 ©2024 Magica Quartet/Aniplex,Magia Exedra Project
5人の魔法少女を編成して敵と戦うターン制コマンドバトル バトルの設計要件 ▪ 『魔法少女まどか☆マギカ』の膨大な世界観を再現するため、 ◦ 多様なバトル形式(ScoreAttack、PvP など)に対応可能 ◦ 特殊バトルにも対応可能 ◦
バトルの種類によって、柔軟にロジックや演出を変更可能 ◦ リリース後も容易に拡張が可能 まどドラのバトルの要件 7
バトルの要件を満たす設計 数と量を柔軟に設計するために、LogicとViewを分離 8
バトルの要件を満たす設計 数と量を柔軟に設計するために、LogicとViewを分離 1. Logic: バトルの「進行や計算、データの管理」をPureC#で実装 9 Logic
バトルの要件を満たす設計 数と量を柔軟に設計するために、LogicとViewを分離 1. Logic: バトルの「進行や計算、データの管理」をPureC#で実装 2. View: Logicの結果をUnityで描画 10 Logic
View
バトルの要件を満たす設計 数と量を柔軟に設計するために、LogicとViewを分離 1. Logic: バトルの「進行や計算、データの管理」をPureC#で実装 2. View: Logicの結果をUnityで描画 3. Connection:
LogicとViewを接続 11 Logic Connection View
バトルの要件を満たす設計 数と量を柔軟に設計するために、LogicとViewを分離 1. Logic: バトルの「進行や計算、データの管理」をPureC#で実装 2. View: Logicの結果をUnityで描画 3. Connection:
LogicとViewを接続 12 Logic Connection View 本発表では、各機能を1つずつ紹介
1. Logic 13 Logic Connection View
バトルの「進行・計算・データの管理」を全て担う部分 ▪ ターンの進行 ▪ 味方や敵のHP及びステータス管理 ▪ スキルの計算 ▪ ゲームオーバー処理 ▪
etc . . . Logic 14 Viewに依存せず、Unity関連のコードを参照しないPureC#のみで構成
GameDirectorがバトル全体の、「データ」及び「処理」を管理 Logic の設計 15 GameDirector 敵/味方のステータス ターン管理 Viewへ情報を送信 Viewから情報を受信 中断
/ 復帰 勝敗判定
Logicの中心としてGameDirectorBaseをOverrideして、別々に存在 Logic の設計 16 GameDirectorBase SoloGameDirector ScoreAttack GD Quest GD
PvP GD SimulationBattle GD Battleの種類ごとにGameDirectorを作成し、Battle毎の処理を実装 GD: GameDireector
Logic の設計 17 処理の一部は別のクラスに委譲して、バトルごとに実装 基底 勝敗判定クラス ScoreAttack 勝敗判定 Quest 勝敗判定
PvP 勝敗判定 GameDirectorBase ScoreAttack GD Quest GD PvP GD
Logic の設計 18 基底 勝敗判定クラス ScoreAttack 勝敗判定 Quest 勝敗判定 PvP
勝敗判定 GameDirectorBase ScoreAttack GD Quest GD PvP GD 処理の一部は別のクラスに委譲して、バトルごとに実装 15ラウンドで敗北 メインターゲット撃破で勝利 100ラウンドで敗北 メインターゲット撃破で勝利 15ラウンドで敗北 味方全員死亡で敗北 敵全員撃破で勝利
Logic のメリット 19
新しい実装の追加のみで、新規バトルの追加が可能 Logic のメリット1 20 GameDirectorBase 新規追加用 GD 基底 勝敗判定クラス 新規追加用
勝敗判定 継承先のクラスを作成し、変更ある機能のみオーバーライド
View / Unityに依存しないため、バトルの結果を高速で計算可能 View分離のメリット ▪ 初期化時の背景や、3Dモデルの生成を省略 ▪ スキル実行時のアニメーションを省略 ▪ Unityのオブジェクト生成
/ 操作の負荷を無視 Logic のメリット2 21 Logicのみでバトルを高速実行するツールを作成し、 レベルデザインを効率的に行うことが可能となった
データと処理を含むGameDirectorを、シリアライズして保存可能 ▪ バトルの中断・復帰が可能 ◦ GameDirectorに、データと処理がまとまっているため、一括でのシリアライズが容易 ◦ データと共に処理もシリアライズ化されているため、復帰が容易 ▪ バトルの特定の状態を復元可能 ◦
バトルを n 手前に戻すなどの機能を実装可能 Logic のメリット3 22 GameDirector Json Serialize Deserialize データ 処理 データ 処理
View 23 Logic Connection View
バトルの「表示や演出、Unityオブジェクトの管理」を全て担う部分 ▪ UIの表示切り替え ▪ スキルや必殺技の演出 ▪ リザルト表示 ▪ 3Dモデルや背景の表示 ▪
etc . . . View 24 Logic で計算された値を、Unityの機能を用いて表示
原作の世界観を再現するために、 ▪ バトルの種類や状況に応じて、演出を個別に変更可能であること ▪ 新規バトルや演出の追加に対して、容易に拡張可能であること View の設計要件 25 通常バトル勝利演出 特定のバトル勝利演出
©2024 Magica Quartet/Aniplex,Magia Exedra Project
原作の世界観を再現するために、 ▪ バトルの種類や状況に応じて、演出を個別に変更可能であること ▪ 新規バトルや演出の追加に対して、容易に拡張可能であること View の設計要件 26 特定の演出のみを、状況に応じて差し替えが可能な設計
複数の機能を1つの Sequence にまとめて演出ごとに実装 View の設計 27 勝利 Sequence UI 非表示
BGM の切り替え 演出対象外の魔法少女を非表示 勝利アニメーションを再生 Sequenceの1例: ・・・
Sequence はそれぞれインターフェースで定義されており、バトル種類や内容 などによって個別で実装 View の設計 28 リザルト表示 Sequence の インターフェース
通常リザルト リザルトなし (フェードアウト) ワルプルギスの夜 バトル 専用リザルト ©2024 Magica Quartet/Aniplex,Magia Exedra Project
Sequence の再生機構として、ステートマシンを利用 Sequence の管理 29 勝利 Sequence 初期化 Sequence スキル発動
Sequence 勝利 State 初期化 State スキル発動 State SequenceとStateを対応付け
Sequence の再生機構として、ステートマシンを利用 Sequence の管理 30 Stateの遷移に従って、Sequenceが1つずつ順番に実行
View のメリット 31
View のメリット1 バトルの種類に応じて、必要な演出のみシーケンスを置き換えることが可能 32 スキル発動演出 Sequence 初期化 Sequence 勝利演出 Sequence
通常開始演出 通常バトル レイドバトル レイドバトル開始演出 通常勝利演出 レイドバトル勝利演出 開始演出 Sequence
View のメリット2 特定のバトルのみ、特殊な専用 Sequence に置き換えることが可能 33 スキル発動演出 Sequence 初期化 Sequence
勝利演出 Sequence 通常開始演出 通常バトル 通常勝利演出 開始演出 Sequence 特殊勝利演出 1部のバトルのみ
View のメリット2 通常勝利演出: 敵の死亡演出後に味方の勝利モーション 特殊勝利演出: 敵が必殺技を発動してバトルが終了 34 通常勝利演出 特殊勝利演出 ©2024
Magica Quartet/Aniplex,Magia Exedra Project
まどドラでは、現在30 種類以上の Sequence を用いて演出を再生 例: 現状使われている Sequence 35 ▪ バトル開始演出
▪ ターン開始演出 ▪ 待機 / 必殺技入力待機 ▪ スキル演出 ▪ 勝利演出 ▪ 敗北演出 ▪ リザルト画面表示 ▪ バトル初期化 ▪ 復帰 ▪ オートモード設定 ▪ スキル発動リクエスト
Connection 36 Logic Connection View
Logic と View を適切につなげる部分 ▪ View のプレイヤー操作を Logic に送信 ▪
Logic の計算結果を View に送信 Connection 37 Logic と View をお互いに依存させず、仲介する中間層
• 情報は Command というデータオブジェクトに格納 Connection の設計:Command 38 Logic View Connection
event OnNewCommand Command
• 情報は Command というデータオブジェクトに格納 • Logic は Command を C#
event を通して Connection に送信 ◦ event により、Logic は Connection を参照せず、独立性を担保 Connection の設計:Command 39 Logic View Connection event OnNewCommand
• 情報は Command というデータオブジェクトに格納 • Logic は Command を C#
event を通して Connection に送信 ◦ event により、Logic は Connection を参照せず、独立性を担保 • Connection が View の Command 受け取り関数 を呼び出し Connection の設計:Command 40 Logic View Connection event OnNewCommand
Command と Connection を通して、Logic は View を参照せずに 情報を送信可能 同じく、View も
Logic を参照せずに情報を送信可能 Connection の設計:Command 41 Logic View Connection event OnNewCommand event OnNewCommand
View は Logic にスキルを実行してもらいたい → View は「スキル発動リクエスト Command」を作成して、Connection を 介して
Logic に送信 Connection の設計:Command の例 42 Logic View Connection スキル発動リクエスト Command
Logic がスキル実行結果を送信したい → Logic は「スキル実行結果 Command」を作成して、Connection を介して View に送信 Connection
の設計:Command の例 43 Logic View Connection スキル発動結果 Command
Connection のメリット 44
Logic は Command の送受信先に問わず処理を行うことが可能 Connection のメリット1:Logic の単独動作 45 なにか Logic
View Connection
Logic は Command の送受信先に問わず処理を行うことが可能 → Connection・Logic に代わるクラスを用いても、情報の送受信が可能 Connection のメリット1:Logic の単独動作
46 Connection・View 以外のインスタンス Logic
Logic は Command の送受信先に問わず処理を行うことが可能 → Connection・Logic に代わるクラスを用いても、情報の送受信が可能 → Command を送る軽量な機構を作り、Logic
を低オーバーヘッドで動作可能 Connection のメリット1:Logic の単独動作 47 低オーバーヘッドのなにか 低オーバーヘッドのインスタンス Logic
同じく、仮の結果 Command を View に送る機構を作って、通常とは 異なる順番で演出を再生可能 Connection のメリット1:View の単独動作 48
View 特別な演出のCommandを出力するインスタンス
同じく、仮の結果 Command を View に送る機構を作って、通常とは 異なる順番で演出を再生可能 プロローグとエピローグバトルではこちらの手法を活用して、演出を再生 Connection のメリット1:View の単独動作
49 View 特別な演出のCommandを出力するインスタンス エピローグバトルで、バトル開始時 自動で必殺技が発動される ©2024 Magica Quartet/Aniplex,Magia Exedra Project
Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 Connection のメリット2:オンラインバトルの実現
50
Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 ユーザー端末 Connection
のメリット2:オンラインバトルの実現 51 Logic View Connection
Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 Connection のメリット2:オンラインバトルの実現
52 ユーザー端末 Logic View Logic Connection View Connection
Connection を 2 分割し、Logic と Logic Connection をサーバーに配置 Connection のメリット2:オンラインバトルの実現
53 ユーザー端末 C# サーバー Logic View Logic Connection View Connection ネット通信 →バトルの Logic をサーバー上に置いて、オンラインバトルにすることが可能
Logic, View, Connection の統合例 54 Logic Connection View
Logic, View, Connection の統合例:スキル発動 ユーザーがスキルボタンを押下→スキルの実行処理→スキル演出再生 の一連の処理が、本システムでどのように動いているかの紹介 55
スキル発動 プレイヤーがスキル発動ボタン UI を押下 56 ©2024 Magica Quartet/Aniplex,Magia Exedra Project
View:スキル発動リクエスト Command 送信 プレイヤーの操作を受け、スキル発動リクエストCommand送信 57
58 3 Command 送信
Logic:スキル発動処理 スキル発動Commandを受け、Logic がスキル発動処理を実行 59 3 Command 送信
60 8 Command 送信
View:スキル演出再生 スキル発動結果 Command を受け、View がスキル演出を再生 61 8 Command 送信 ©2024
Magica Quartet/Aniplex,Magia Exedra Project
スキル発動:全体像 62
まとめ、今後の展望 63
バトルの設計要件 ▪ ScoreAttack、PvP など多様な種類と数に対応 ◦ バトル結果の高速計算により、「パラメータ調整→結果確認」イテレーション が早まり、レベルデザインが高速化 まとめ 64
バトルの設計要件 ▪ ScoreAttack、PvP など多様な種類と数に対応 ▪ バトルの種類によって、柔軟にロジックや演出を変更可能 ◦ Logic は GameDirector
の新規作成、View はシーケンスの新規実装で 柔軟に変更可能 まとめ 65
バトルの設計要件 ▪ ScoreAttack、PvP など多様な種類と数に対応 ▪ バトルの種類によって、柔軟にロジックや演出を変更可能 ▪ 特殊バトルにも対応可能 ◦ シーケンスの具象クラス差し替えで、演出変更可能
まとめ 66
バトルの設計要件 ▪ ScoreAttack、PvP など多様な種類と数に対応 ▪ バトルの種類によって、柔軟にロジックや演出を変更可能 ▪ 特殊バトルにも対応可能 ▪ リリース後も容易に拡張が可能
◦ Logic の GameDirector と View のシーケンスは新規実装のみで対応可能のた め、既存処理に影響なし まとめ 67
課題、今後の展望 直面した、している問題 • 実装者によって Logic に Unity のコードが誤って混入する可能性がある • Logic
は Unity 向けに実装された機能を直接使用できない システムの活用例 • Logicをサーバー上に置くことによるオンラインバトル化 • バックアップデータを用いた「一手戻す」デバッグツールの作成 68
ご清聴ありがとうございました 69
None