我想删除自己的播放器对象,但我不能使用 Destroy | PUN2

I want to delete own player object, but I can't use Destroy | PUN2

我正在用PUN2制作一款射击游戏,但是遇到了玩家没有消失的问题。 实现玩家移动、shell 使用 PunRPC 的移动、子弹处理等。

我使用以下代码 Destroy() 当玩家的生命值变为 0 时玩家。

Player.cs :

GameObject Player; // player object attached
int HP = 100; 

//If hit
public void Damaged(int damage)
{
    photonView.RPC(nameof(UpdateHP), RpcTarget.All, damage)
}

[PunRPC]
void UpdateHP(int damage)
{
    HP -= damage;
    if(HP <= 0)
        photonView.RPC(nameof(RemovePlayer), RpcTarget.All);

    var hashtable = new Hashtable();
    hashtable["HP"] = HP;
    PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);
}

[PunRPC]
void RemovePlayer()
{
    Destroy(Player)
}

Flow:从shell脚本执行Damaged(int) in Player.cs,计算物理strength with PunRPC,如果小于0,执行RemovePlayer() with PunRPC.

调用 photonView.RPC(nameof(RemovePlayer), RpcTarget.All); 会产生错误。

NullReferenceException: Object reference not set to an instance of an object


此外,当我在没有 PunRPC 的情况下使用 Destroy() 时,它只会从他的设备上消失,而对其他玩家仍然可见。

没有 PunRPC 的 Destroy() :

GameObject Player; // player object attached
int HP = 100; 

//If hit
public void Damaged(int damage)
{
    photonView.RPC(nameof(UpdateHP), RpcTarget.All, damage)
}

[PunRPC]
void UpdateHP(int damage)
{
    HP -= damage;
    if(HP <= 0)
        RemovePlayer();

    var hashtable = new Hashtable();
    hashtable["HP"] = HP;
    PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);
}

void RemovePlayer()
{
    Destroy(Player)
}

正如 mrPhilipp 所说,通过执行 PhotonNetwork.Destroy () 我能够完全删除该对象。这在 [PunRPC] 之外是可能的。