C# realtime multiplayer mivel

Ez a téma lezárásra került a moderátor által. A lezárás oka: Tudástárban egy téma – egy kérdés/probléma elv érvényesül.
C# realtime multiplayer mivel
2019-06-05T13:49:15+02:00
2019-06-30T19:51:47+02:00
2022-10-15T21:40:42+02:00
*deleted_51623945
Sziasztok!

Kezdő programozó vagyok, még csak most ismerkedek a játék készítéssel, de már elég sokáig eljutottam, így elérkeztem egy olyan színtre ahol ezt a megvalósítást multiplayer környezetbe szeretném helyezni. Az lenne a kérdésem, hogy ti milyen programot ajánlanátok 3d multiplayer játék készítéshez?

Probálkoztam mysql-al, de azzal nem az igazi realtime játékot készíteni, viszont webes környezetben is tudok vele dolgozni.

Ti mit javasoltok?
Köszönöm szépen előre is a válaszokat!
Mutasd a teljes hozzászólást!
Szia!
Több módszert is tudok mondani:
-Ha szeretnéd, hogy weben is működjön a multiplayered, akkor tudom ajánlani pl. a SignalR-t, mert viszonylag könnyű C#-al is és JavaScript-el is integrálni. Itt annyi a teendő, hogy egy webes SignalR hub projektet kell készíteni és erre kell csatlakozni a játékkliensekkel, a SignalR-en belül pedig el tudod dönteni, hogy az egyes játékosok üzenetei fogadásával milyen üzenetet küld tovább a többi játékosnak. ezen kívül könnyű olyan dolgokat csinálni benne, mint például broadcast-olni játékkörök végét, vagy eltárolni a játékosok pontszámait. Ezt a megoldást azért preferálom, mert a SignalR automatikusan kezeli a hibákat, lekapcsolódásokat, emellett a szerver oldalról is lehet üzenetet küldeni a klienseknek, mindkét oldalon eseménykezelők futnak automatikusan, amikor üzenet érkezik.

-Ha egyszerű megoldást szeretnél és vannak olyan játékelemeid, amiknek rejtve kell maradnia játékosok előtt (pl. fog of war), akkor a legkézenfekvőbb sima TCP-n keresztül megoldani. Itt elég készíteni egy szerver appot, ami lehet egy sima konzolos app, ami fogadja a bejövő TCP kapcsolatokat és menedzseli, hogy ki milyen üzenetet kap. Az előny, hogy könyebb az üzeneteket kezelni, a hátrány, hogy mindig vizsgálni kell, hogy épp mi folyik a TCP stream-en.

-A harmadik, ami eszembejut az a puszta p2p megoldás szerver nélkül, ezt teljesen jól nekem sem sikerült megcsinálni, de ha kihívásra vágysz, akkor hajrá! :D

Ha ezeken túllendülsz és komolyabb dolgot szeretnél, akkor tudom ajánlani a Unity-t és az Unreal Engine-t, mindkettő ingyenes és van beépített megoldás multira.

-----------------------------------------------------------------------------------------

Lehet félreértettem a kérdést, a fenti válasz a saját c#-ban kreált játék multiplayer-re való ültetésére válasz.

Ha C#-ban tudsz programozni, akkor tényleg a Unity lesz a te barátod.
Mutasd a teljes hozzászólást!

  • A mysql egy adatbázis motor, emlékeim szerint. Mi köze a 3d-hez ?

    Jó esély van rá, hogy a Unity a te embered.
    Mutasd a teljes hozzászólást!
  • Szia!
    Több módszert is tudok mondani:
    -Ha szeretnéd, hogy weben is működjön a multiplayered, akkor tudom ajánlani pl. a SignalR-t, mert viszonylag könnyű C#-al is és JavaScript-el is integrálni. Itt annyi a teendő, hogy egy webes SignalR hub projektet kell készíteni és erre kell csatlakozni a játékkliensekkel, a SignalR-en belül pedig el tudod dönteni, hogy az egyes játékosok üzenetei fogadásával milyen üzenetet küld tovább a többi játékosnak. ezen kívül könnyű olyan dolgokat csinálni benne, mint például broadcast-olni játékkörök végét, vagy eltárolni a játékosok pontszámait. Ezt a megoldást azért preferálom, mert a SignalR automatikusan kezeli a hibákat, lekapcsolódásokat, emellett a szerver oldalról is lehet üzenetet küldeni a klienseknek, mindkét oldalon eseménykezelők futnak automatikusan, amikor üzenet érkezik.

    -Ha egyszerű megoldást szeretnél és vannak olyan játékelemeid, amiknek rejtve kell maradnia játékosok előtt (pl. fog of war), akkor a legkézenfekvőbb sima TCP-n keresztül megoldani. Itt elég készíteni egy szerver appot, ami lehet egy sima konzolos app, ami fogadja a bejövő TCP kapcsolatokat és menedzseli, hogy ki milyen üzenetet kap. Az előny, hogy könyebb az üzeneteket kezelni, a hátrány, hogy mindig vizsgálni kell, hogy épp mi folyik a TCP stream-en.

    -A harmadik, ami eszembejut az a puszta p2p megoldás szerver nélkül, ezt teljesen jól nekem sem sikerült megcsinálni, de ha kihívásra vágysz, akkor hajrá! :D

    Ha ezeken túllendülsz és komolyabb dolgot szeretnél, akkor tudom ajánlani a Unity-t és az Unreal Engine-t, mindkettő ingyenes és van beépített megoldás multira.

    -----------------------------------------------------------------------------------------

    Lehet félreértettem a kérdést, a fenti válasz a saját c#-ban kreált játék multiplayer-re való ültetésére válasz.

    Ha C#-ban tudsz programozni, akkor tényleg a Unity lesz a te barátod.
    Mutasd a teljes hozzászólást!
  • szerintem a tcp lesz nekem a nyerő, már bele is mélyedtem, már megcsináltam hogy a server tárolja az összes clienst és ha valamelyik cliens ír valamit akkor a többi  is megkapja. Már csak egy kérdésem lenne.... Ezekkel csak üzenetet lehet küldeni, már az is jó lenne ha array-t is lehetne?
    Mutasd a teljes hozzászólást!
  • Ha bonyorultabb dolgot szeretnél küldeni, akkor sokszor érdemes szerializálni (JSON vagy XML formába átalakítani) és úgy küldeni string-ként, a túloldalon pedig vissza tudod alakítani az eredeti formájára.
    Mutasd a teljes hozzászólást!
  • hmm.. tudnál esetleg küldeni példát, vagy valami linekd, hogy azt hogyan is kellene légyszives. Köszönöm!
    Mutasd a teljes hozzászólást!
  • ja egyébként optimalizálás miatt bson-ba kéne inkább, nem plain jsonba.
    Mutasd a teljes hozzászólást!
  • itt egy példa tömbre (ez konkrétan xml, de json serializer is ugyanígy működik, csak be kell húzni a newtonsoft.json-t referenciaként):

    How to send integer array over a TCP connection in c#
    Mutasd a teljes hozzászólást!
  • bson-ról azt olvastam, hogy nem sokkal jobb, mint a json, sokszor még több helyet is foglal, másrészt a json kicsit könyebben olvasható emberi szemmel is. :D
    Mutasd a teljes hozzászólást!
  • A Socket-et választottam végül, de van egy kis probléma.
    ha rövid idő alatt több infót küldök át a szervernek, akkor nem egyesével küldi el, hanem egy üzenetként kb 2-3-mat.
    Ezt hogyan lehetne kiküszöbölni??
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: Tudástárban egy téma – egy kérdés/probléma elv érvényesül.
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd