Объекты Spawn не синхронизируются - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь сделать многопользовательскую игру с использованием фотонов, и когда я пытаюсь породить объекты рядом с игроком, они не синхронизируются c одинаково для обоих игроков. Что я должен добавить в инспекторе (уже оба объекта, которые нужно порождать, имеют PhotonView и PhotonView Transform). Что я должен добавить к своему сценарию?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class SpawnFix : MonoBehaviour
{
    public GameObject[] powersPrefab;
    public Transform[] points;
    public float beat = (60 / 130) * 2;
    private float timer;




    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame

      [PunRPC]
    void Update()
    {
        if (timer > beat)
        {
            GameObject powers = Instantiate(powersPrefab[Random.Range(0, 2)]);
            powers.transform.localPosition = points[Random.Range(0, points.Length)].position;
            timer -= beat;

        }
        timer += Time.deltaTime;
    }
}

1 Ответ

0 голосов
/ 22 апреля 2020

Учитывая сходство вашего кода:

Был ли именно этот вопрос еще не задан и не дан ответ здесь ? (Только то, что вы приняли глупый ответ ^^)


В любом случае

хорошо ... это не так, как работает [PunRPC]. Его нужно будет вызывать через сеть где-нибудь, например, через

var photonView = PhotonView.Get(this);
photonView.RPC("Update", RpcTarget.All);

HOWEVER , вы определенно не захотите синхронизировать сам метод Update каждый кадр, а скорее только порождение .


Скорее всего, вам лучше использовать PhotonNetwork.Instantiate

public class SpawnFix : MonoBehaviour
{
    public GameObject[] powersPrefab;
    public Transform[] points;
    public float beat = (60 / 130) * 2;
    private float timer;

    // Update is called once per frame
    void Update()
    {
        // only run on the master client
        if(!PhotonNetwork.isMasterClient) return;

        if (timer > beat)
        {
            PhotonNetwork.Instantiate(
                powersPrefab[Random.Range(0, 2)].name, 
                points[Random.Range(0, points.Length)].position, 
                Quaternion.idendity, 
            0);

            timer -= beat;

        }
        timer += Time.deltaTime;
    }
}

Для этого префабы должны быть зарегистрированы в Фотоне как вызываемые объекты.

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