PUN2を使ってみる🩲
①アカウント登録のURLに飛び、登録をする
②新しくアプリを作成するボタンをクリック
③アプリケーション名、説明、URLは後から編集できるので、仮で入力しても問題ない
※Photonの種別を「Photon PUN」にする
「Photon PUN」と「Photon Realtime」の違いがいまいち分からない
参考URLが「Photon PUN」なのでこっちでテストしてみる
PUN2をダウンロード
UnityでPUN2をDownload→Install
サイトで登録したアプリのIDを入力、セットアップ
※「Window」>「Photon Unity Networking」>「PUN Wizard」>「Settings : Setup Project」でもOK
Photon Server Settingsの中身
参考URLを見ながらチュートリアルを試してみる
①Prefabの名前は「Avatar」にする
②Prefabは「Resources」フォルダーの中に入れる
③GameObjectにはPhotonViewコンポーネントを追加する
ヒエラルキーに空のObjectを追加して、以下のコードを貼り付ける
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
// MonoBehaviourPunCallbacksを継承して、PUNのコールバックを受け取れるようにする
public class SampleScene : MonoBehaviourPunCallbacks
{
private void Start() {
// PhotonServerSettingsの設定内容を使ってマスターサーバーへ接続する
PhotonNetwork.ConnectUsingSettings();
}
// マスターサーバーへの接続が成功した時に呼ばれるコールバック
public override void OnConnectedToMaster() {
// "Room"という名前のルームに参加する(ルームが存在しなければ作成して参加する)
PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);
}
// ゲームサーバーへの接続が成功した時に呼ばれるコールバック
public override void OnJoinedRoom() {
// ランダムな座標に自身のアバター(ネットワークオブジェクト)を生成する
var position = new Vector3(Random.Range(-3f, 3f), Random.Range(-3f, 3f));
PhotonNetwork.Instantiate("Avatar", position, Quaternion.identity);
}
}
PhotonNetwork.Instantiate("Avatar", position, Quaternion.identity);
で"Avatar"じゃなくてもPrefabの名前と一致してれば問題ない。
「Resources」フォルダーじゃなくても大丈夫なようにしたい
ってあるから「Resources」フォルダー以外には置けなさそう🥲
プレイヤー名の表示を試してみるが、参考URLがAvator配下に直接TextMesh ProのコンポーネントがついてるObjectがいるのが不可解。CanvasもないしEventSystemもないしどうやって設定しているんだ。。
TMPは2種類ある
・Canvasが必要なTMP(UIから作る)
・CanvasがいらないTMP(3Dから作る)
子要素にCanvas→Text(普通の)で、Canvasサイズを変更やWorld Spaceに変更でも可
今回は・CanvasがいらないTMP(3Dから作る)を利用して作る
TMPのコンポーネントに下のコードをつける
using Photon.Pun;
using TMPro;
// MonoBehaviourPunCallbacksを継承して、photonViewプロパティを使えるようにする
public class AvatarNameDisplay : MonoBehaviourPunCallbacks
{
private void Start() {
var nameLabel = GetComponent<TextMeshPro>();
// プレイヤー名とプレイヤーIDを表示する
nameLabel.text = $"{photonView.Owner.NickName}({photonView.OwnerActorNr})";
}
}
SampleSceneのコードのスタート関数に以下を追記
// プレイヤー自身の名前を"Player"に設定する
PhotonNetwork.NickName = "Player";
AvatarControllerをPlayerに追加して自分のPlayerを操作できるようにする
using Photon.Pun;
using UnityEngine;
// MonoBehaviourPunCallbacksを継承して、photonViewプロパティを使えるようにする
public class AvatarController : 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);
}
}
}
オブジェクトの座標を他プレイヤーと自動的に同期してくれる:PhotonTransformViewコンポーネント
を、Playerに追加する
公式:https://doc.photonengine.com/ja-jp/pun/current/lobby-and-matchmaking/appandlobbystats
参考URL
・接続手順
・Room設定
シンプルで見やすい
・RPC