SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
MMOの作り方
2018/09/05
twitter :@dev_mmow
Email:july1997@outlook.jp
Github:https://github.com/july1997
1
概要
MikuMikuOpenWorld
ユーザーが自由にモデルデータをアップロードでき、チャット機能のあるオンラインゲーム
他にもゲーム内でYotubeの動画が見れたり、楽器を演奏できたりする
ソースコード:https://github.com/july1997/MikuMikuOpenWorld
サイト:https://july1997.github.io/
2
項目 2
項目 3
3
制作の目的
4
● オンラインゲームはどのようにしたら作れるか
● ゲームサーバー側の処理は何をどうすればいいか?
● シェーダーを使えるようになりたい
クライアント編
5
開発環境
Visual Studio 2017
使用言語:C++
使用ライブラリなど
● Bullet 2.87
● Crypto++ 5.6.5
● DXライブラリ Ver 3.19
● EffekseerRuntime 1.30
対象プラットフォーム
WIndows、Android
6
ライブラリの紹介
描画処理
DXライブラリ
● DirectXのラッパー(最近はAndroidにも
対応)
● MMDモデル等に対応
● 更新頻度が高く初心者にオススメ
URL : http://dxlib.o.oo7.jp/index.html
物理演算
Bullet Physics
● オープンソースの物理演算エンジン
● ゲーム内では常に物理演算
● グラセフシリーズや色々な市販のゲーム
や、映画に使われたりしてる
URL : http://bulletphysics.org/wordpress/
7
ネットワーク関係の実装
● 描画の処理と別スレッドでメッセージを送受信(TCP)
● DXライブラリにある機能を利用
● std::shared_ptrを用いてスレッドセーフに
8
Server
Player1 Player2 Player3
TCP
基本サーバーはメッセージを受け取ったら
他のプレーヤーそのままに送信
ヘッダー
nbyte
ID
nbyte
データ(UTF-8)
nbyte
9
通信のイメージ
● 通信の種別とユーザーIDをつけて送信、ス
ペース区切り
● サーバーはメッセージをそのまま他のプ
レーヤー送信
● ユーザーIDから名前を対応付けて画面上
に表示
Server
Player1 Player2
RES 1 こんにちは!
Player1 : こんにちは!
RES 1 こんにちは!
プロトコル
シェーダーに関して
実装したシェーダー
● PBRレンダリング
● HDRポストエフェクト
● IBL
● ディファードレンダリング(実装中)
10
11
12
13
14
15
サーバー編
サーバーの種類
ゲームサーバー
● プレイヤーの座標などの同期、同期は近くにいる
プレイヤーのみ
● ログインやデータベース登録、暗号化の鍵交換な
ども全部自作
● Port 13939で常に通信待機
16
ファイルサーバー
● ファイル同期系の処理
● httpsプロトコルを採用(Simple-Web-Serverとい
うC++のサーバーを利用)
● ファイルのアップロードやダウンロード処理を受け
持つ
ゲームサーバー
使用ライブラリ
Boost.Asio
● Linuxで動かすためC++でTCPが直接扱えるBoostを使用
● リリースされているオンラインゲームのサーバーも似たような構成だった
● データベースへの接続はMySQL Connector/C++を使用
17
データベース
MySQL
● ローカルからのみアクセス可能に設定
● アカウント登録はemailとパスワードを登録する。
● パスワードは流出時を考え、 sha256二重で保存
● 文字コードはutf8_binなど照合順序をちゃんと考えよう
18
//ユーザー情報テーブル
CREATE TABLE user_data(
`user_id` int(10) unsigned NOT NULL,
`email` varchar(256) NOT NULL,
`password` varchar(256) NOT NULL,
`name` varchar(40) NOT NULL ,
PRIMARY KEY (`user_id`));
//モデル情報テーブル
CREATE TABLE model_data(
`model_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned,
`model_name` varchar(40),
`model_file_pash` varchar(256),
`model_file_name` varchar(256),
`model_type` TINYINT,
PRIMARY KEY (`model_id`));
//マップ情報テーブル
CREATE TABLE map_data(
`map_id` int(10) unsigned NOT NULL,
`model_id` int(10) unsigned NOT NULL,
`object_name` varchar(40),
`position` float(15,6),
`rotate` float(15,6),
`scale` float(15,6),
PRIMARY KEY (`map_id`));
テーブル構成
セキュリティ
暗号化
● 通信内容の暗号化に 128bit AES CFB を使用
● AES鍵交換時には 4096bit RSA を使用
● 通信開始時にサーバーから公開鍵をランダムで作成し送信。
● 署名を発行し、中間者攻撃以外には対応
Dos対策
● 一定時間でデータ量が規定値を超えるとコマンド無視
● さらに座標値をチェックし、不正な移動の場合は座標初期化
● ログイン時は3回間違えたら切断
19
データ同期
● 30フレームごとに方向
● 300フレームごとに座標を送信
● アニメーションは切り替わるタイミングで適
時送信
20
方向データ
キャラの方向ベクトル
座標データ
キャラの絶対座標と
キャラの姿勢(Y軸基準
の回転ベクトル)
アニメーション
情報
再生するアニメーショ
ン
サーバー
受け取ったタイミ
ングで他のプレイ
ヤーに送信
プレーヤーの同期
Send List
● サーバー側でどのプレーヤーが誰とを同期するのか決定
● 決定方法はプレーヤーとの距離など
● ログインやログアウトといった情報はクライアント側には通知しない(必要がない)
21
モデル同期
● ダウンロード、アップロード要求時にモデルIDを
指定、戻り値としてアクセスキー
● アクセスキーは10桁のランダムな文字列
● ファイルはファイルサーバーで管理
● 不正にダウンロード、アップロードさせないように
22
サーバークライアント ダウンロード要求
アクセスキー
ファイルサー
バー
アクセスキー
(httpsのクエリに指定)
モデルデータ
最後に
23
作ってみた感想
● 通信系の実装はデバッグなどが大変、暗号系も謎に復号化できないときがあり大変だった
● これからゲームを作りたい人はUnityを使ってください
● コーディングでは積極的にテストを書いていきたい
24
C++関係オススメの本
C++テンプレートテクニック
25
珠玉のプログラミング
人生を変える一冊。
テンプレートを使ったことない
人も、ある人も読める。
テンプレートの理解が根本から
変わる。
あとコーディングの参考にもな
る。
色々なアルゴリズムが乗ってい
る。
ソートやらなにやら
プログラムの最適化、高速化
にどうぞ
競プロにも使えそう。
いろいろ企画中
企画書
https://docs.google.com/document/d/1eWCV1wSc9MAAezyIpe_T0PENb9cEsaXoNRl1T6cTNkg
https://docs.google.com/document/d/1YluHhj0Xmj8OxZlZBPXV0GXkYc8NNSRWID16w_j8YtA
チームSlack : https://mikumikuopenworld.slack.com
26
終わり
27

Mais conteúdo relacionado

Mais procurados

Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
mihararyosuke
 

Mais procurados (20)

goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
 
Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Annotate Windows API !
Annotate Windows API !Annotate Windows API !
Annotate Windows API !
 
Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)Windows環境でのgitまとめ(2016.8)
Windows環境でのgitまとめ(2016.8)
 
Windows フォームアプリ 2022
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
Git for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオンGit for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオン
 
お気に入り拡張機能
お気に入り拡張機能お気に入り拡張機能
お気に入り拡張機能
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
Kivyでゲーム
KivyでゲームKivyでゲーム
Kivyでゲーム
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
Ma8 Caravan 大阪 rev1
Ma8 Caravan 大阪 rev1Ma8 Caravan 大阪 rev1
Ma8 Caravan 大阪 rev1
 
「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め「Kivyによるアプリケーション開発のすすめ」の勧め
「Kivyによるアプリケーション開発のすすめ」の勧め
 
Cloud Functionsの紹介
Cloud Functionsの紹介Cloud Functionsの紹介
Cloud Functionsの紹介
 
200208 osh-nishimoto-v2
200208 osh-nishimoto-v2200208 osh-nishimoto-v2
200208 osh-nishimoto-v2
 
VS Code新機能紹介 2020-2021
VS Code新機能紹介2020-2021VS Code新機能紹介2020-2021
VS Code新機能紹介 2020-2021
 

Semelhante a mmoの作り方

GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
Game Tools & Middleware Forum
 
Unreal Engine 4 勉強会 福岡 2014/05/25
Unreal Engine 4 勉強会 福岡 2014/05/25Unreal Engine 4 勉強会 福岡 2014/05/25
Unreal Engine 4 勉強会 福岡 2014/05/25
Daisuke Nakamura
 
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX  ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX  ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
日本マイクロソフト株式会社
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
sters
 

Semelhante a mmoの作り方 (20)

Windows10とRaspberryPiで MakerFaireTokyoに参加
Windows10とRaspberryPiでMakerFaireTokyoに参加Windows10とRaspberryPiでMakerFaireTokyoに参加
Windows10とRaspberryPiで MakerFaireTokyoに参加
 
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
 
20200429 algyan lt
20200429 algyan lt20200429 algyan lt
20200429 algyan lt
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
 
誰でも今日から実践できるUnity x PlayFab(Demoパート)
誰でも今日から実践できるUnity x PlayFab(Demoパート)誰でも今日から実践できるUnity x PlayFab(Demoパート)
誰でも今日から実践できるUnity x PlayFab(Demoパート)
 
20180822 ガチラボ vol.8
20180822 ガチラボ vol.820180822 ガチラボ vol.8
20180822 ガチラボ vol.8
 
20180829 ガチラボ vol.9
20180829 ガチラボ vol.920180829 ガチラボ vol.9
20180829 ガチラボ vol.9
 
Unreal Engine 4 勉強会 福岡 2014/05/25
Unreal Engine 4 勉強会 福岡 2014/05/25Unreal Engine 4 勉強会 福岡 2014/05/25
Unreal Engine 4 勉強会 福岡 2014/05/25
 
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX  ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX  ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
N01_多様に活用可能なマイクロソフトのゲーム関連技術や開発の DX ~高品質リアルタイムビジュアライズのリモート活用からリアルタイムコラボレーションま...
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
 
Bq sushi(BigQuery lessons learned)
Bq sushi(BigQuery lessons learned)Bq sushi(BigQuery lessons learned)
Bq sushi(BigQuery lessons learned)
 
Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !
 
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
 
UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座
 
20200523 冴えないソフトの育てかた
20200523 冴えないソフトの育てかた20200523 冴えないソフトの育てかた
20200523 冴えないソフトの育てかた
 
使い倒そう Visual Studio Code!!! ~ここからはじめる基本のキ~
使い倒そうVisual Studio Code!!! ~ここからはじめる基本のキ~使い倒そうVisual Studio Code!!! ~ここからはじめる基本のキ~
使い倒そう Visual Studio Code!!! ~ここからはじめる基本のキ~
 
Skype for Business + Bot + Graph API
Skype for Business + Bot + Graph APISkype for Business + Bot + Graph API
Skype for Business + Bot + Graph API
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
 

mmoの作り方