Unity Multiplayer Spiel?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ja, das ist selbstverständlich möglich. Du kannst das über TCP und UDP machen:

https://www.youtube.com/watch?v=MW91_l2dnnU

Ich empfehle dir aber, dass du für den vServer den Server Code in Java und nicht in Unity schreibst, da Unity Serverressourcen verschwenden würde und Java besser für solche Sachen optimiert ist.

Unterschied zwischen TCP und UDP:

TCP: Sendet einen String und überprüft hinterher, ob der Empfänger es auch wirklich empfangen hat. Geeignet für Chats.

UDP: Sendet einen Byte-Array und überprüft nichts. Geeignet für Spielerpositionen und Livestreams.


zSuckyLP  27.06.2018, 17:00

Ja, mit C# und C++ und so geht es auch. Für die maximale Leistung empfehle ich dir C++, aber C# ist auch ok :)

0
verreisterNutzer  27.06.2018, 16:59

Kann leider die Java Sprache nicht sehr gut. Würde das dann mit C# machen, wenn das geht.

0

Photon Networking! ist Kostenlos und bis 20 Spieler Frei du kannst auch mehr haben dies kostet aber. Hier gehts zur Photon engine :https://www.photonengine.com/

du musst dir hier einen Account erstellen danach gehts du in den Asset store und suchst photon Networking und fügst es hinzu

Woher ich das weiß:Hobby

Hallo Agiger03,

ja, das ist möglich. Ob Du dazu in der Lage bist, kann ich natürlich nicht beurteilen.

Gruß


verreisterNutzer  27.06.2018, 16:56

Ja, wie du vielleicht schon bemerkt hast, habe ich hier auf dem Forum öfters danach gefragt, weil ich immer wieder Probleme hatte und auch noch nicht genau weiss, wie ich das mit den Benutzern machen soll.

Aber ich glaube, ich speichere sie in einer Datenbank, ich vermute das ist schneller.

0
AldoradoXYZ  27.06.2018, 17:08
@verreisterNutzer

Hallo Agiger03,

ah, daher kenne ich deinen Namen. Hatte schon einige deiner Beiträge beantwortet, bzw. dies versucht.

Ich behaupte mal, dass Du deine Nutzer sogar in einer Textdatei speichern kannst. Erst wenn Du sehr viele (einige zehn, oder hunderttausend) Nutzer hast, machen sich Vor- und Nachteile der verschiedenen Systeme bemerkbar.

Aber ich stimme zu, dass man auf Performance achten sollte. Wenn es nur darum geht Benutzer zu speichern, dann verschwendet ein DBMS wohl Ressourcen. Da ich vermute, dass Du noch sehr viel mehr Daten speichern möchtest, ergibt ein DBMS natürlich Sinn.

Gruß

0
verreisterNutzer  27.06.2018, 17:24
@AldoradoXYZ

Ja, ich weiss eben noch nicht wirklich, ob DB oder Textdatei besser ist. Bei DB weiss ich halt nicht, wie ich die Passwörter hashe.

Speichern will ich:

Email

Benutzername

Passwort

Level

Geld

0
AldoradoXYZ  27.06.2018, 18:10
@verreisterNutzer

Hallo Agiger03,

wenn Du von Datenbanken gar keine Ahnung hast, diese nicht brauchst und Du sonst nur Zeit damit "verschwenden" würdest. Dann musst Du keine DB nehmen. Du kannst dein Spiel auch ohne Datenbank umsetzen.

Meine Empfehlung wäre eine Schnittstelle zu bauen, sodass Du später leicht eine Datenbank ergänzen kannst, wenn Du das möchtest.

Klar es gibt immer die Leute, die sagen man muss unbedingt Technologie x und y und z einsetzen. Aber am Ende zählt, dass Du das Projekt umgesetzt bekommst.

Wenn Du sowieso nur ein paar Daten persistieren musst, dann reicht auch erstmal eine Textdatei. Wie gesagt, bau es so, dass Du später auf eine Datenbank wechseln kannst. Dazu bietet sich eine Abstraktion der Persistenzschicht ein. Bau einen UserService, oder einen UserPersistenceService. Dieser Service kann dann Benutzer laden und speichern. Möchtest Du später auf eine Datenbank umsteigen, musst Du nur diesen einen Service anfassen und nicht 1000 Stellen in deinem Projekt.

Denke so eine Design sollte allgemein angestrebt werden, damit man Änderungen möglichst leicht implementieren kann.

Gruß

0
verreisterNutzer  27.06.2018, 20:57
@AldoradoXYZ

Kannst du mir irgendwie helfen, wie ich mehrere Clients gleichzeitig auf den Server verbinden lasse? Im Internet nix für mich verständliches gefunden, hier auf dem Forum ebenfalls keine schlaue Antwort, mit der ich was anfangen kann.

