Я хочу удалить собственный объект игрока, но не могу использовать Destroy | PUN2 - PullRequest
0 голосов
/ 24 февраля 2020

Я делаю шутер с использованием PUN2, но я столкнулся с проблемой, когда игроки не исчезли. Движение игрока, движение снаряда с помощью PunRP C, обработка пули и т. Д. c.

Я делаю Уничтожить () игрока, когда здоровье игрока становится равным 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)
}

Поток: Выполнить Поврежден (int) в Player.cs из сценария оболочки, рассчитать физическую силу с помощью PunRP C, и если оно меньше 0, выполните RemovePlayer () с PunRP C.

Вызов photonView.RP C (nameof (RemovePlayer), RpcTarget.All); приведет к ошибке.

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта


Кроме того, когда я использую Destroy () без PunRP C, он исчезнет только с его устройства и останется видимым для других игроков.

Уничтожить () без PunRP C:

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)
}

1 Ответ

0 голосов
/ 06 марта 2020

Как сказал г-н Филипп, выполнив PhotonNetwork.Destroy (), я смог полностью удалить объект. Это было возможно за пределами [PunRPC].

...