@DedliParkurKillerDark

Как сделать SetActive определенному игровому объекту, пренадлежащему 1 игроку, но так, чтобы все остальные это тоже увидели?

Есть у меня допустим игровой объект gun. На этот объект наложен компонент Photon View. Как мне сделать SetActive(true) или SetActive(false) так, чтобы видимость того что пушка появляется или исчезает была у всех, а не только у игрока, который достает или убирает пушку? И как это сделать так, чтобы "активность" пушек других игроков не менялась в этот момент?
В интернете говорят использовать [PunRPC] вместе с view.RPC, но у меня это не работает. Вот код:
[PunRPC]
private void OnTriggerEnter2D(Collider2D other)
    {
        if (view.IsMine)
        {
            if (other.CompareTag("Weapon"))
            {
                for (int i = 0; i < allWeapons.Length; i++)
                {
                    if (other.name == allWeapons[i].name)
                    {
                        unlockWeapons.Add(allWeapons[i]);
                    }
                }
                PhotonView playerView = PhotonView.Get(this);
                playerView.RPC("SwitchWeapon", RpcTarget.AllBufferedViaServer); // конкретный участок использования RPC
                PhotonNetwork.Destroy(other.gameObject);
            }

            if (other.CompareTag("Bullet"))
            {
                health -= 10;
            }

            if (other.CompareTag("Heal"))
            {
                health += 10;
                PhotonNetwork.Destroy(other.gameObject);
            }
        }
    }

    [PunRPC]

    public void SwitchWeapon()
    {
        for (int i = 0; i < unlockWeapons.Count; i++)
        {
            if (unlockWeapons[i].activeInHierarchy)
            {
                unlockWeapons[i].SetActive(false);
                GameObject currentWepaon = unlockWeapons[i != 0 ? i - 1 : unlockWeapons.Count - 1];
                currentWepaon.SetActive(true);
                weaponIcon.sprite = currentWepaon.GetComponent<SpriteRenderer>().sprite;
                weaponIcon.SetNativeSize();
                break;
            }
        }
    }


Ошибок в консоль не выводится.
В консоль выводится:
lnyq4hvextrcpkbu3nfirjfocja.png
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
@greedile
У меня работало так: создаю [PunRPC] метод, в котором выполняю самый обычный GameObject.SetActive(bool), и вызываю через photonView.RPC(название метода). Как-то так.

Посмотрел твой код, метод SwitchWeapon должен выглядеть так:
*Метод OnTriggerEnter можно и не обозначать как [PunRPC].
[PunRPC]
public void SwitchWeapon()
    {
        for (int i = 0; i < unlockWeapons.Count; i++)
        {
            if (unlockWeapons[i].activeInHierarchy)
            {
                unlockWeapons[i].SetActive(false);
                GameObject currentWepaon = unlockWeapons[i != 0 ? i - 1 : unlockWeapons.Count - 1];
                currentWepaon.SetActive(true);
                weaponIcon.sprite = currentWepaon.GetComponent<SpriteRenderer>().sprite;
                weaponIcon.SetNativeSize();
                break;
            }
        }
    }

И вызываешь его через photonView.RPC(nameof(SwitchWeapon), RpcTarget.AllBufferedViaServer);
И ещё, дабы у тебя работал компонент photonView, класс игрока должен "наследоваться" от MonoBehaivourPun, или что-то в этом роде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы