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

问题描述 投票:0回答:1

我正在使用PUN2制作射击游戏,但是遇到了一个玩家没有消失的问题。实现了播放器移动,使用PunRPC的外壳移动,项目符号处理等。

我使用以下代码在播放器的生命值变为0时执行Destroy()播放器。

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脚本中在Player.cs中执行Damaged(int),用PunRPC计算物理强度,如果它小于0,则执行RemovePlayer( )PunRPC

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

NullReferenceException:对象引用未设置为对象的实例


而且,当我在不使用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)
}
c# unity3d photon
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.