リアルタイム通信アクションゲーム60分クッキング!
〜~1時間でゼロから本格的MOゲームを完成させるライブコーディングデモ〜~
株式会社
本城・安田・山本
■会社紹介と講演者紹介
■株式会社モノビット
2005年年よりネットワークゲームの開発と運営を⾏行行っているゲーム制作会社です。
2013年年よりミドルウェア事業を開始。『モノビットエンジン』のブランドで、リアルタ
イム通信エンジンやMOエンジンの販売を⾏行行っています。
<本城 嘉太郎>
神戸出身。モノビット社代表取締役。元ゲームプログラマ&ネットワークエンジニア。CEDECで4年連続
でネットワークゲームの運営企画やサーバ技術の講演を行っています。そのうち2講演はトップクラスの
評価を頂き、翌年のCEDEC  AWARDの選考委員を務めました。
<安田 京人(Kyoto Yasuda)>
株式会社モノビット ミドルウェア事業部部長。IT系企業でSE兼PGとして2年勤務後、6年間大手デ
ベロッパーでコンシューマーゲームプログラマーとしてアクションゲームを中心に様々なジャンルのゲ
ーム開発に携わる。オンラインゲームの知識を身に付けるため株式会社モノビットに入社。現在はモ
ノビットエンジンの開発指揮とエヴァンジェリストとしても活動。
・講演者紹介
<山本>
モノビットミドルウェア事業部MOエンジン開発エンジニア。今回はコーディングデモのオペレーション
を担当。
■講演内容
本講演では『モノビットMOエンジン for	
  Unity』に含まれる様々なツー
ルを駆使して、実際に複数⼈人でプレイできるMOゲームを完成まで作り
上げるデモンストレーションを⾏行行います。
講演の最後には、作成されたゲームを実際に遊んでみて、問題なく通
信が⾏行行われ、ゲームとして成⽴立立しているか検証を⾏行行います。
■今回の講演について
<開発コンセプト>
Unityと同じように、ネットワークゲーム制作を⺠民主化したい
ネットワークゲームエンジンです!
<MOエンジン概要>
1,サーバとクライアントの両⽅方で動作するネットワークゲームエンジン
2,MO(マルチプレイヤーオンライン)やMOBA(マルチプレイヤーオンラインバトルアリーナ)系ゲームを
簡単に開発可能
3,クライアントはUnity上で動作。サーバはLinuxとWindowsに対応
4,Unityの開発環境で動作する各種GUIツールを搭載
5,⾼高度度なネットワークプログラミングなしで、本格的なネットワークゲームの開発が可能
6,インディーズや個⼈人開発者の⽅方は無料料で利利⽤用可能。
<近況>
1,本年年6⽉月の発表以来、すでに複数の商⽤用プロジェクトで実際に利利⽤用中。
2,積極的に機能の追加と拡張が⾏行行われており、先⽇日Ver1.1にバージョンアップ。Ver1.2も準備中。
■MOエンジンとは?(映像もご紹介)
■システム構成図
Unityクライアント
MOエンジン本体(DLL)
スクリプトデー
タ
Unity描画機能
リソース
モデル・モーション・サウンド,etc
リアルタイム通信エンジン(DLL)
バトルサーバ(Linux  or  Windows)
MOエンジン本体(DLL)
スクリプトデータ
リアルタイム通信エンジン(DLL)
マッチングサーバ
(SQLite & C++)
Webサーバ
DBサーバ
⾮非同期ゲーム制御
MOバトルシーン
バトル以外の画⾯面
画⾯面制御処理理
・マイページ
・合成
・ショップ
・etc…
http⾮非同期通信 独⾃自プロトコル
マッチング処理理
(DLL)
独⾃自プロトコル
MOエンジンアウトゲーム
■データと制御
MOエンジン本体
スクリプトエンジン
当たり判定ルーチン
通信処理理
キャラクター制御
地形配置制御
スクリプトデータ
キャラクター制御関連
敵配置情報
アクション
ゲーム進⾏行行制御
地形設定
モーション
エフェクト
モデル
ステージ制御関連 ゲーム制御関連
背景モデル
背景アタリ
アタリ設定 ※キャラクター制御はプレイヤーおよびエネミーで共通です。
勝敗判定
スコア制御
ゲーム進⾏行行制御
■スクリプトデータは各種ツールで作成
オブジェ配置情報AI
サウンド
イベント制御
静的オブジェクト制御
AI駆動エンジン
シーン制御
■MOエンジン本体は、クライアントとサーバで平行駆動  
・クライアント:Unity5
・サーバ側:Linux(Mono)もしくは、
Windows(.NetFramework2.0or3.5)
・データと制御を完全に分離し、データ駆動を実現  
・サーバとクライアントで同じ処理を実行可能に!  
■搭載ツール
キャラクタエディタ AIエディタ
ステージエディタ
各種マスタエディタ
ステージに関連するデータを編集、管理するツールです。
アタリ判定データや、敵の配置情報、リスポーン位置の情報を出力する事が出来ます。
敵や味方の行動に関連する条件分岐や遷移を作成、管理するツールです。
ビジュアル化されたブロックを接続することで、簡単にキャラクターアクションを
作成することができます。
敵の思考の条件分岐や、行動パターンを設定、管理するツールで
す。 キャラクターエディタと同じく、ビジュアル化されたブロックを接
続することで、 コーディングせずに条件分岐を作成可能です。
モデルデータなどのリソースデータを、MOエンジン内
に取り込んで使えるようにするツールです。
■完成形はこちら
<ゲームの概要>
1,プレイヤー同⼠士のPvPを実現。
2,モンスターを召喚して、敵プレイヤーへ攻撃させることが出来る
3,1回ダウンすると、モンスター召喚の権利利が1回⼿手に⼊入る
4,1バトル2分間
5,ダウンした回数が多い⽅方が負け
<その他>
1,マッチング処理理は標準サンプルを流流⽤用
2,モンスター召喚UIはスキル発動UIを流流⽤用
 
	
  
