Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

AniProGuy2

Members
  • Content count

    59
  • Joined

  • Last visited

Community Reputation

1 Neutral

About AniProGuy2

  • Rank
    Advanced Member
  1. Also das mit dem authorativen Server klingt natürlich logisch und auch mehr als wünschenswert. Allerdings bin ich mir nicht sicher, inwiefer nich das umsetzen kann, da wie gesagt meine Fähigkeiten in diesem Bereich noch nicht so ausgereift sind. Allerdings werde ich mir das definitiv einmal ansehen und eventuell auch einmal ausprobiere (je nachdem, wie schwierig das ist). Aber ansonsten ist meine Variante nachvollziehbar, bzw. logisch, oder? Es ist natürlich sehr cheatanfällig, das ist richtig und leider wohl auch mit meiner Umsetzung nicht wirklich vermeidbar
  2. Hallo liebe Community, ich arbeite ja bereits seit einiger Zeit an einem Spiel, welches ich durch PUN netzwerkfähig machen möchte. Dabei handelt es sich allerdings um meinen ersten Versuch, Networking in einem Spiel umzusetzen und dementsprechend bin ich auf diesem Gebiet auch noch ein Anfänger (wobei ich schon einiges gelernt habe, in den letzten Monaten). Nun stellt sich mir allerdings eine grundsätzliche Frage zum Thema "Synchronisation" für mein Spiel. Und zwar ist die Synchronisation von Spieler-Objekten in meinen Augen noch verhältnismäßig simpel. Client A hat seinen Spieler und auf diesem Spieler lasse ich alle wichtigen Funktionen laufen, deren Auswirkungen (Animationen hauptsächlich) ich dann auf allen anderen Clienten für dieses Spieler-Objekt nachmachen lasse (dafür kann ein Spieler-Objekt immer im aktiven und im nicht-aktiven Modus sein, sprich selbst aufführen oder nachmachen). Damit gibt es soweit eigentlich auch keine Probleme. Was mir allerdings Kopfschmerzen bereitet, sind Nicht-Spieler-Objekte. In meinem Spiel sind diese ein essentieller Bestandteil des Grundkonzeptes. So gibt es z.B. Baumaterial wie Holz oder Steine und auch Waffen wie Bomben, die als Objekte in der Landschaft herumliegen, und mit denen jeder Spieler interagieren kann (z.B. diese aufsammeln). Nun ist für mich die Sychronisation dieser Objekte ein großes Fragezeichen. Und zwar ist es meines Wissens nach ja so, dass die Position eines Objektes - nehmen wir einmal das Spieler-Objekt - immer von Besitzer des Objektes hin zu den anderen Clienten synchronisiert wird. Sprich, wenn Client A seinen Spieler bewegt, wird diese Bewegung zu allen anderen Clienten synchronisiert. Allerdings haben besagte Nicht-Spieler-Objekte ja eigentlich keinen Besitzer, da jeder Client das gleiche "Anrecht" auf sie hat, sprich mit ihnen interagieren und sie aufsammeln kann. Somit steht nicht statisch fest, von welchem Clienten aus z.B. ihre Position zu den anderen Clienten synchronisiert werden muss. Und genau das ist für mich das Problem. Mein bisheriger Lösungsweg sieht folgendermaßen aus: Wird eines dieser Nicht-Spieler-Objekte von einem Spieler aufgesammelt, wird automatisch dieser Spieler zum neuen "Besitzer", was via "Ownership Transfer" in PUN umgesetz wird. Die Position dieses Objektes und auch die Berechnungen im Objekt werden nun von besagtem Spieler aus sychronisiert (das Aufsammeln dieser Objekte stellt in meinem Spiel glücklicherweise in den meisten Fällen die Grundlage einer Interaktion mit ihnen dar). Sammelt ein Spieler also nun eine Bombe auf und wirft diese auf einen anderen Spieler, ist das Treffen der Bombe und somit der entsprechende Schaden für den anderen Spieler, davon abhängig, ob die Bombe in der Version des "Aufsammlers" auch wirklich trifft. Das liegt daran, dass das Treffen und all seine Konsequenzen (Explosion, Schade, Zerstörung der Bombe) nur bei dem "Aufsammler" be,-und errechnet werden und zu allen anderen Clienten nur sychnronisiert wird (der Aufsammler ist ja wie bereits gesagt der Besitzer). Das Prinzip is also gleich dessen der Spieler-Objekte, nur dass der Besitzer nicht mehr statisch ist, sondern durch das Aufsammeln eines Objektes wechseln kann. Somit ist eine Sychronität dieser Objekte (sofern ich es richtig umsetze ;P) immer gewährleistet. Alleridings ist es auch möglich, dass in der Version des Aufsammlers die Bombe aus besagtem Beispiel trifft und Schaden macht, aber in der Version des Ziels dies gar nicht der Fall ist (durch einen Lagg oder aus anderen Gründen). In diesem Fall ist also der Besitzer im Vorteil. Meine eigentliche Frage ist nun: Haltet ihr dieses Konzept für sinnvoll? Oder gibt es da viel bessere Lösungswege? Oder habe ich da etwas komplett falsch verstanden und es ist eigentlich ganz einfach? ^^ Ich bin dankbar für jede Hilfe! mfG, AniProGuy2
  3. .txt File nach erstellen direkt bearbeiten?

    Ok, danke für die Hilfe. Das werde ich direkt ausprobieren! Gibst immer super Hilfe! Danke dafür ^^
  4. Hallo liebe Community, Ich habe schon seit längerem mit dem Problem zu kämpfen, dass ich eine .txt File nicht bearbeiten kann, nachdem ich sie erstellt habe, sofern ich beides in der selben Methode mache. Ich verstehe nicht genau warum, aber es kommt immer der Error "Sharing violation on path", wenn ich es versuche. Mein Code ist recht simpel: File.Create (path); StreamWriter currentClonkData = File.AppendText (path); currentClonkData.Close (); Weiß jemand von euch, was ich machen muss, um beides in einer Methode tun zu können? MfG, AniProGuy2
  5. PlayerPrefs in neuer Scene abfragen?

    Dazu kann ich nur sagen: "verdammt ist mir das peinlich!" Danke xD Damit haben 2 Stunden des verzweifelten Suchens ein Ende!
  6. PlayerPrefs in neuer Scene abfragen?

    Hallo Community, Ich habe ein Problem mit den PlayerPrefs, das ich allein einfach nicht lösen kann. Das Prinzip dessen, was ich machen will, ist recht simpel erklärt. Ich mache ein Multiplayer Spiel mit der Photon Engine und dabei gibt es eine Integer "HostOrClient" in den Playerprefs, die jenachdem ob man hostet oder joint auf 0 oder 1 gesetzt wird. Damit wird dann in der Lobby-Scene gearbeitet, also z.B. ob man das Spiel starten kann oder ob man ein neues Passwort setzen kann usw. Das Problem ist nur, dass wenn ich beim joinen die Integer auf "1" setze und dann in der Lobby-Scene abfrage, sie dort immernoch als "0" angegeben wird. Wenn ich in der Registry nachschaue, ist sie aber dort auch "1". Das ist der Scriptteil für das Joinen. Im Prinzip wird durch das Klicken des Buttons einfach die "JoinRoom" Methode aufgerufen. Nachdem man in den Photon Room gejoint ist, kommt dann "OnJoinedRoom" zurück und man kommt öffnet die Lobby-Scene. // join room void JoinRoom () { PlayerPrefs.SetInt ("HostOrClient", 1); joinedRoom = true; PhotonNetwork.JoinRoom (roomInfo.Name); } // open lobby public void OnJoinedRoom () { if (joinedRoom) SceneManager.LoadScene ("Lobby"); } Und in der Lobby-Scene wird dann dieses Script hier aufgerufen (nur der wichtige Teil versteht sich). Ausgegeben wird dann aber "0" und nicht "1" // start void Start () { print (PlayerPrefs.GetInt ("HostOrCLient")); Könnt ihr mir helfen? Ich verstehe das echt nicht. Wenn ich dann übrigens das Spiel starte (also das eigentliche Level lade) und dort nochmal die Integer abfrage, ist sie dann "1" o.O Danke schonmal im Voraus, MfG, AniProGuy
  7. Wert aus Hashtable als String auslesen?

    Ok danke, werde ich machen ^^
  8. Wert aus Hashtable als String auslesen?

    @Mark Achso, das wusste ich gar nicht >.< Danke! @Zer0Cool Tatsache, bei den Settings hängt am Ende noch "13 0 13 0 13 0" dran >.<
  9. Wert aus Hashtable als String auslesen?

    Wenn ich es via "print" in die Konsole schreibe, dann ist dort kein \r dabei. Die Theorie klingt zwar logisch, aber ich gehe nicht davon aus, dass das bei mir der Fall ist. . Hier aber mal das Script, mir dem ich die .txt in die Hashtable (bzw. mittlerweile Dictionary) lade: StreamReader sr = new StreamReader ("Settings/Settings.txt"); string[] import = sr.ReadToEnd ().Split ('\n'); sr.Close (); string key; string value; for (int i = 0; i <= import.Length - 1; i++) { key = ""; value = ""; int index = import [i].IndexOf (":"); for (int j = 0; j <= import [i].Length - 1; j++) { if (j < index) key += import [i] [j]; else if (j > index) value += import [i] [j]; } settings.Add (key, value); }
  10. Wert aus Hashtable als String auslesen?

    @ Zer0Cool Die Strings sind definitiv richtig, weil ich sie aus einer .txt in die Hashtable reinlade und dann auch direkt das abfrage, was in der .txt steht. Ich kann gar keinen Schreibfehler haben, aber natürlich habe ich das immer wieder geprüft. @ Hrungdak Das ist eine ziemlich gute Idee! Ich habe zwar für mein Problem mittlerweile eine andere Lösung gefunden, aber ich werde mir das defintiv für die nächsten Male merken. Danke!
  11. Wert aus Hashtable als String auslesen?

    Ich antworte vielleicht etwas spät, aber genau das mache ich gerade ^^ Ich lese Strings aus einem Dictionary aus und vergleiche sie, was aber genauso wenig funktioniert...
  12. Hallo liebe Community, Ich bin gerade dabei, meinem Spiel eine eigene "Settings" funktion zu geben, also einfach eine gewisse personale Einstellbarkeit. Die dazugehörigen Werte speichere ich in einer hastable (und später dann in einer .txt), was auch super funktioniert. Allerdings ist es nun so, dass ich diese Hashtable gern auslesen würde und einige Werte dort als Strings gespeichert werden. Ein bestes Beispiel ist die Einstellung, ob Chatlogs in Spielelobbies gespeichert werden sollen oder nicht. Der entsprechende Wert ist ein String und kommt aus einem Dropdown-Menü. Diesen speichere ich dann in der Hashtable. Wenn ich ihn nun auslese und zurück zu einem String konvertiere, kann ich diesen aber nicht abfragen. Es kommt zwar kein Error, aber die Abfrage kann niemals einen postiven Wert erhalten, also true werden. Ich versteh nicht so ganz warum, aber es schonmal kein Fehler in der Abfrage, denn der Wert wird richtig abgefragt. Wenn ich allerdings eine Integer abspeichere, sie aus der Hashtable zu einem String konvertiere und dann zu einer integer, kann ich sie abfragen. Ich verstehe das nicht so ganz, da ich auch erst seit kurzem mit Hashtables arbeite. Ich würde mich sehr freuen, wenn mir hier jemand weiterhelfen und es mir ggF. auch gleich richtig erklären könnte ^^ MfG, AniProGuy2 Mein Code: (die Console gibt mir nicht die "1" aus, auch wenn der Wert in der Hashtable eigentlich der Richtige ist) if (settings["SaveLobbyChatLog"].ToString() == "Don't save") print (1);
  13. Hallo Cummunity, Ich habe ein kleines Problem (mal wieder ^^). Und zwar möchte ich bei meinem Spiel alle offenen Spiele (Rooms) in einer Liste haben. Das funktioniert soweit auch ganz gut, sofern ich für die List-Items nur die jeweiligen RoomOptions auslese (die Rooms selbst bekomme ich ja durch PhotonNetwork.GetRoomList). Nun möchte ich aber auch, dass dort der Name des Hosts angezeigt wird, welchen man in den Spieleeinstellungen festlegen kann. Sprich, ich möchte für den Raum einen extra String anlegen, der diesen Namen speichert. Ich habe mich im Internet belesen und gehe nun davon aus, dass das über Custom Properties funktionieren sollte. Das Problem ist, dass ich nicht so ganz verstanden habe, wie man diese anlegt. Ich habe einen Hasthable und dort ein Objekt Namens "HostName" mit einem String für den Namen angelegt. Nun möchte diesen von einem anderen Clienten, der die Liste mit den Spielen offen hat, auslesen. Aber wie genau geht das? So, wie ich es bis jetzt mache, kommt die Fehlermeldung "NullReferenceException: Object reference not set to an instance of an object" Meine Scripte: Zum Hosten des Raumes: ExitGames.Client.Photon.Hashtable props = new ExitGames.Client.Photon.Hashtable(); props.Add ("HostName", "TestHost"); RoomOptions newOptions = new RoomOptions () { IsVisible = true, MaxPlayers = 5 , CustomRoomProperties = props}; PhotonNetwork.JoinOrCreateRoom ("test1", newOptions, TypedLobby.Default); Zum Auslesen des Hostnamens: item.GetComponent<NetworkListItem> ().Initialize (game.Name, game.CustomProperties["HostName"].ToString(), game.MaxPlayers, game.PlayerCount); Ich bin dankbar für jede Hilfe MfG, AniProGuy2
  14. C#: Voids in nicht definierten Scripten anstoßen?

    Danke für die Korrektur ^^ Ich kenne es aus dem Informatikunterricht als "Anstoßen" aber das ist ja eigentlich auch egal. Ich werde es einmal damit versuchen, danke für den schnellen Rat!
  15. Hallo Community, Meine Frage ist eigentlich fast selbsterklärend. Ich möchte für mein Spiel ein Script anfertigen (bzw. habe es schon soweit fertig), das als Schnittstelle für Interaktionen dient (z.B. etwas steuern). Dazu wäre es hilfreich, wenn man in eine Liste Components/ Scripte legen kann, bei denen dann Voids angestoßen werden, wie z.B. "UserJoined", "UserQuitted" usw. Welche Scripte in diese Liste gelegt werden, ist dabei variabel und vorher nicht definiert. Es ist nur wichtig, dass die Voids angestoßen werden, und was dann damit gemacht wird, hängt dann vom jeweiligen Script ab. Meine Frage ist nun: ist das möglich? Also Voids in Scripten anstoßen, die vorher nicht definiert sind? Ich habe dazu nichts gefunden und wäre für jede Hilfe dankbar. MfG, AniProGuy2
×