我正在使用PUN2制作射击游戏,但我遇到了玩家没有消失的问题。玩家移动、使用PunRPC的外壳移动、子弹处理等都得到了实现。
当玩家的生命值变为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)
}
流:从shell脚本执行Player.cs中的Damaged(int(,使用PunRPC计算体力,如果小于0,则使用PunRPC执行RemovePlayer((。
调用photonView.RPC(名称为(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)
}
正如mrPhilipp所说,通过执行PhotonNetwork.DDestroy((,我能够完全删除该对象。这在[PunRPC]之外是可能的。