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

Unity3D Photon Synchronizowanie Pozycji

Object Storage Arubacloud
0 głosów
196 wizyt
pytanie zadane 11 marca 2019 w C# przez jakubjordanek Obywatel (1,320 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,760 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 jakubjordanek Obywatel (1,320 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 jakubjordanek Obywatel (1,320 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 jakubjordanek Obywatel (1,320 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 jakubjordanek Obywatel (1,320 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 148 wizyt
pytanie zadane 27 grudnia 2020 w C# przez Hubert Hetman Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 23 października 2020 w OpenGL, Unity przez Sic Dyskutant (8,510 p.)
0 głosów
0 odpowiedzi 720 wizyt
pytanie zadane 31 sierpnia 2018 w OpenGL, Unity przez NEFOS Początkujący (320 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...