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

Unity3D Photon Synchronizowanie Pozycji

VPS Starter Arubacloud
0 głosów
194 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 146 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 697 wizyt
pytanie zadane 31 sierpnia 2018 w OpenGL, Unity przez NEFOS Początkujący (320 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...