PUN2 | Процесс вызывается дважды - PullRequest
0 голосов
/ 23 февраля 2020

В настоящее время я использую 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);
}

1 Ответ

1 голос
/ 24 февраля 2020

Я просто забыл прикрепить фотон. IsMine . Это важно, но легко забыть ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...