Jump to content
Unity Insider Forum

Photon OnPhotonSerilaizeView frage zur sende rate


swat243

Recommended Posts

Ich hätte eine Frage bezüglich der Sende Rate von OnPhotonSerilaizeView.

 

Wie bekannt ist sendet OnPhotonSerilaizeView 10x Messages pro Sekunde,ich werde euch jetzt paar Beispiele zeigen mit Frage :D

 

 

 

jetzt werde ja 10 Messages gesendet Pro Sekunde.

stream.SendNext(transofrm.position);

 

Werden hier jetzt 20 Messages pro Sekunde gesendet ?

 

stream.SendNext(transform.position);
stream.SendNext(transform.rotation);

 

oder werden immer nur 10 Messages gesendet ,egal wie viel man drin hat :P

 

Danke in voraus :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey,

 

also je nach Einstellungen sendest du eigentlich 20. Bei Photon Pun is Standard 10 glaub ich. Du kannst, aber variieren mit:

PhotonNetwork.sendRate = 20
PhotonNetwork.sendRateOnSerialize = 10

 

Die Zahlen sind Standardwerte.

Du sendest egal was du da stehen hast (position, rotation) eine Message mal 10 das Ganze (falls Rate 10 eingestellt ist). Aber du empfängst auch jedes mal was. darum nochmal mal 2 das ganze.

 

 

Kannst dir einfach mit dieser Formel merken:

Spieler x (Senden + Empfangen + (restliche Spieler auf dem Server)) x Anzahl der msg /s

 

Oder auch:

Spieler x (Spieler + 1 + (die restlichen Spieler auf dem Server)) x Anzahl der msg /s

 

Also so sieht das aus bei ein Spieler:

1 Spieler x (1 Spieler + 1) x 10 = 1 x 2 x 10 = 20 msg/s

 

Bei 10:

10 Spieler x (1 Spieler + 1 + 9 (die anderen 9 Spieler)) x 10 = 10 x 11 x 10 = 1100 msg/s

Leider die 500 grenze überschritten :D.

 

Die "Spieler" bezieht sich natürlich auf die Scripte mit OnPhotonSerilaizeView :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey,

 

also je nach Einstellungen sendest du eigentlich 20. Bei Photon Pun is Standard 10 glaub ich. Du kannst, aber variieren mit:

PhotonNetwork.sendRate = 20
PhotonNetwork.sendRateOnSerialize = 10

 

Die Zahlen sind Standardwerte.

Du sendest egal was du da stehen hast (position, rotation) eine Message mal 10 das Ganze (falls Rate 10 eingestellt ist). Aber du empfängst auch jedes mal was. darum nochmal mal 2 das ganze.

 

 

Kannst dir einfach mit dieser Formel merken:

Spieler x (Senden + Empfangen + (restliche Spieler auf dem Server)) x Anzahl der msg /s

 

Oder auch:

Spieler x (Spieler + 1 + (die restlichen Spieler auf dem Server)) x Anzahl der msg /s

 

Also so sieht das aus bei ein Spieler:

1 Spieler x (1 Spieler + 1) x 10 = 1 x 2 x 10 = 20 msg/s

 

Bei 10:

10 Spieler x (1 Spieler + 1 + 9 (die anderen 9 Spieler)) x 10 = 10 x 11 x 10 = 1100 msg/s

Leider die 500 grenze überschritten :D.

 

Die "Spieler" bezieht sich natürlich auf die Scripte mit OnPhotonSerilaizeView :)

 

Wenn ich theoretisch es auf 10 reduzieren täte 5x position und 5x rotation mit PhotonNetwork.sendRateOnSerialize = 10,würde es pro Spieler 20 Messages sende einmal um zu senden und zu empfangen ?

 

Wenn ich jetzt RPC nehmen werde,was als die Beste Möglichkeit ist,wie macht man das wegen den cheatern und so,das client sollte ja nur wünsch äußern und nach fragen ob es das kann beim server aber keine Kommandos geben darf wegen cheatern.

wie stelle ich das am besten an :)

 

Ist ja erschrecken das mit den Messages 10 spieler 1100 Messages 0:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich theoretisch es auf 10 reduzieren täte 5x position und 5x rotation mit PhotonNetwork.sendRateOnSerialize = 10,würde es pro Spieler 20 Messages sende einmal um zu senden und zu empfangen ?

 

