.[ ČeskéHry.cz ].
Photon networking
Jdi na stránku Předchozí  1, 2, 3, 4  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 12. červen 2015, 14:21:08    Předmět: Odpovědět s citátem

Stal sa Vam niekedy takyto problem? Pri prichode ale hlavne pri odchode hracov vyskocili cisla messages na zavratne tisice. Stal sa niekomu takito problem?




_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 12. červen 2015, 17:55:33    Předmět: Odpovědět s citátem

Takhle to vypadá u nás v Grenade Madness:

Kolik máš photon views? Není možný, že se ti duplikují nějakou náhodou?
Každej v defaultu udělá 20msg/s co vím.
_________________
Jeden z vývojářů hry Grenade Madness.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 12. červen 2015, 18:18:02    Předmět: Odpovědět s citátem

Inak co som pozeral tvoj graf tak vy sa dostanete aj cez 320 ak budete hrat 8. Ja to mam komplikovanejsie aj v tom ze prenasam nielen poziciu ale aj rotaciu tanku a hlavne zvlast. Cize je to horsie ako len prenasat poziciu a rotaciu jedneho objektu
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 13. červen 2015, 08:42:19    Předmět: Odpovědět s citátem

A je k tomu důvod? Já všechny data co přenáším tak přenáším ve struktuře a v případě, že potřebuju šetřit data tak kde vím, že jsou malý hodnoty tak to převedu na bajty, případně rotaci nepřenáším jako Quaternion ale jako obyčejný úhly.

Taky jsem to udělal, že PhotonView má jenom každej hráč a aréna, tj max 8+1. A co jsem to zkoušel s 8mi klientama tak jsem se do 500msg vlezl.

Edit: možná jim napiš na exitgames forum, mohli by vědět víc, mě by to taky zajímalo.

Pro inspiraci:
kód:


// enumy dědí : byte/ushort, protože mají pár flagů

#region Network serialization / deserialization + interpolation

      [StructLayout(LayoutKind.Sequential, Pack = 1)]
      public struct NetworkProperties
      {
         public Vector3 position;
         public float angleY;
         public State state;
         public float speedMultiplier;
         public float legsRotation;

         public WeaponRecycler.WeaponType currWeaponType;

         public int score;
         public int boxes;
         public int frags;
         public int ping;

         public int numBonusGrenades;

         [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = Config.Grenades.maxSerializedCount)]
         public GrenadeBase.NetworkProperties[] activeGrenades;
      }

      public byte[] networkProperties
      {
         get
         {
            var np = new NetworkProperties();

            np.position = position;
            np.angleY = angleY;
            np.state = state;
            np.speedMultiplier = speedMultiplier;
            np.legsRotation = legsRotation;
            np.currWeaponType = currWeaponType;

            np.numBonusGrenades = numBonusGrenades;
            np.activeGrenades = new GrenadeBase.NetworkProperties[Config.Grenades.maxSerializedCount];

            np.score = score;
            np.boxes = boxes;
            np.frags = frags;
            np.ping = PhotonNetwork.GetPing();

            int i = 0;
            for(int j = activeGrenades.Count - 1; j >= 0; j--)
            {
               if(i++ > Config.Grenades.maxSerializedCount)
                  break;

               var g = activeGrenades[j];

               if(g != null)
               {
                  np.activeGrenades[i] = g.networkProperties;
               }
            }

            return StructSerializer.Serialize<NetworkProperties>(np);
         }
      }

#endregion

//Deserializace
NetworkProperties np = StructSerializer.Deserialize<NetworkProperties>((byte[])stream.ReceiveNext());


using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class StructSerializer
{
   public static byte[] Serialize<T>(T msg) where T : struct
   {
      int objsize = Marshal.SizeOf(typeof(T));
      byte[] ret = new byte[objsize];
      System.IntPtr buff = Marshal.AllocHGlobal(objsize);
      Marshal.StructureToPtr(msg, buff, true);
      Marshal.Copy(buff, ret, 0, objsize);
      Marshal.FreeHGlobal(buff);
      return ret;
   }

   public static T Deserialize<T>(byte[] data) where T : struct
   {
      int objsize = Marshal.SizeOf(typeof(T));
      System.IntPtr buff = Marshal.AllocHGlobal(objsize);
      Marshal.Copy(data, 0, buff, objsize);
      T retStruct = (T)Marshal.PtrToStructure(buff, typeof(T));
      Marshal.FreeHGlobal(buff);
      return retStruct;
   }
}

_________________
Jeden z vývojářů hry Grenade Madness.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 15. červen 2015, 08:35:28    Předmět: Odpovědět s citátem

RS napsal:
Stal sa Vam niekedy takyto problem?

Ne Smile Neco delas hodne spatne. Ale moc me nenapada, jak se ti tohle mohlo povest. Co treba buffered RPCs? Kolik tam mas PhotonViews a vytvaris nejake za behu?

Jatro.m:
Nebylo by nahodou lepsi pouzivat custom properties pro veci jako skore, aktualni zbran nebo ping? A co tam posilas za info o tech granatech? Doufam, ze ne jejich polohu Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 15. červen 2015, 09:36:09    Předmět: Odpovědět s citátem

JJ urcite pouzivat player properties Smile No stale to vysetrujem kde moze byt problem. Buffered nepouzivam, riesim miesto toho ze ked sa niekto pripoji tak posle update stavu hry novemu hracovi
_________________


Naposledy upravil RS dne 15. červen 2015, 09:48:08, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 15. červen 2015, 09:38:13    Předmět: Odpovědět s citátem

