Страница 1 из 1

Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 31 дек 2021, 12:58
MrAfitol
Raycast работает только у MasterClient, вот код:
Синтаксис:
Используется csharp
    private PhotonView view;
    private GameObject Key01;

    [SerializeField] private AudioClip audioPickupKey;
    [SerializeField] private Camera goCamera;

    private AudioSource audio_p;
    public bool PickupKey01;

    private void Awake()
    {
        view = GetComponent<PhotonView>();
        if (view.IsMine)
        {
            Key01 = GameObject.FindGameObjectWithTag("Key01");
            audio_p = GetComponent<AudioSource>();
        }
    }

    void Update()
    {
        if (view.IsMine)
        {
            RaycastHit hit;
            if (Physics.Raycast(goCamera.ScreenPointToRay(Input.mousePosition), out hit))
            {
                GameObject obj = hit.collider.gameObject;

                if (obj == Key01 && Vector3.Distance(transform.position, Key01.transform.position) < 5)
                {
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        audio_p.PlayOneShot(audioPickupKey);
                        PhotonNetwork.Destroy(Key01.GetPhotonView());

                        PickupKey01 = true;
                    }
                }
            }
        }
    }
 

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 02 янв 2022, 12:36
Alkos26Rus
Может ты хотел сказать что работет только у владельца? Вот у тебя даже проверка if (view.IsMine)

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 02 янв 2022, 15:29
MrAfitol
Alkos26Rus писал(а):Может ты хотел сказать что работет только у владельца? Вот у тебя даже проверка if (view.IsMine)

Я с ней и без нее пробовал, работает все-равно у MasterClient, тот кто создал сервак

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 02 янв 2022, 17:18
Alkos26Rus
MrAfitol писал(а):
Alkos26Rus писал(а):Может ты хотел сказать что работет только у владельца? Вот у тебя даже проверка if (view.IsMine)

Я с ней и без нее пробовал, работает все-равно у MasterClient, тот кто создал сервак

Ну у тебя стоит исключение по владельцу, конечно же мастер клиент тоже является владельцем своих PhotonView. Вобщем тебе нужно отправлять сообщения если хочешь чтоб на клиентах тоже работало.

Примерно так, хз будет работать или нет, так как не знаю как у тебя все устроено, но вобще тебе нужно изучить хотябы базу по фотону, такое ощущение что ты скопировал чей то код и не знаешь что за что отвечает
Синтаксис:
Используется csharp
    private PhotonView view;
    private GameObject Key01;

    [SerializeField] private AudioClip audioPickupKey;
    [SerializeField] private Camera goCamera;

    private AudioSource audio_p;
    public bool PickupKey01;

    private void Awake()
    {
        view = GetComponent<PhotonView>();
        if (view.IsMine)Key01 = GameObject.FindGameObjectWithTag("Key01");
        audio_p = GetComponent<AudioSource>();
    }

    void Update()
    {
        if (view.IsMine)
        {
            RaycastHit hit;
            if (Physics.Raycast(goCamera.ScreenPointToRay(Input.mousePosition), out hit))
            {
                GameObject obj = hit.collider.gameObject;

                if (obj == Key01 && Vector3.Distance(transform.position, Key01.transform.position) < 5)
                {
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        view.RPC("PickupKey", PhotonTargets.AllBuffered);
                        PhotonNetwork.Destroy(Key01.GetPhotonView());
                    }
                }
            }
        }
    }

[PunRPC]
public void PickupKey()
{
audio_p.PlayOneShot(audioPickupKey);
PickupKey01 = true;
}


 

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 02 янв 2022, 17:45
MrAfitol
Alkos26Rus писал(а):
MrAfitol писал(а):
Alkos26Rus писал(а):Может ты хотел сказать что работет только у владельца? Вот у тебя даже проверка if (view.IsMine)

Я с ней и без нее пробовал, работает все-равно у MasterClient, тот кто создал сервак

Ну у тебя стоит исключение по владельцу, конечно же мастер клиент тоже является владельцем своих PhotonView. Вобщем тебе нужно отправлять сообщения если хочешь чтоб на клиентах тоже работало.