Also PhotonNetwork.sendRateOnSerialize ist schon Standard 10. Du brauchst das nicht ändern, wenn du 10 haben willst.

Also es sendet 10x Position und 10 x Rotation gleichzeitig. Die werden nicht getrennt gesendet :).

Und die 20 ist zwar richtig, aber nicht wegen 5x Position oder so. Weiß ehrlich gesagt nicht, wie du das meinst mit 5x :D. Also ich habe da dir doch ein Formel gegeben. Musst du nur einsetzen. Wenn du alleine wärst, wäre es wirklich 20.

 

Ob du jetzt Position sendest, Rotiation sendest, oder Leben sendest, oder wieviel Armor du sendest, oder Schild du sebdest.. die Sachen zählen nur als EINS weil, du ja alle auf einmal (GLEICHZEITIG) sendest. Darum brauchst du nicht 5x oder so rechnen.

 

Nochmal bessere Formel

 

msg/s = Onlinespieleranzahl x (Senden + Empfangen + (Onlinespieleranzahl - 1)) x ROS

ROS = steht für sendRateOnSerialize

 

Das rot markierte ist das wichtige. Dein Beispiel kann man nicht berechnen, da du nicht sagst WIE VIELE online sind. Je mehr Spieler online sind, umso mehr Messages werden ja erstellt. Ist auch logisch, weil ja immer mehr Leute Messages senden und empfangen. Das muss man mit reinrechnen.

 

Sagen wir ein Spieler. Du allein.

Onlinespieleranzahl = 1, ROS = 10 (Standard sendRateOnSerialize)

 

msg/s = Onlinespieleranzahl x (Senden + Empfangen + (Onlinespieleranzahl - 1)) x ROS

msg/s = 1 x (1 + 1 +(0)) x 10

msg/s = 1 x 2 x 10

msg/s = 20

Obwohl hier bin ich nicht sicher, weil du ja alleine bist und du vllt nichts empfängst kann es auch nur 10 sein bzw. auch 0 sein, weil du nichts sendest.

 

Sagen wir du und ein Freund: Onlinespieleranzahl = 2, ROS = 10 (Standard sendRateOnSerialize)

msg/s = 2 x (1 + 1 +(1)) x 10

msg/s = 2 x 3 x 10

msg/s = 60

 

Sagen wir mehrere Spielen jetzt: Onlinespieleranzahl = 8, ROS = 10 (Standard sendRateOnSerialize)

msg/s = 8 x (1 + 1 +(7)) x 10

msg/s = 8 x 9 x 10

msg/s = 720

 

Sagen wir mehrere Spielen jetzt und die Rate ist runtergedreht: Onlinespieleranzahl = 12, ROS = 4

msg/s = 12 x (1 + 1 +(11)) x 4

msg/s = 12 x 13 x 4

msg/s = 624

 

Wenn du immer noch nicht kapierst dann mach das auf Photonseite:

https://www.exitgame.../en/PUN/Pricing

Irgendwo unten steht Messages. Da kannst du auswählen, wie deine Rate eingestellt ist und wie viele Spieler du haben wirst.

Aber Achtung, da wird es komischerweise anders gerechnet. Weiß nicht warum aber da sieht die Formel so aus:

msg/s = Onlinespieleranzahl x Onlinespieleranzahl x ROS

Vielleicht haben die das optimiert. Da hast du ein bisschen weniger Message raus als bei mir.

 

EDIT: Die Formel die ich benutze habe ich auch von denen aus deren Forum: http://forum.exitgam...5&t=1246#p14438

Das hat ein Teammitglieder von ExitGames (also Photon-Entwickler) geschrieben.

 

Wenn ich jetzt RPC nehmen werde,was als die Beste Möglichkeit ist,wie macht man das wegen den cheatern und so,das client sollte ja nur wünsch äußern und nach fragen ob es das kann beim server aber keine Kommandos geben darf wegen cheatern.

wie stelle ich das am besten an :)

 

Ist ja erschrecken das mit den Messages 10 spieler 1100 Messages 0:

Ich weiß nicht wie man in Photon gegen cheatern vorgehen kann. Ich hab nur eine Theorie, wie man es machen könnte. Das ist auch etwas kompliziert.

 

