PUN2 |该过程被调用两次
PUN2 | The process is called twice
我目前正在使用PUN2 制作一款多人射击游戏。
实现了参与房间和移动与子弹的同步。
但是hit时的处理执行了两次。
也许这是因为两台设备上存在的完全相同的对象正在处理每个镜头。 (也许)
如何避免重复命中处理?
代码:
流程:射手给shell分配自己的识别号并开火→谁命中shell都会受到伤害
Player.cs
private void OnCollisionEnter(Collision collider)
{
BulletController bulletController = collider.gameObject.GetComponent<BulletController>();
if (photonView.Owner.ActorNumber != bulletController.shooterUserId)
{
photonView.RPC(nameof(Damaged), RpcTarget.All, bulletController.Damage, bulletController.shooterUserId);
bulletController.Remove();
}
}
[PunRPC]
void Damaged(int damage, int userId)
{
var hashtable = new Hashtable();
hashtable["HP"] = HP;
PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);
if (photonView.IsMine)
{
HP -= damage;
if (HP <= 0)
{
this.gameObject.SetActive(false);
HP = 0;
if (userId != photonView.OwnerActorNr)
photonView.RPC("KilledPlayer", RpcTarget.Others);
}
}
}
[PunRPC]
void KilledPlayer()
{
GameSparksLeaderboard.SaveXP(100);
}
我只是忘了附上 photonView.IsMine
。
这很重要,但很容易忘记......
我目前正在使用PUN2 制作一款多人射击游戏。 实现了参与房间和移动与子弹的同步。
但是hit时的处理执行了两次。 也许这是因为两台设备上存在的完全相同的对象正在处理每个镜头。 (也许)
如何避免重复命中处理?
代码:
流程:射手给shell分配自己的识别号并开火→谁命中shell都会受到伤害
Player.cs
private void OnCollisionEnter(Collision collider)
{
BulletController bulletController = collider.gameObject.GetComponent<BulletController>();
if (photonView.Owner.ActorNumber != bulletController.shooterUserId)
{
photonView.RPC(nameof(Damaged), RpcTarget.All, bulletController.Damage, bulletController.shooterUserId);
bulletController.Remove();
}
}
[PunRPC]
void Damaged(int damage, int userId)
{
var hashtable = new Hashtable();
hashtable["HP"] = HP;
PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);
if (photonView.IsMine)
{
HP -= damage;
if (HP <= 0)
{
this.gameObject.SetActive(false);
HP = 0;
if (userId != photonView.OwnerActorNr)
photonView.RPC("KilledPlayer", RpcTarget.Others);
}
}
}
[PunRPC]
void KilledPlayer()
{
GameSparksLeaderboard.SaveXP(100);
}
我只是忘了附上 photonView.IsMine
。
这很重要,但很容易忘记......