0
AldoradoXYZ  27.06.2018, 21:59
@verreisterNutzer

Das Internet ist wirklich voll von Beispielen. Soll es erstmal eine einfache REST werden?

google mal nach "c# rest service", da findest Du zum Beispiel http://www.patrickschadler.com/creating-a-rest-webservice-with-c-sharp/

Bin in der Java-Welt zuhause, da würde ich ne Spring-Application und eine RESTful API anbieten. Solange es nur um den Nutzer geht. Das Beispiel aus der C# Welt sieht aber gut aus und ist nicht überladen.

Ansonsten hat zSuckyLP ein Beispiel zu Sockets geschrieben (TCP oder eben UDP). REST läuft ja per Http (ebenfalls über TCP). Möchtest Du keine RESTful web service implementieren, dann könntest Du auch einfach mal nach "C# socket implementation" suchen. Dann findest Du einfache Beispiele wie https://www.infoworld.com/article/3081443/application-development/how-to-implement-an-asynchronous-socket-in-c.html

Mir ist klar, dass das am Anfang alles recht viel ist. Aber was immer Du auch implementieren wirst, es wird sicherlich lehrreich. Ansonsten könnte man überlegen ob ich dir nen kleinen Server implementiere. Ich weiß aber nicht ob das wirklich hilfreich für dich wäre - beim selbst erarbeiten lernt man eben mehr.

Gruß

0
verreisterNutzer  27.06.2018, 22:04
@AldoradoXYZ

Ich werde mir das Ganze morgen mal anschauen. Was denkst du, braucht so ein C# Server für ein Shooterspiel viel Leistung? Mein vServer ist etwas ausgelastet.

0
AldoradoXYZ  27.06.2018, 22:13
@verreisterNutzer

Das hängt wirklich davon ab was der Server alles machen muss. Wenn Du jede Millisekunde die Position Tausender Spieler und weiter Informationen übertragen musst, dann ist das Ding schnell am Ende.

Wenn Du intelligente Lösungen implementierst, dann kannst Du viel "sparen".

Wenn nur 3 Spieler aktiv sind, dann wird der Server kaum Last haben. Allerdings kannst Du auch bei einem 3 Spieler Spiel so schrecklichen Code schreiben, dass Du jeden Server down bekommst.

Einfach immer drauf achten wie teuer die ausgeführten Aktionen sind.

Gruß

0
verreisterNutzer  27.06.2018, 22:19
@AldoradoXYZ

Okay... Ich erwarte vielleicht wenns mal gut läuft 100 Spieler, glaube kaum, dass es so bekannt wird.

Ist es vielleicht sinnvoll, für jede Runde einen neuen Server (C# Konsolenanwendung) zu starten? Pro Runde sind es maximal 10 Spieler.

0
AldoradoXYZ  27.06.2018, 22:23
@verreisterNutzer

Einen extra Prozess zu starten kostet auch Ressourcen, das würde ich mir schenken. Du hättest mit einem 10-Spieler-Prozess auch nicht das Problem der parallelen Anfragen gelöst, Multi-Threading/"asynchrone Abarbeitung" musst Du in jedem Fall implementieren.

Gruß

0
regex9  28.06.2018, 03:18
@verreisterNutzer

Ob du eine Datenbank oder eine Textdatei nutzt, ist grob gesagt erst einmal egal. Du musst nur schauen, dass es sicher und performant genug ist.

0
verreisterNutzer  28.06.2018, 17:45
@regex9

Ist es möglich, vom Client aus ein Console.WriteLine(); an den Server zu senden?

0
regex9  28.06.2018, 18:02
@verreisterNutzer

Du kannst mit einem Client Nachrichten an den Server schicken. Jedoch nicht mit Console.WriteLine, denn diese Methode ist dazu da, Daten in der Konsole auszugeben.

0
verreisterNutzer  28.06.2018, 18:03
@regex9

Okay...

Hab im Internet eben einen Code dazu gefunden, wie ich das mache.

Für später: Kann der Server dann mit Console.Read(); den geschriebenen Text vom Client auslesen und den dann vielleicht, wenn es ein Befehl ist, diesen ausführen?

0
regex9  28.06.2018, 18:38
@verreisterNutzer

Die Klasse Console bietet (gemäß ihres Namens) nur Methoden an, die Operationen für die Konsole ausführen - ob lesen oder schreiben. Ein Server und ein Client aber kommunizieren über einen völlig anderen Kanal.

Aus Sicherheitsgründen sollte ein Client nie die Gelegenheit bekommen, eine Funktion auf dem Server auszuführen, die für diesen unberechenbar ist. Stattdessen stellt der Server dem Client Methoden zur Verfügung, die er aufrufen kann. Diese können durch ein Interface festgelegt werden.

0