我想问一下Unity3D中的光子网络。 我刚刚开始学习它,我想尝试在网络中实例化对象。
我正在尝试使用RPC实例化每个对象(因此,我认为它将在本地调用并且可以轻松更改播放器属性)。 这是我的使用RPC实例化对象的代码,非常简单。
public MultiplayerManager instance;
private void Awake()
{
if (instance == null)
instance = this;
else
{
Destroy(this.gameObject);
}
}
void Start()
{
photonView.RPC("RPC_CreatePlayer", RpcTarget.All);
}
[PunRPC]
private void RPC_CreatePlayer()
{
Vector3 instantiatedPosition;
instantiatedPosition.x = Random.Range(45f, 70f);
instantiatedPosition.y = 40f;
instantiatedPosition.z = Random.Range(220f, 260f);
GameObject instantiatedPlayer = PhotonNetwork.Instantiate("player", instantiatedPosition, Quaternion.identity, 0);
instantiatedPlayer.GetComponent<MeshRenderer>().material = LocalPlayerManager.instance.mat;
}
结果实际上是成功的。 每个对象都实例化,但是错误是:
只要房间中有N位玩家,对象都会实例化N次。 例如,房间里有3个玩家,当我开始游戏时,将实例化9个对象。
每个玩家是否都有自己的MultiplayerManager,因此他们每个人都会将RPC发送给其他玩家吗? 我应该只输入条件 PhotonNetwork.isMasterClient ,然后它将发送RPC吗? (它确实有效,但这是最好的解决方案吗?)
我想弄清楚,但我不能:“ D哈哈 有什么不对 ? 谢谢。