Netusite ako zistit ked padne hracovi pripojenie? Aby neostal v zastavenej hre ale aby ho aspon presunulo do menu. OnDisconnectedFromPhoton mi funguje len na rucne odpojenie. Dik
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 15. červen 2015, 18:49:55    Předmět: Odpovědět s citátem

citace:
Jatro.m:
Nebylo by nahodou lepsi pouzivat custom properties pro veci jako skore, aktualni zbran nebo ping?


Ano jsou super, ale osobně mi vadilo kolik to naalokuje paměti při jedné operaci. Doporučuju zkouknout profiler.

Z důvodu, že tyhle data se ve hře mění prakticky pořád, tak to posílám v jedné msg zároveň s pozicema a dalšíma herníma datama. Pořád je tam místo pro optimalizaci.

citace:
A co tam posilas za info o tech granatech? Doufam, ze ne jejich polohu

Jo, posílám si pozici a stav + další data. Imho u prototypu kterej nemá autoritativní server to jinak nejde.

citace:
Jak zjistit jestli uživatelovi spadlo připojení, nebo cokoliv jinýho:



kód:


      public override void OnLeftRoom()
      {
         ForceLeaveRoom();
      }

      public override void OnDisconnectedFromPhoton()
      {
         Debug.Log("OnDisconnectedFromPhoton");
         ForceLeaveRoom();
      }


      public override void OnFailedToConnectToPhoton(DisconnectCause cause)
      {
         Debug.Log("OnFailedToConnectToPhoton " + cause);
         ForceLeaveRoom();
      }
[/code]
_________________
Jeden z vývojářů hry Grenade Madness.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 16. červen 2015, 07:24:05    Předmět: Odpovědět s citátem

citace:
Ano jsou super, ale osobně mi vadilo kolik to naalokuje paměti při jedné operaci. Doporučuju zkouknout profiler.

Nemam s tim vubec zadny problem ani na mobilech. Jenom je dulezite nastavit PhotonNetwork.SendMonoMessageTargets, aby se zabranilo volani PhotonNetwork.FindGameObjectsWithComponent() po kazde udalosti "on property changed".

citace:
Z důvodu, že tyhle data se ve hře mění prakticky pořád

Skore, zbran a ping se snad nemeni kazdych 100 ms... Smile

citace:
Jo, posílám si pozici a stav + další data. Imho u prototypu kterej nemá autoritativní server to jinak nejde.

Zacal bych proste jednoduchym RPC o hozeni granatu z urcite pozice nejakym smerem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 16. červen 2015, 08:11:56    Předmět: Odpovědět s citátem

citace:
Nemam s tim vubec zadny problem ani na mobilech. Jenom je dulezite nastavit PhotonNetwork.SendMonoMessageTargets, aby se zabranilo volani PhotonNetwork.FindGameObjectsWithComponent() po kazde udalosti "on property changed".

O tomhle jsem nevěděl, že to jde vypnout. Vím že tam byla jedna funkce co sežrala hodně CPU času, což bude asi co píšeš a potom ta alokace, ale ta je vcelku jedno když se to nevolá každejch 500ms.

citace:
Skore, zbran a ping se snad nemeni kazdych 100 ms... :)

Měl jsem to v těch Custom Props, ale přehodil jsem to, protože mi to dělalo zbytečný špičky ve výkonu.

citace:
Zacal bych proste jednoduchym RPC o hozeni granatu z urcite pozice nejakym smerem.

Toto jsem zavrhl z důvodu, že ta fyzika vychází všude jinak. Buďto by to musel simulovat server a nebo každej hráč a potom interpolovat.
Dokážu si představit, že by to dělalo problémy při výpočtu zásahů.[/quote]
_________________
Jeden z vývojářů hry Grenade Madness.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 16. červen 2015, 09:11:09    Předmět: Odpovědět s citátem

citace:
Toto jsem zavrhl z důvodu, že ta fyzika vychází všude jinak.

To je fakt, ale kdyz nastavis rozumne fixedTimeStep a udelas ty granaty dost velke a nenechas je odrazet se od hracu, tak celkem nebude problem a skonci na vsech klientech na stejnem miste. Spousta mobilnich her to dela presne takto (RPC o hozeni granatu + lokalni simulace).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 16. červen 2015, 09:44:27    Předmět: Odpovědět s citátem

Radis:
právě toto by byl problém, je tam x typů granátů + jsou docela malý, některý se odráží uplně od všeho a tam jsem právě počítal, že to nevyjde stejně na všech klientech.

Ve finálním produktu chci aby byl autoritativní server, protože toto se nedá ošetřit proti podvádění.
_________________
Jeden z vývojářů hry Grenade Madness.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 16. červen 2015, 12:03:46    Předmět: Odpovědět s citátem

ja som napriklad pomaly letiace strely tiez robil tak ze som ich spawnol cez rpc a na vsetych klientoch to leti cca stejne. Mensie lagy budu vzdy
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 1. červenec 2015, 09:17:57    Předmět: Odpovědět s citátem

Mozno to niekomu pomoze: po update na novy photon networking ten pruser zmizol. Zjavne tam mali bug, pretoze teraz mi to vobec nerobi. Teraz som mal max 300 messages pri 8 hracoch ked sa odpojili naraz , predtym aj 15 tisic messages.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 30. červenec 2015, 13:30:45    Předmět: Odpovědět s citátem

Vedel by mi niekto objasnit ako je to s tymi photon CCU? Pri predplatenom pocte napriklad 100 CCuto je na vsetky regiony dokopy alebo pre kazdy region je tych 100 ccu zvlast?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4  Další
Strana 3 z 4

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna