Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unity道場京都スペシャル3 モノビットエンジンでマルチプレイゲーム開発 ~はじめの一歩~

1,552 views

Published on

2018年11月24日 Unity道場京都スペシャル3にて行われましたイベントにて、モノビット社の小畑がモノビットエンジンでマルチプレイゲームを開発するための導入部分を実演形式で解説した際のスライドです。

Published in: Engineering
  • Be the first to comment

Unity道場京都スペシャル3 モノビットエンジンでマルチプレイゲーム開発 ~はじめの一歩~

  1. 1. モノビットエンジンで マルチプレイゲーム開発 ~ はじめの一歩 ~
  2. 2. 自己紹介 小畑 篤史 神戸本社マネージャー兼ディレクター ・VR/ARコンテンツの開発ディレクター ・モノビットエンジンエヴァジェリスト ・著書:Unity5 ゲーム開発レシピ(共著)
  3. 3. 会社紹介 1.ゲーム開発事業 スマートフォンやブラウザ、PlayStation4向けのゲームコンテンツの一括開発、 およびゲームサーバの開発を行っています。 2.ミドルウェア事業 ※ リアルタイム通信ミドルウェア『モノビットエンジン』の 開発・運営・サポートを行っています。 3.VR/AR事業 ゲームや非ゲームのVR/ARコンテンツの開発を行っています。 本社は神戸三宮 スタッフ募集中です!
  4. 4. 開発実績 豊富なゲーム開発実績を活かしスマートフォン向けゲームを中心に、ブラウザベースか らネイティブアプリの企画・開発・運営までトータルでサポートします。 【VR開発】 【ブラウザゲーム開発】 【スマホゲーム開発】
  5. 5. モノビットエンジンとは Monobit Revolution Server リアルタイム通信エンジンに革命を起こす高速かつ高性能な通信ライブラリ Monobit Unity Networking 2.0 クライアントプログラムだけでマルチプレイを簡単に実装できる通信ミドルウェア VR Voice Chat ver.2.0 手軽に実装できるUnity向けVRボイスチャットミドルウェア ざっくり言うと マルチプレイ用のミドルウェアです
  6. 6. 採用事例 © Virtual Cast, Inc. All rights reserved.
  7. 7. 採用事例 © SEGA https://www.youtube.com/watch?v=n_S7oWkO56s
  8. 8. 採用事例 © Virtual Cast, Inc. All rights reserved. https://youtu.be/quqJPf6Ypt8
  9. 9. モノビットエンジンとは Monobit Revolution Server リアルタイム通信エンジンに革命を起こす高速かつ高性能な通信ライブラリ Monobit Unity Networking 2.0 クライアントプログラムだけでマルチプレイを簡単に実装できる通信ミドルウェア VR Voice Chat ver.2.0 手軽に実装できるUnity向けVRボイスチャットミドルウェア ざっくり言うと マルチプレイ用のミドルウェアです
  10. 10. MUNの仕組み クライアントA サーバ クライアントB 入力、移動、音声など 入力、移動、音声など
  11. 11. MUNの仕組み リアルタイム通信を行うゲームに必要な機能を網羅 すべての通信ロジックを、クライアント側のみで実装可能 サーバサイドの構築なしでリアルタイム通信が可能 ロビー、マッチメイキング ルームの作成、参加 オブジェクト同期、イベント同期など
  12. 12. MUN実演
  13. 13. 実演(デモ)の流れ 今回はこのような簡単なマルチプレイのデモを作成しつつ下記について解説します ルーム入室 キャラクター同期 タイミング同期
  14. 14. MUNアセット https://www.monobitengine.com/mun/からUnityPackageをダウンロードしインポートします。
  15. 15. キャラクターアセットのダウンロード アセットストアよりキャラクターをダウンロード/インポートします。
  16. 16. インポートしたアセットを単体で動作確認 ・床を作成します。 ・キャラプレハブをシーンに配置します。 ・カメラを任意の視点に変更します。 ・実行確認します(キャラを動かします)。
  17. 17. ルーム周り流れ サーバ接続 ロビー接続 ルーム作成 or 入室 キャラクター生成 今回はここまでを 自動で行います
  18. 18. ルーム周り流れ サーバ接続 ロビー接続 ルーム作成 or 入室 キャラクター生成
  19. 19. ルーム入室設定 サーバ接続 ・NetworkManagerというオブジェクトを作成し、MonobitViewコンポーネントを追加します。 ・ルーム入室用のスクリプト「MunTest」を作成し、NetworkManagerに追加します。
  20. 20. ルーム入室設定 サーバ接続 ・MunTestスクリプトでMUNを使用するために「using MonobitEngine;」を追加し、 MonobitEngine.MonoBehaviour を継承します。 ・サーバ接続とロビー接続を行うためのコードを追記します。
  21. 21. ルーム入室設定 サーバ接続 ・ロビー接続時のコールバック「OnJoinedLobby」を使用して実行確認します。
  22. 22. ルーム周り流れ サーバ接続 ロビー接続 ルーム作成 or 入室 キャラクター生成
  23. 23. ルーム入室設定 ルーム設定 ・OnJoinedLobbyにルーム設定とルーム入室のコードを追加します。 MonobitNetwork.JoinOrCreateRoomは指定のルームがあれば入室しなければ作成します。
  24. 24. ルーム入室設定 ルーム設定 ・ルーム入室時のコールバック「OnJoinedRoom」を使用して実行確認します。
  25. 25. ルーム周り流れ サーバ接続 ロビー接続 ルーム作成 or 入室 キャラクター生成
  26. 26. ルーム入室設定 プレイヤー設定 ・シーン上のプレイヤーにMonobitViewを追加します。 ・Resourcesフォルダを作成し、シーン上のプレイヤーをD&Dしてプレハブ化します。 ・シーン上のプレイヤーは削除します。
  27. 27. ルーム入室設定 プレイヤー設定 ・プレイヤーを生成するためOnJoinedRoomに「MonobitNetwork.Instantiate」を追加します。 第一引数に先ほどプレハブ化したオブジェクト名を入れます。 ・ビルドして実行確認します。 クライアントを複数立ち上げることでマルチプレイの確認ができます。
  28. 28. 所有権のあるキャラクターだけ動かす A B A B キー入力で移動する 所有権のある場合だけ キー入力で移動する 所有権のあるキャラ所有権のあるキャラ 所有権のないキャラ も動いてしまう 所有権のないキャラ は動かない
  29. 29. 所有権の付与されるタイミング サーバ接続 ロビー接続 ルーム作成 or 入室 キャラクター生成ここで所有権が付与
  30. 30. ルーム入室設定 プレイヤー設定 ・自分の所有権にあるキャラクターだけ動くようにするためにスクリプトを変更します。 キャラクターについている「SimpleCharacterControl」スクリプトを開き、下記のように変更します。 「monobitView.isMine」で自分の所有権のあるオブジェクトかチェックします。 ・実行確認します。 自分の生成したキャラクターだけ動くようになります。
  31. 31. 動きを同期する
  32. 32. Monobit Transform View 位置、回転を同期するコンポーネント ここの値を同期する 位置や回転情報を同期するか、 線形補完するかなど設定する
  33. 33. キャラクター同期 位置、回転情報 ・プレイヤーの位置や回転情報を同期させるため、キャラクタープレハブに「TransformView」を追加します。 ・MonobitViewコンポーネントのObservedComponentRegistrationListの「Add Observerd~」を押し、 先ほど追加した「TransformView」をD&DしてMonobitViewの監視対象に追加します。 ・実行確認します。 移動時の位置や回転が同期されます。ただしアニメーションは同期されていません。
  34. 34. Monobit Animator View アニメーションを同期するコンポーネント ここのパラメータを同期する ※Triggerは非対応
  35. 35. キャラクター同期 アニメーション情報 ・プレイヤーのアニメーションを同期させるため、キャラクタープレハブに「AnimatorView」を追加します。 ・TransformViewと同様にMonobitViewのObservedComponentRegistrationListに、 先ほど追加した「AnimatorView」をD&DしてMonobitViewの監視対象に追加します。 ・実行確認します。 移動時のアニメーションが同期されます。
  36. 36. タイミングの同期
  37. 37. タイミングの同期 ・プレイヤーがEnterキーを押したときに爆発エフェクトを発生させます。 まずは単体で動くように準備します。 爆発エフェクトをアセットストアからダウンロード/インポートします。
  38. 38. タイミングの同期 ・爆発を発生させるためのスクリプト「PlayerBomb」を作成し、プレイヤープレハブにアタッチします。 ・下記のようにコードを記述し爆発エフェクトを単体で発生させます。 ・スクリプトのインスペクターのefxに、先ほどインポートした爆発エフェクトのプレハブを追加します。 ※エフェクトのTransformの値はすべて初期値に変更しておきます。 ・単体で実行確認します。 Enterキーを押すと爆発エフェクトが表示されることを確認します。
  39. 39. A B RPC ネットワーク上にある別のクライアント端末のメソッドを実行 クライアント A A B クライアント B
  40. 40. A B RPC ネットワーク上にある別のクライアント端末のメソッドを実行 クライアント A Enterキー入力で爆発の RPCメソッドを呼び出し A B クライアント B
  41. 41. A B RPC ネットワーク上にある別のクライアント端末のメソッドを実行 クライアント A A B クライアント B 爆発メソッド実行 爆発メソッド実行
  42. 42. タイミングの同期 ・爆発を他のプレイヤーと同期するようにコードを変更します。 MUNを使用するためにコードを追記します。 自分のキャラクターだけ爆発するようにします。
  43. 43. タイミングの同期 ・ほかのプレイヤーと同期をとるためにRPCを使用します。 RPCは他のプレイヤーのメソッドを呼び出す仕組みです。 まず爆発させるコードを関数化します。 これに[MunRPC]のアトリビュートを追加します。 このRPCメソッドを「monobitView.RPC」で呼び出します。
  44. 44. タイミングの同期 ・複数クライアントで動作確認します。
  45. 45. RPC応用 RPCは任意のデータを送ることができます ・bool(Boolean) ・byte(Byte) ・char(SByte) ・short(Int16) ・unsingned short(UInt16) ・int(Int32) ・unsigned int(UInt32) ・long(Int64) ・unsigned long(UInt64) ・float(Single) ・double(Double) ・string(String) ・object(Object) ・Vector2, Vector3, Vector4 ・Quaternion ・上述のデータ型に基づく配列情報 ・上述のデータ型に基づく Hashtable ・上述のデータ型に基づく Dictionary
  46. 46. 作例紹介 神戸高専インターン作。2名で実制作期間3日で制作
  47. 47. ご清聴ありがとうございました!

×