我正在尝试为玩家创建一个收集硬币的系统,如果收集了硬币,那么钥匙就会产生,但是当玩家收集硬币时我遇到了一个问题,即当第一枚硬币被销毁时,然后光子视图硬币被销毁,当玩家想要收集第二个硬币时,光子视图已被销毁。怎么,我把硬币弄坏了,但光子视图没有被破坏? 这是错误:非法视图 ID:0 方法:CollectCoin GO:Coin (2) UnityEngine.Debug:LogError(对象)
using UnityEngine;
using Photon.Pun;
public class Coin : MonoBehaviourPun
{
private void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag("Player"))
{
Debug.Log("Player collided with coin");
if (PhotonNetwork.IsMasterClient)
{
photonView.RPC("CollectCoin", RpcTarget.All, other.gameObject.GetComponent<PhotonView>().ViewID);
}
}
}
[PunRPC]
public void CollectCoin(int playerViewID)
{
CoinCollect playerCoinCollection = PhotonView.Find(playerViewID).gameObject.GetComponent<CoinCollect>();
string playerName = PhotonView.Find(playerViewID).gameObject.name;
// playerCoinCollection.CollectCoin(playerName);
photonView.RPC("DeactivateCoin", RpcTarget.All);
}
[PunRPC]
void DeactivateCoin()
{
PhotonNetwork.Destroy(gameObject);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
public class CoinCollect : MonoBehaviourPunCallbacks, IPunObservable
{
public GameObject keyPrefab;
private int coinCount;
private int playerCount;
private int coinsNeeded;
void Start()
{
playerCount = PhotonNetwork.PlayerList.Length;
switch (playerCount)
{
case 1:
coinsNeeded = 1;
break;
case 2:
coinsNeeded = 2;
break;
case 3:
coinsNeeded = 15;
break;
case 4:
coinsNeeded = 20;
break;
default:
Debug.LogError("Unsupported player count: " + playerCount);
break;
}
}
// Trigger when player collects coin
public void CollectCoin()
{
coinCount++;
CheckCoinCount();
}
private void CheckCoinCount()
{
if (coinCount >= coinsNeeded)
{
SpawnKey();
}
}
private void SpawnKey()
{
PhotonNetwork.Instantiate(keyPrefab.name, new Vector3(0, 0, 0), Quaternion.identity);
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
stream.SendNext(coinCount);
}
else
{
this.coinCount = (int)stream.ReceiveNext();
}
}
}
我认为问题出在
DeactivateCoin()
方法,它正在调用PhotonNetwork.Destroy
.PhotonNetwork.Destroy
接到所有客户的电话。但是,您还通过 RPC 从每个客户端调用它。相反,让一个客户(主客户或收集代币的客户)打电话给
PhotonNetwork.Destroy
。