Beispiel man kann im Spiel Münzen sammeln. Irgendwie schickt ja der die Münzen sammelt ein RPC "Habe Münze aufgehobe, habe jetzt 10 Stück" oder sowas. Und ein Spielercharakter hat ein Script, der auch Münzenzähler heißt oder so. Und alle hatten schon 9 gespeichert und es erhöht sich dann auf 10 natürlich. Sagen wir mal er cheatet und gibt sich 10.000 Münzen. Und nun macht er durch ein hack ohne dass er aufsammelt RPC senden, dann ist er auch wirklich ein guter Hacker oder er sammelt noch einmal und dann wird RPC gesendet (ist im Endeffekt das gleiche.. Hauptsache er sendet einmal RPC). Dann kriegen ja alle Spieler gesagt.. er hat nun 10.001 Münzen. Jetzt können die anderen Spieler aber bei sich selber gucken und sagen... "Warte mal.. er hatte doch 10 Münzen,... er kann nicht auf 10.001 kommen". Ja dann wird quasi er als Cheater gemeldet oder die Zahl bei ihm wieder auf 10 eingestellt oder so.

 

Aber das geht 100 % nicht steht. Vielleicht hat er wirklich 10.000 Münzen ercheatet, aber er sendet, dass 10 hatte und nun 11 hat.

Außerdem würde das krass mehr Messages verursachen, weil man immer hin und her schickt.

 

Daher so ne ideale Lösung kenne ich bei Photon nicht. Man könnte ein Anti-Cheat-Tool benutzen, aber die kosten etwas und man braucht dafür ne Lizenz. Würde ich nur machen, wenn man wirklich ein ernsthaftes Spiel machen für viel Geld :).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit 5x habe ich gemeint ,das man die sende rate auf 5 pro Sekunde stellt :D .

 

