マルチゲーム(オンラインゲーム)のキャラ移動と同期【Unityゲーム制作】

今回はUnityオンラインゲーム(複数人で遊ぶマルチプレイヤーゲーム)でキャラを動かし、同期させる方法のメモです。PhotonUnityNetworking2(PUN2)を利用していきます。

はじめに

前回はとりあえずPUN2の導入をしました。今回はその続きで、「キー入力」でキャラを動かし、相手の画面に反映(同期)させます。

参考サイト様

今回もPUN2(PhotonUnityNetworking2)で始めるオンラインゲーム開発入門さまを参考にしています。

ゲーム作成開始

では、さっそく作成していきます。

ラベルの追加

現状だとどちらが自分のキャラなのか判断がつかないので、識別するためにラベルを追加します。

Playerのプレハブを開いて「空のオブジェクトを作成」

NameTxtに変更してコンポーネントを追加から「TextMeshPro – Text」を追加。

位置やフォントサイズを変更していい感じにします。Textの中身はとりあえず「Player(0)」にしておきます。ここで設定するテキストの中身は仮です。

次にコンポーネントを追加から「新しいスクリプト」を追加。スクリプト名は「PlayerNameDisplay」としておきます。スクリプト内で動的にプレイヤー名を変更していきます。

スクリプトの中身を下記にします。テキスト(ラベル)をセットしています。

using Photon.Pun;
using TMPro;

public class PlayerNameDisplay : MonoBehaviourPunCallbacks
{
    private void Start()
    {
        var nameLabel = GetComponent<TextMeshPro>();

        nameLabel.text = $"{photonView.Owner.NickName}({photonView.OwnerActorNr})";
    }
}

次にSampleSceneのスクリプトに1行追加します。

    PhotonNetwork.NickName = "Player";

変更が終わったらビルドを行い、2つアプリを起動します。一つ目に起動した方がPlayer(1)、2つ目に起動した方がPlayer(2)となればOK

プレイヤー移動と同期

次にキー入力でオブジェクトを動くようにして、相手の画面にも反映されるようにします(同期)。イメージとしては下記のような感じで、上の画面でPlayer(1)を操作したら下の画面でも動くというものです。

Playerのプレハブを開き、新しいスクリプトを追加します。名前は「PlayerController」にしておきます。

スクリプトの中身は下記に変更します。

using Photon.Pun;
using UnityEngine;

public class PlayerController : MonoBehaviourPunCallbacks
{
    private void Update()
    {
        if (photonView.IsMine)
        {
            var input = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0f);
            transform.Translate(6f * Time.deltaTime * input.normalized);
        }
    }
}

最後にPlayerのプレハブにコンポーネントを追加から「Photon Transform View」を追加して完了。

ビルドして2つ起動。動かしてみて同期すればOK。

タイトルとURLをコピーしました