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

Mirrorでマルチゲームを作る / xrdnk-yokohamaunityLT6-presentation

Denik
December 18, 2020

Mirrorでマルチゲームを作る / xrdnk-yokohamaunityLT6-presentation

Denik

December 18, 2020
Tweet

More Decks by Denik

Other Decks in Programming

Transcript

  1. 自己紹介 【名前/ハンドルネーム】 初鹿 デニック (Hatsushika Denik) / デニキ 【Twitter】 @xrdnk

    【職歴】 TIS 株式会社 19年度入社 インキュベーションセンター XR チーム 新米 XR Developer として従事中
  2. UNet や Photon との違い Mirror と UNet UNet は Unity

    2019時点ではなくなっています. Mirror は UNet 代替 OSS アセット なので UNet の知識がある方はすぐに理解できる. 代替と言っても,一部挙動やコードの変更があるので, UNet → Mirror へ移植作業を行う場合,しっかり Migration Guide を参考にする. FYI: 【Unity】UNetからMirrorへの乗り換え入門 https://note.com/fuqunaga/n/ncabed2573297 Mirror と Photon PhotonはプレイヤーのマッチングにPhoton Serverが必要であるため, インターネット環境がないと接続できない.LAN内で接続する場合であっても. Mirrorの場合はインターネットに接続されていないLAN環境でも動かすことができる. LAN内でのサーバー検索機能を利用したり,サーバIPが固定であれば,IP直打ちで接続可能.
  3. 環境構築 Mirror を使った簡単なマルチゲームを 作りながら,説明していきます. 以降,以下の環境を前提に説明します. • Unity 2020.1.15f1 • Mirror

    26.2.2 Mirror は Unity Asset Store から 無料でダウンロードできます. Unity 2020 から Package Manager Asset Store の仕様が変わっていることに注意.
  4. Network Manager (2/2) Network Manager の Scene Management の Offline

    Scene と Online Scene 両方に 作成中のサンプルシーンを入れましょう. Build Settings の Scenes in Build に作成中のサンプルシーンが登録されていることを忘れずに.
  5. Network Start Position でスタート地点を作ろう • Planeを右のように設置します.マテリアルは自由. • 空オブジェクトを生成し,「SpawnPoint」とします. Positionを(8, 0,

    8)とし, NetworkStartPositionをアタッチします. SpawnPointを複製し,Positionを各々, (8, 0, -8), (-8, 0, -8), (-8, 0, 8)にします. これらがプレイヤーのスポーン(スタート)地点になります.
  6. プレイヤーに Network Transform をアタッチしよう • Capsuleを生成して,「Player」と名付けます • PlayerにNetworkTransformをアタッチします. (自動的にNetworkIdentityもアタッチされます) NetworkTransform:

    ゲームオブジェクトの移動と回転を同期します クライアント側の権限で動かしたいので, AuthorityのClient Authorityにチェック入れます. NetworkIdentity: ネットワーク上のゲームオブジェクト固有ID Server Only にチェックを入れた場合, サーバー側の権限でのみスポーンすることになります.
  7. NetworkManager に Player を登録 • NetworkManager.PlayerObject.PlayerPrefab に 作成したプレイヤーのプレハブを入れます. • PlayerSpawnMethodはデフォルトではRandomですが,

    ラウンドロビン方式でスポーンさせたい場合は RoundRobinを選択することもできます. • Standalone でビルドしましょう.
  8. SyncVar でデータを同期しよう • 同期させたい変数に [SyncVar] を付与 • SyncVarの値が変更された時に 呼び出される関数を指定するために hook

    を使用 • Hook メソッドはSyncVarプロパティと 同じ型の2つのパラメタを持つ必要があり, 第一引数は古い値, 第二引数は新しい値になります.
  9. 参考文献や学習用サイト • Mirror Official Document (全て英語) https://mirror-networking.com/docs/index.html こちらのQuick Guideを日本語で説明しました.続きに銃で発砲する所があるので各自やってみましょう. •

    無料で使えるネットライブラリMirrorのざっくり紹介[tanaka’s Programming Memo](日本語) https://am1tanaka.hatenablog.com/entry/mirrorzakkuri • Mirror Sample Mirrorライブラリにあるサンプルシーンを参考にする. • Mirror 学習用の YouTube 動画リスト (全て英語) https://www.youtube.com/playlist?list=PLXEG2omgKgCapAmGe20XBgd87rmxFdKhK https://www.youtube.com/playlist?list=PLkx8oFug638oBYF5EOwsSS-gOVBXj1dkP https://www.youtube.com/playlist?list=PLS6sInD7ThM1aUDj8lZrF4b4lpvejB2uB ・Unity Official Document UNet マルチプレイヤーゲームとネットワーク https://docs.unity3d.com/ja/current/Manual/UNet.html UNet と Mirror は似通っているので参考にはなると思います.