ライブコーディングスタート!
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
  3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
  3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
  3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■ライブコーディング
Step1   開発の前準備
Step2 ステージの設定
1,ステージ関連データファイルの⽣生成
2,リスポーン位置の指定
<デモ>
3,ステージに対するコリジョン(衝突判定⽤用データ)の設定
<デモ>
Step3 アクション制御スクリプト作成
  1,ビジュアルエディタの基本(initを作る)
制御の流流れについて
ローカルメモリと変数への代⼊入
2,条件分岐(root解説)
システム定数について
3,移動にアニメーションを連動させる
Mecanimのアニメーションデータの説明
Mecanimとの連動(input_̲select→move_̲start)
4,攻撃させる
サブコリジョンの発⽣生(input_̲select→attack_̲start)  
5,ダメージを受ける
他のスクリプトのパラメータの参照(damage_̲start)  
<デモ>
Step4 敵ユニット登録
1,ユニットデータの新規登録
2,配置の設定
3,AIの記述
アクション制御スクリプトとAIスクリプト
割り込みによる連動
<デモ>
Step5 経路路探索索の設定
1,InnerProbeとOuterProbe
<デモ>
Step6 ゲームルールの編集
1,制限時間とキルカウントの設定
Step7 UIの設定(省省略略)
Step8 召喚の設定
  1,NPC召還スキル作成
<完成デモ!!>
■完成したゲームについて
■完成したゲームの特徴
・敵も含めてキャラクター同士が完全に同期しており、ゲーム内容の同期ズレもゼロ
・サーバ・クライアント型設計のため、ホスト端末が不要でチートも不可能
・極少パケット同期技術で、128kbpsの通信制限状態でもプレイ可能
・万が一切断されても、クライアントのみでゲームを最後まで進行可能。再接続も可能。
・安価で実績のあるLinuxサーバで動作可能
■今回の講演の開発手順と完成したゲームについて  
・モノビットエンジン公式サイトで、全ての手順とデータを本日公開  
・過去のセミナーの動画も公開中です。  
http://www.monobitengine.com/  
  
   どうもありがとうございました!  

【CEDEC2015】リアルタイム通信アクションゲーム60分クッキング!〜1時間でゼロから本格的MOゲームを完成させるライブコーディングデモ〜