「Unity/photon/pun2/位置同期」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→アバター風にしてみる) |
(→アバター風にしてみる) |
||
行19: | 行19: | ||
public class PhotonAvatar : MonoBehaviourPunCallbacks, IPunInstantiateMagicCallback | public class PhotonAvatar : MonoBehaviourPunCallbacks, IPunInstantiateMagicCallback | ||
{ | { | ||
− | |||
void Awake() | void Awake() | ||
{ | { |
2022年12月8日 (木) 02:51時点における版
アバター風にしてみる
- Cube作成。ここでは"Avatar"という名前に変更した。
- AvatarにBoxColliderが追加されていることを確認
- AvatarのAddComponentにPhotonAvatarとPhotonViewとPhotonTransformViewを追加
- PhotonTransformViewに、PositionとRotationが、追加されてることを確認。
- Assets下に、Resourcesディレクトリを追加して、AvatarをResourcesに追加
- 以下スクリプトでPrefabのAvatarをロードする。
- PhotonManager.cs
GameObject avatar = PhotonNetwork.Instantiate("Avatar", Vector3.zero, Quaternion.Euler(Vector3.zero),0);
これを使うと、相手が接続時に、インスタンスがロード&表示される。
- PhotonAvatar.sc
using UnityEngine; using Photon.Pun; public class PhotonAvatar : MonoBehaviourPunCallbacks, IPunInstantiateMagicCallback { void Awake() { this.name = "Avatar" + GetComponent<PhotonView>().InstantiationId; if (GetComponent<PhotonView>().IsMine) { GetComponent<Renderer>().material.color = Color.red; } else { // もし操作するクラスをaddしてた場合は、自分以外のときは無効とする GetComponent<CharacterControl>().enabled = false; } } void IPunInstantiateMagicCallback.OnPhotonInstantiate(PhotonMessageInfo info) { if (info.Sender.IsLocal) { Debug.Log("自身が生成"); } else { Debug.Log("他人が生成"); } info.Sender.TagObject = this.gameObject; } }
公式:https://doc.photonengine.com/ja-jp/pun/v2/gameplay/instantiation
既に接続してるプレイヤーのPhotonNetwork.Instantiateが表示されない時
シーンをまたぐ場合は、部屋に入ったときは、以下のようにして、相手プレイヤーの受信を控える
PhotonNetwork.IsMessageQueueRunning = false;
シーン移動後に、以下のように再開する
PhotonNetwork.IsMessageQueueRunning = true;