В настоящее время я использую PUN2 для создания многопользовательской стрелялки. Участие в комнате и синхронизация движений и пуль были реализованы.
Однако обработка при попадании выполняется дважды. Возможно, это потому, что один и тот же объект, который существует на двух устройствах, обрабатывает каждый выстрел. (возможно)
Как избежать обработки дублирования попаданий?
Код:
flow: Стрелок назначает свой собственный идентификационный номер оболочке и запускает его → Любой, кто попадет в снаряд, получит урон.
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);
}