0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MLAPI】Unityでのマルチプレイヤーゲームの実装方法

Posted at

内容

MLAPIを利用してUnityでマルチプレイヤーゲームの実装方法について解説します。

※ 本記事は, Unity JapanのUnityでマルチプレイヤーゲームを作ろう! - Unityステーションを基にしています。
サンプルプログラム: https://drive.google.com/file/d/1x0gHaJfH8d3QlguP58_9L16Pjlqposr4/view

MLAPIのインポート方法

Github MLAPIからダウンロードし、プロジェクトにインポートします。
https://github.com/Unity-Technologies/com.unity.multiplayer.mlapi

Sceneの設定

  1. 「NetworkManager」という名前の空のObjectを追加します。
  2. NetworkManagerオブジェクトに次の2つのコンポーネントを追加します。
    • NetworkingManagerコンポーネント
    • Unet Transportコンポーネント
  3. NetworkingManagerコンポーネントのNetwork TransportプロパティにNetworkManagerオブジェクトをドラッグ&ドロップします。

ネットワークに対応したいオブジェクトの設定

  1. オブジェクトにNetworkedObjectコンポーネントを追加します。
  2. InspectorのOverrideからApply Allを選択し、適用します。
  3. ObjectのPrefabをProjectから選択し、NetworkManagerオブジェクトのNetworkingManagerコンポーネントのNetworkedPrefabsにドラッグ&ドロップで設定します。プレイヤーが操作するオブジェクトの場合、隣のDefault Player Prefabにチェックマークを入れます。
  4. PrefabをProjectから選択し、Networed Transformコンポーネント, Networked AnimatorコンポーネントをPrefabに追加します。
    Networked Animatorコンポーネントの下のチェックマークでは、Animatorがもつパラメータの中でどれをネットワーク上で同期させるかを決定します。

ボタンの設定

  1. 画面上にHost Button, Client Buttonを追加します。
  2. Script UICallback.csを作成し、次のコードを書きます。
  3. 各メソッドをButtonのOn Clickイベントに設定します。
using System.Collections;
using System.Collections.Generic;
using Unity.Engine;

public class UICallback : MonoBehaviour
{
    public void OnClickHost()
    {
        MLAPI.NetworkingManager.Singleton.StartHost();
    }
    public voice OnClickClient()
    {
        MLAPI.NetworkingManager.Singleton.StartClient();
    }
}

もし、接続先のアドレスを変えたい場合はNetworkManagerオブジェクトのUnet TransportコンポーネントのConnect Addressを変更します。デフォルトでは、ローカルアドレスになっています。

ここで、同期対象のオブジェクトがシーンに配置されている場合、NetworkManagerにより生成されるため、削除する。

自分が動かすオブジェクトのみ動かす

現時点では、オブジェクトを操作した時、HostのオブジェクトもClientのオブジェクトも動作してしまいます。そこで、オブジェクトを動かすスクリプトを変更します。ここでは、便宜的にそのスクリプトをMoveController.csとします。

  1. オブジェクトのMoveController.csの継承するクラスをMLAPI.NetworkedBehaviourに変更する。
  2. 動かしている部分のコードをif(this.IsOwner)で囲うことにより、Ownerの場合のみ動作します。

こうすると、自分が操作しているオブジェクトのみ動くようになります。

もし、サーバーで動かしたい場合はConnect AddressとPortをスクリプトで取得し、変更する必要がある。

その他

  • ネットワーク上で同期したい変数があるときは、[MLAPI.NetworkedVar.SyncedVar]を宣言時に書く。

  • ネットワーク越しに、関数を呼び出したい時、サーバーからクライアントに呼び出して欲しい場合はMLAPI.Messaging.ClientRPC, クライアントからサーバーに呼び出して欲しい場合はMLAPI.Messaging.ServerRPCを宣言時に書く。呼び出すときは、this.InvokeClientRpc(関数名, Client ID)で呼び出す。

  • マッチングの機能はないので、自分で実装する必要がある。

サーバーで動かしたい時

  1. Built SettingsでPC, Mac & Linux Standaloneを選択し、Target PlatformLinuxに設定します。
  2. Server Buildにチェックマークを入れ、Buildします。
  3. 出力されたバイナリファイルをLinux Serverに移動させ、起動します。
  • ターゲットフレームをしっかり指定しないと、とんでもないレートになってしまう。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?