Jump to content
Unity Insider Forum

malzbie

Moderators
  • Content count

    4,706
  • Joined

  • Last visited

  • Days Won

    287

malzbie last won the day on August 17

malzbie had the most liked content!

Community Reputation

1,436 Excellent

1 Follower

About malzbie

  • Rank
    Moderator
  • Birthday 10/30/1968

Profile Information

  • Gender
    Male
  • Location
    Kassel, Hessen, Deutschland

Recent Profile Visitors

15,951 profile views
  1. malzbie

    MMO

    Ich habe so nen Server noch nie aufgesetzt, somit kann ich dir zum Servergeschehen und den nötigen Tools nicht viel sagen. Trotzdem kann ich etwas Licht ins Dunkle bringen. Die ganz alte Variante war die, dass du ein netzwerkfähiges Spiel erstellt hast und kopien davon auf verschiedenen Rechnern hattest. Um ein Match zu starten, musste einer der Rechner den Server spielen. Er war also der Host. Alle anderen Rechner waren Clients. Dein Spiel musste nun einige Netzwerkbefehle drauf haben, um überhaupt mal ne Lobby aufzubauen und sich mit den anderen Rechnern zu verbinden. Es ist ja keine richtige Verbindung, aber man kannte die Rechneradressen, an die etwas gesendet werden mussten. Auf jedem Rechner lief das gleiche Spiel, aber nur auf dem Host/Master wurden Dinge gemacht, die nichts mit den Spielern direkt zu tun hatten. (Computergegner usw.) Mit dem Photon Netzwerk und allen anderen ähnlichen Typen, läuft das Verbindungsmanagement jetzt nicht mehr Lokal auf dem Host Rechner, sondern auf einem Server, der alles nötige verwaltet. Natürlich muss das Spiel immer noch Netzwerkbefehle senden. Aber eben nicht zum Host Rechner, sondern zum Photon Server. Also im Endeffekt wurde jetzt das Matchmaking und alle Interpolationsberechnungen ausgelagert. Was das bedeutet, erkläre ich gleich. Die dritte Variante ist die, dass es weiterhin ein Photon Netzwerk gibt, aber zusätzlich all das Spielgeschehen auf einem Server abläuft. Es ist jetzt also nicht mehr so, dass du deine Figur bewegst, dass auf deinem Rechner gemacht wird und dann das Ergebnis zum Server gesendet wird, damit alle anderen Rechner das auch mit kriegen. Nein. Jetzt sendest du nur den Befehl. Der Server macht dann die Bewegung bei sich und sendet dir (und allen anderen Rechnern) das Ergebnis zurück, was dann bei dir angezeigt wird. Na ja, nicht ganz, denn das Netzwerk ist zu langsam, alsdass eine flüssige Bewegung dann zustande käme. Deswegen tut dein Rechner schon etwas. Wie Funktioniert das in einem Netzwerkspiel: Nimm mal an, du hast jetzt nur 2 Rechner verbunden und das Spiel ist ein ganz einfaches 1gegen1 Ballerspiel, wo sich nur die Spielfiguren und Geschosse bewegen. Es gibt keinerlei Bewegungsanimationen, sondern nur etwas, wobei man erkennen kann, in welche Richtung es guckt. Ungefähr jede zehntel Sekunde (viel schneller ist ne Netzwerkverbindung nicht) wird die Position und die Ausrichtung jedes Players an die anderen Rechner übermittelt. Damit du die anderen Player auch siehst, muss quasi je ein Zombi-Prefab der anderen Player in deiner Szene sein. Ist es noch nicht da, wird es instanziert. Zombie deswegen, weil sie sich selber nicht bewegen, sondern nur positionsinformationen von den anderen Rechnern bekommen. Du siehst also deinen Player, den du wirklich steuerst (z.B. mit Transform.Translate) und Zombiegegner, die durch das Netzwerk gesetzt werden. Das ist nicht schön, denn wärend du dich flüssig bewegst, stottern die Gegner und nehmen 10 Mal pro Sekunde eine andere Position ein. Für deine Mitspieler an den anderen Rechnern ist das genauso. Um das zu umgehen, musst du die Bewegung interpolieren, bzw. extrapolieren werden. Dafür nimmst du also die letzte Positionsinfo vom Gegner in den Speicher und sobald die 2. Info kommt, berechnest du daraus einen weiteren Verlauf. Du ahnst jetzt also wo der Gegner beim nächsten Senden sein würde (extrapolation) und bewegst ihn in der 10tel Sekunde weich da hin (interpolation). Passt das nicht, musst du die Position korrigieren. Du kennst das von älteren Spielen, wo die Gegner plötzlich woanders hin gebeamt wurden, weil eine Zeit lang keine Info gesendet wurde und sie jetzt doch ganz woanders sind, als vorberechnet wurde. Diese Vorberechnung nimmt dir das Photon z.B. ab. Du musst also nur wenige Befehle nutzen um infos zu senden und brauchst auch nur wenige Befehle um mit der Info der anderen umzugehen. Wenn jetzt einer der Spieler auf einen anderen schießt muss ja irgendwie ausgewertet werden, ob und wann der Schuss getroffen hat. Außerdem wird bestimmt auch ein Geschoss instanziert. Diese Instanz würde wahrscheinlich vom Erzeuger als echtes Objekt bewegt und von den anderen Rechnern als Zombie angesehen. Treffen würde das Objekt auf der Erzeugerseite aber einen Zombie. Auf der Playerseite eines anderen Spielers wäre das Geschoss aber ein Zombie. Jetzt geht's schon los. Wer soll einen Treffer auswerten? In der Regel ist es der Erzeugerrechner, der das auswertet. Aber da genau ist eben ein Problem welches zum Cheaten einlädt. Jetzt kommen die Spiele-Server ins Spiel! Auf dem Server läuft quasi das gleiche Spiel aber da ist niemand, der irgendeine Figur steuert. Außerdem muss auf dem Server auch nichts großartig dargestellt werden. Der Server kann sich ganz auf das Berechnen konzentrieren. Alle Auswertungen werden also nur auf dem Server gemacht, denn jeder Spieler und auch jedes Projektil ist ein Zombie auf dem Server . Der Server hört auf alle Infos der anderen Player, guckt selbst aber nur zu, interpoliert, berechnet und sendet das Ergebnis zurück. Nur er erkennt, ob jemand getroffen wurde und gibt die Info raus. Es geht aber nicht nur um das Bündeln der Informationen und somit das vermeiden von Synchronisationsproblemen oder Cheaten. Es ist auch eine Entlastung jedes Rechners, denn der Rechner selber muss nun nicht mehr so viel berechnen und kann mehr Power für andere Dinge aufwenden. Also: Auf irgendeinem Medium muss eine Netzwerksoftware laufen, die gewisse Dinge für das Spiel tut. Das kann theoretisch jeder einzelne Rechner (gleichzeitig), es ist aber besser, wenn es gebündelt auf einem Server läuft. Wie z.B. beim Photon Netzwerk. Bei jedem Netzwerkspiel steuert der einzelne Rechner nur seinen eigenen Player. Alle anderen Player werden aufgrund von Infos einfach nur positioniert und ausgerichtet. Um eine flüssige Bewegung zwischen den Infopaketen zu erhalten, muss die Bewegung interpoliert werden. Sind andere Objekte im Spiel, die von keinem Player gesteuert werden und evtl. mit den Playern interagieren können, muss man beim Design entscheiden, welcher Rechner das tun soll. Jeder einzelne Rechner kann gewisse Dinge übernehmen oder aber es tut nur einer. Ein Client kann auch ein Server / Host sein. Er wäre dann ein virtueller Server, der Servertätigkeiten übernimmt, aber trotzdem auch Client ist auf dem gespielt wird. Ein dedizierter Server wäre ein echter Server, auf dem das Spiel ohne eigene Spielfunktion läuft. Er verwaltet somit das Spiel der Clients und wertet gegenseitige Interaktionen aus. Was wird gesendet/empfangen: Ständig die Position und Ausrichtung des Players und aller sich bewegenden Objekte. Jede visuelle Änderung, z.B. der Start einer Animation. Jedes neue Geräusch, wenn ein Objekt instanziert wurde und dann natürlich dessen Position und Ausrichtung. Jedes verschwinden eines Objektes und was sonst noch für die Player wichtig ist. Ich hoffe, ich konnte etwas helfen. Du musst dich trotzdem in die Materie einlesen, denn ich kenne da auch nicht alle Feinheiten. Hab zwar selber mal ein kleines Ballerspiel auf Photonbasis erstellt und ein wenig getestet. Aber das war alles recht überschaubar.
  2. malzbie

    Animation für OpenDoor

    Jaa. Du hast ja die Keys nur bei einer Animation gelöscht. Das musst du dann schon bei beden machen. Aber trotzdem solltest du Jede Schublade einem Emptyobject unterordnen. Jedem Empty gibst du den Animator und auch das Steuerungs-Script. Mach das mit dem Animator, nicht mit der alten Animationskomponente. Du wirst sehen, dass das viel besser geht. Nachdem du das gemacht hast, erzeugst du die 2 Animationen einfach mal neu. Jetzt sollten sich die Positionsangaben auf das Emptyobject beziehen.
  3. malzbie

    Animation für OpenDoor

    Du darfst nur die Y Achse löschen, nicht alle. Wenn du nur die Y Achse löschst kann die Lade eigentlich garnicht woanders hin springen. Zeig mir mal die Keyframes. (Aufgeklappt, also so, dass ich auch die Parameter sehe.
  4. malzbie

    Animation für OpenDoor

    Du hast scheinbar die y Achse mit animiert. Schau dir nochmal die Animation an und lösche die Keys die bei der y Achse sind.
  5. malzbie

    Ein Gebäude in ein anderes Projekt copy and pasten?

    Klar. Mach dir von dem Gebäude ein Prefab Klicke dann das Prefab im Projekt/Asset Ordner mit der rechten Maustaste an und wähle Asset exportieren. Unity sollte dann alle nötigen Dateien zusammensammeln und als ein Asset verbinden. Wenn du dann in dem neuen Projekt dieses Asset importierst, werden alle Ordnerstrukturen aus dem alten Projekt herestellt, die für dieses Asset wichtig waren. Du solltest also vorher schon einmal eine Nützliche Ordnerstruktur erstellt haben. Sowas wie Objekte, wo die Meshes drin sind, Prefabs, wo die Prefabs rein gehören, Materials, Textures usw... Wenn du das nicht geordnet hast, kommt es genauso unordentlich ins neue Projekt.
  6. malzbie

    2 Animationen gleichzeitig abspielen

    Das geht auch ohne splitten, wenn man die Layer im Animator nutzt.
  7. malzbie

    Malzbie's Flipper

    Mein nächster Flipper hat den Titel Playground! Also ein Spielplatz wird das Thema werden. Hier mal ein kleines Video, wie der Flipper im Portrait Mode aussieht. Die Hnadycamera, mag es garnicht, wenn's im Raum dunkel ist. Egal, hauptsache mann kann etwas erkennen.
  8. malzbie

    Malzbie's Flipper

    Seit gestern ist mein neuer Flipper draußen. MUD RACE heißt er. Guckstu:
  9. malzbie

    Assets in Blender für Unity

    Du kannst Animationen in Blender erstellen und die dann in Unity nutzen. Welche Besonderheiten da aber zu beachten sind, kann ich nicht sagen, da ich selber Blender nicht nutze.
  10. malzbie

    Assets in Blender für Unity

    Genau!
  11. malzbie

    Assets in Blender für Unity

    Es gibt 2 Sachen, auf die man immer achten sollte, unabhängig von der Software. 1. Achte auf die Ausrichtung und Platzierung des Pivots. Wenn du aus Blender heraus exportierst, sind höchstwahrscheinlich die Achsen in Unity nicht so, wie du sie erwartest. Die Z Achse zeigt nicht unbedingt in die selbe Richtung. Das ist dann wichtig, wenn du in Unity etwas nach "vorne" bewegen willst. Vorne ist dann plötzlich nicht vorne. Die Position des Pivot ist auch wichtig. Überlege dir, wo der Achsenmittelpunkt am besten sein sollte. Wenn du nämlich ein Männchen bewegen willst, ist es sinnvoll, wenn der Achsenmittelpunkt unten bei den Füßen ist. Da du das nicht in Unity anpassen kannst, musst du das in Blender schon richtig einstellen. 2. Erzeuge maximal Quads. Wenn du Tris oder Quads erstellst und die dann nach Unity rüber bringst, ist alles ok. Sobald du aber 5ecke oder mehr (also NGons) erzeugst, wird Unity selbstständig diese Flächen unterteilen. Das kann die aber die UV Map zerstören und plötzlich hast du falsch gemapte Bereiche in deinem Modell. Ansonsten habe ich die Erfahrung gemacht, dass es besser ist, wenn du via FBX das Modell rüber schiebst. Es gibt zwar für fast jede 3D-SW einen Importer, aber FBX funktioniert meiner Meinung nach am besten.
  12. malzbie

    Unser Projekt: MILEAGE - To The Metal

    Wie? Als Entwickler ist man nicht gespannt sondern zuversichtlich!
  13. malzbie

    Trabant Driver: The Arcade Game

    Schicker Kurs. Warum stehen denn da Leute auf der Strecke?
  14. malzbie

    Unser Projekt: MILEAGE - To The Metal

    Schicke Autos! Bin gespannt.
  15. malzbie

    Trabant Driver: The Arcade Game

    Ich find's super! Aber mal ehrlich: Gibt es Trabbis, die in 4 Sekunden auf 100km/h sind und sogar über 140km/h fahren können?
×