ich werde dann nur die rotation 3x die sekunde Updaten,das die anderen sehen,wohin er rotiert,aber Position und so werden über RPC`s gemacht ist besser so,da man ehh nicht viel gegen Cheatern machen kann in Photon :P .

Wenn man mehr Messages bracht muss man sie sich dann halt kaufen :D lohnt sich aber nur wenn man ein spiel hat das man auch verkaufen tut und mit Geld macht.

 

 

Achso hab jetzt noch eine Frage bezüglich beim Animator mit SetBool, wie könnte ich jetzt SetBool über [RPC] an die anderen schicken,muss ich jetzt Z.B anim.setbool("name",true) in einer void packen

 

[RPC]
public void animation()
{
anim.setbool("name",true);
}

void update()
{
if(w == true)
{
photonView.RPC ("animation",PhotonTargets.all);
}

}

 

 

 

oder

 

photonView.RPC (anim.SetBool ("ForwardPistol", true), PhotonTargets.All);

 

Danke in Voraus und sorry wegen den ganzen Fragen XD ^_^

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich habe jetzt ein Spieler und möchte das mit Statements machen(transform.translate und mit dem animator die animation).

Könnte ich theoretisch ein Bool verschicken,das diese Statements auf jedem client für diesen einen Spieler auf true geht ? und das dieser Spieler dann auf jedem client den Animator abspielt und die transform.translate ? mit einem [RPC]

 

 

 

 

Wie würde ich jetzt eigentlich transform.translate verschicken ? wenn man es mit einem RPC verschicken würde,wäre es ja nur kurz und es täte nicht nach vorwärts gehen,ich glaube da müsste man schon was mit Statements machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast du denn ausprobiert wie das aussieht mit 3x pro Sekunde senden? Mir hat bei meinen Spiel zum Beispiel nicht mal 10x ausgereicht. Deswegen hab ich auf 20 erhöht.

 

Und du kannst Messages niemals erhöhen. Auch wenn du kaufst. Das haben die da sogar stehen.

 

Außerdem macht es kein Unterschied, wenn du Rotation und Position getrennt sendest. du sendest die Rotation ja schon über die Serialze... Methode also verbrauchst du bereits grob gesagt 3x (ohne jetzt zu berechnen) Messages. Dann kannst du die Position auch mit senden. Dann hast du immer noch 3x Messages.

 

 

Also ich mache das normalerweise nicht, aber hab mal hier ein fertigen Script wie das ungefähr aussieht.

Kannst du hier anschauen:

http://pastebin.com/TY0SjqzA

 

Das muss man auf ein Charakter drauf packen. Den Charakter kannst du danach einstellen. Da ist ein Regler zum Beispiel wie viel Sekundenabständen ein RPC für Position und Rotation aufgerufen werden soll. Je kleiner umso schöner sehen die Bewegungen aus (weil man ja schneller sendet ) aber dafür auch mit Messages kacke, dass mal soviel verbraucht.

Also 0.1 wäre 10x in der Sekunde.. warum? Weil 0.1 Millisekunden sind. Hab eingestellt, dass man maximal 2 Sekunden machen kann.

 

Wenn jemand highping hat kann es mal bissel nervig sein.

 

Achja DREHEN habe ich nicht dabei.

 

Wenn du willst kann ich das Projekt auch mal hochladen. Da gibst halt nichts außer, dass man testen kann rumlaufen kann. Keine Animation usw. Kein drehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sehr vielen dank für dein Beitrag MaZy :D:) werde mir alles mal angucken

 

 

Also wenn ich zum Beispiel 3x pro Sekunde die rotation sende mit serialize,dann kann ich gleich auch noch die position zu sende und es sind immer noch 3 Messages grob ?

 

 

 

Also wenn du das Projekt hochladen könntest wäre echt toll ^_^:D

 

 

Theoretisch könnte man dann nur OnPhotonSerializeView nehmen und wenn man zum beispiel über 0.3f von der zuletzt aufgenommen position geht könnte man 1 message mit Serialize abschicken und dann wird wieder eine neue position aufgenommen und das gleiche läuft nochmal ab.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe das hier noch nicht ganz

movement.z = Input.GetAxisRaw("Vertical");
movement.x = Input.GetAxisRaw("Horizontal")

 

 

mit w,a,s,d ist nichts die rede im script,aber ist getAxisRay nicht für die Maus oder bedeutet das so in etwa sowas wie auslesen der Achsen

 

 

 

EDIT:

 

achso und kann man sendrate hoch lassen bei photonnetwork und dann nur Serilaize runter machen :P

 

was ist [PunRPC] ? :)

 

 

Danke in voraus ^_^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja immer noch 3. Stell dir vor die Messages wären Briefe. Ob du nun ein Blatt rein tust oder noch zusätzlich Postkarte rein tust, verschickst du doch trotzdem ein Brief oder nicht? Und bei Messages ist genau so. Ob du nun Position oder zusätzlich Rotation rein tust schickst du immer noch nur einmal alles zusammen.

 

Input.GetAxisRaw also, wenn du das nicht kennst, dann hast du eindeutig wenig Ahnung von Unity und musst noch erst mal lernen bevor du Multiplayer machen willst :P

 

Es gibt einmal Input.GetAxis und einmal Input.GetAxisRaw.

Wenn man eine Bestimmte Tastet drückt werden sie aktiviert. GetAxis geht langsam von 0 auf 1 hoch oder runter auf -1. GetAxisRaw geht direkt auf 1 oder -1. Diese Namen Horizontal und Vertical kann man in dem Editor einstellen wie sie heißen sollen und welche Tasten man Drücken kann. Da kann man alles machen. Maus, Controller, Tastatur usw. Wenn man nichts verändert hat: Vertical bedeutet W oder S (deswegen 1 oder -1) und Horizontal A oder D.

Das kann man alles im Editor einstellen. Du kannst da auch eigene Namen eingeben sowas wie "HorizontaleBewegung" oder "Schießen 1" oder sonst was du willst.

 

[PunRPC] ist von Photon, Die haben den namen geändert. Das heißt nicht mehr [RPC] oder so. Wahrscheinlich, weil Unity jetzt UNET hat.

 

Und hier ist das Projekt Datei.

http://puu.sh/iPslJ/1ce0824bdd.rar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Messages könntest du selber ausrechnen lassen und anzeigen. Beispiel unter OnPhotonSerliaze bei isWriting isReading immer einfach sowas wie MessageCounter++ machen. Dann erhöht sich die Zahl ja jedes mal, wenn etwas empfangen oder gesendet wird. Bei RPC auch machen. Und jedes mal nach einer Sekunde setzt du aber die Zahl wieder auf 0. Weil ja Limit nur pro Sekunde ist. Damit könntest du sehen, wie viel du pro Sekunde schickst.

 

Konntest auch komplizierter machen und nen Log Datei machen erstellen lassen. Dann kannst du sogar nachher verfolgen wann sich wie viel erhöht hat.

 

Und dann gibst noch die ganz leichte variante. Einfach bei https://www.exitgame...ltime/Dashboard unter Analyze anschauen. Da steht das nochmal. Muss nur die Zeitabstände richtig auswählen. Die laufen Live.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...