• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Unity3D Photon Synchronizowanie Pozycji

0 głosów
121 wizyt
pytanie zadane 11 marca 2019 w C# przez Yordano Obywatel (1,010 p.)

Witam, zacząłem tworzyć system samochodów do swojej gry multiplayer i wszystko ładnie działa dopóki gracz nie wsiądzie do pojazdu i nie zacznie jechać. Jak host wejdzie to u klienta wszystko ładnie działa, ale jak klient wsiądzie to samochód przenosi na pozycje 0, 0, 0. I klient może jechać, ale host nadal widzi pojazd na pozycji 0, 0, 0. Na objekcie mam skrypt PhotonView i jako obserwowany skrypt ten, w którym mam serializacje. Mój skrypt wygląda tak:
 

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NetworkCarPosition : Photon.MonoBehaviour {

    public Vector3 defaultPosition;
    public Quaternion defaultRotation;

    void Start ()
    {

    }

    void Update ()
    {
        if (GetComponent<CarManager>().passenger != null)
        {
            if (!GetComponent<CarManager>().passenger.GetComponent<PhotonView>().isMine)
            {
                transform.position = Vector3.Lerp(transform.position, defaultPosition, Time.deltaTime * 10f);
                transform.rotation = Quaternion.Slerp(transform.rotation, defaultRotation, Time.deltaTime * 10f);
            }
        }
    }

    void OnPhotonSerializeView (PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        } else
        {
            defaultPosition = (Vector3)stream.ReceiveNext();
            defaultRotation = (Quaternion)stream.ReceiveNext();
        }
    }
}

 

komentarz 12 marca 2019 przez MsMaciek123 Pasjonat (24,780 p.)
Niestety nie znam się na Photonie, ale wiem co to UNET. Zakładam że nie informujesz hosta, że klient znajduje się na innej pozycji. Czyli jak host się ruszy, to do wszystkich klientów dociera informacja że host się ruszył. A kiedy klient się ruszy, do hosta nie dociera informacja że klient się ruszył. Mogę ci ten skrypt przepisać na silnik UNET, bo obsługa w nim jest łatwiejsza (sam korzystam).
komentarz 12 marca 2019 przez Yordano Obywatel (1,010 p.)

Nigdy nie pracowałem na UNETie  i w ogóle nie znam tego silnika więc to raczej, odpada, po prostu wolałbym rozwiązać problem z tym skryptem. Ale dzięki za pomoc wink

komentarz 12 marca 2019 przez piotrsz109 Stary wyjadacz (13,730 p.)

@Sendronn, Nie wystarczy podczas wsiadania do samochodu, wywołać RPC z metodą, która ustawia, że gracz wsiadł do samochodu?

komentarz 12 marca 2019 przez Yordano Obywatel (1,010 p.)
Ustawiam takie RPC, w drugim skrypcie, ale tu chodzi o synchronizowanie pozycji samochodu, bo wcześniej synchronizuje pozycje gracza i to działa bez problemu, ale jeśli gracz wchodzi do samochodu i zaczyna nim kierować, to pozycja samochodu nie jest synchronizowana.
komentarz 12 marca 2019 przez Yordano Obywatel (1,010 p.)
A dokładniej, jeśli klient wejdzie do samochodu to samochód teleportuje się na pozycje 0 i się nie rusza, ale jeśli host wejdzie do samochodu to wszystko ładnie działa i u klienta i u hosta.
komentarz 13 marca 2019 przez piotrsz109 Stary wyjadacz (13,730 p.)

@Sendronn, Najprostrzą metodą wydaje się przeciągnięcie Transforma samochodu do PhotonView

komentarz 14 marca 2019 przez Yordano Obywatel (1,010 p.)
Zrobiłem tak jak napisałeś, i jak host wejdzie do samochodu to widać wszystko, ale samochód się tnie, a jak klient wejdzie to jedzie, a u hosta stoi w miejscu.
komentarz 19 marca 2019 przez piotrsz109 Stary wyjadacz (13,730 p.)
Wyślij, może przez stream zserializowany Transform. Użyj tylko JsonUtility, a nie JsonConvert, bo ten drugi, ma problemy z Vector3

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 75 wizyt
pytanie zadane 27 grudnia 2020 w C# przez Hubert Hetman Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 23 października 2020 w OpenGL, Unity przez Sic Dyskutant (8,150 p.)
0 głosów
0 odpowiedzi 188 wizyt
pytanie zadane 31 sierpnia 2018 w OpenGL, Unity przez NFS050 Początkujący (250 p.)

87,946 zapytań

136,526 odpowiedzi

304,410 komentarzy

58,312 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...