Примерно так, хз будет работать или нет, так как не знаю как у тебя все устроено, но вобще тебе нужно изучить хотябы базу по фотону, такое ощущение что ты скопировал чей то код и не знаешь что за что отвечает
Синтаксис:
Используется csharp
    private PhotonView view;
    private GameObject Key01;

    [SerializeField] private AudioClip audioPickupKey;
    [SerializeField] private Camera goCamera;

    private AudioSource audio_p;
    public bool PickupKey01;

    private void Awake()
    {
        view = GetComponent<PhotonView>();
        if (view.IsMine)Key01 = GameObject.FindGameObjectWithTag("Key01");
        audio_p = GetComponent<AudioSource>();
    }

    void Update()
    {
        if (view.IsMine)
        {
            RaycastHit hit;
            if (Physics.Raycast(goCamera.ScreenPointToRay(Input.mousePosition), out hit))
            {
                GameObject obj = hit.collider.gameObject;

                if (obj == Key01 && Vector3.Distance(transform.position, Key01.transform.position) < 5)
                {
                    if (Input.GetKeyDown(KeyCode.E))
                    {
                        view.RPC("PickupKey", PhotonTargets.AllBuffered);
                        PhotonNetwork.Destroy(Key01.GetPhotonView());
                    }
                }
            }
        }
    }

[PunRPC]
public void PickupKey()
{
audio_p.PlayOneShot(audioPickupKey);
PickupKey01 = true;
}


 


во-первых я код сам писал, во-вторых ты меня не понял, вот эта функция Physics.Raycast(goCamera.ScreenPointToRay(Input.mousePosition), out hit) не хочет работать на всех кроме MasterClient

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 02 янв 2022, 18:29
Alkos26Rus
так он и не будет работать если ты не отправляешь сообщение
if (view.IsMine) ограничивает
и тут у тебя проверка obj == Key0 а при старте if (view.IsMine){Key01 = GameObject.FindGameObjectWithTag("Key01"); соответственно ни у кого уроме владельца нет Key01

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 11 янв 2022, 17:43
MrAfitol
Alkos26Rus писал(а):так он и не будет работать если ты не отправляешь сообщение
if (view.IsMine) ограничивает
и тут у тебя проверка obj == Key0 а при старте if (view.IsMine){Key01 = GameObject.FindGameObjectWithTag("Key01"); соответственно ни у кого уроме владельца нет Key01

Ключ спавниться у всех, и Key01 не нулевой, и я пробовал без if (view.IsMine), тоже самое

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 11 янв 2022, 17:51
MrAfitol
Alkos26Rus писал(а):так он и не будет работать если ты не отправляешь сообщение
if (view.IsMine) ограничивает
и тут у тебя проверка obj == Key0 а при старте if (view.IsMine){Key01 = GameObject.FindGameObjectWithTag("Key01"); соответственно ни у кого уроме владельца нет Key01

Проблема в том что когда Игрок мастел(Хост) подберает ключ, он берется, а когда другой игрок также делает, но не хочет работать

Re: Не работает Raycast в юнити с PUN2(Photon)

СообщениеДобавлено: 11 янв 2022, 18:41
Alkos26Rus
MrAfitol писал(а):
Alkos26Rus писал(а):так он и не будет работать если ты не отправляешь сообщение
if (view.IsMine) ограничивает
и тут у тебя проверка obj == Key0 а при старте if (view.IsMine){Key01 = GameObject.FindGameObjectWithTag("Key01"); соответственно ни у кого уроме владельца нет Key01

Проблема в том что когда Игрок мастел(Хост) подберает ключ, он берется, а когда другой игрок также делает, но не хочет работать

Ты бы хоть объяснил в начале по нормальному, я думал у тебя проблемы с синхронизацией. Запусти мастер клиент на билде, а клиент пусь подключится через редактор, может у тебя ошибки. Так же логи расставь на разных этапах и узнай что именно не срабатывает, а то так гадать до китайской пасхи