Jump to content
Unity Insider Forum

MaZy

Members
  • Content Count

    608
  • Joined

  • Last visited

  • Days Won

    22

MaZy last won the day on December 8 2019

MaZy had the most liked content!

Community Reputation

172 Excellent

About MaZy

  • Rank
    Advanced Member
  • Birthday 02/20/1988

Profile Information

  • Gender
    Male
  • Location
    Hannover

Recent Profile Visitors

13,165 profile views
  1. Ist sehr irritierend was da in Awake steht. Die Zeile sagt mir, dass du mehrere gameObjects mit dem Tag Score suchst. Aber meistens sind Scores ein gameObject z.B. da wo der Script ist und die Punkte eingetragen sind oder wie in deinem Fall Text-Component. dann wird objs ignoriert und das getan. Aber was ist this.gameObject? Ist das das GameObject mit dem Text? Steht nirgends. Nichtsdestotrotz wird das glaub ich nicht so, falls es mit Text-Component gemacht werden soll, funktionieren. Dafür müsstest du Canvas selbst immer mitnehmen. Die leichteste Möglichkeit wäre in dein Script static zu benutzen. public static int GlobalScore = 0; Muss jetzt nicht Global heißen. Statics sind immer und überall verfügbar. Jedoch ist die Einschränkung auf ein Variable, da man keine Objekte von der Klasse erstellt. Etwas kompliziert wird als Objekt. Z.B: public class ScoreData : Monobehaviour { public int Score; void Awake() { DontDestroyOnLoad(gameObject); } } Da kannst du dein Score speichern. Das GameObject muss bedacht platziert werden. Wenn du Beispiel in Hauptmenü das hast und immer wieder ins Hauptmenü gehst, wird immer ein GameObject mehr sein. Hab öfters gelesen, dass Unity deswegen bemängelt wird, warum es kein preintro scene gibt genau für solche Dinge. Aber man kann das auch selbe machen. Also eine Scene ganz am Anfang habe und diese Dinge reinpacken und dann zu Hauptmenü wechseln. Problem: Im Editor möchte man nicht immer von der ersten Scene beginnen (darum wollen andere das mit Preintro Scene intrigiert haben). Deswegen kann man dafür wie @chrische5 erwähnt hat ScriptableObjects nehmen. Im Prinzip ist es so ähnlich wie ich das mit ScoreData mache, nur dass Unity die im Hintergrund instanziiert und lädt, wenn man sie braucht und dann ganzes Spiel lang verfügbar bleibt. Und da man als Asset das erstellen kann, kann man sie überall verwenden. Eigentlich perfekt für sowas. Wenn du irgendeine Lösung davon ausgesucht hast kannst du nun weiteren Script schreiben. Und jedes mal, wenn die Scene lädt sucht er nach ScoreData und liest den Score und setzt den Text oder bei ScriptableObject muss du nur den Asset im Inspector reinschieben wie gewöhnlich. Musst dann auch nicht suchen lassen.
  2. Nicht direkt UI Tutorial, aber es wird gezeigt in einem Beispiel wie sowas aufgebaut werden kann bzw. sollte. Als Beispiel wird ein Inventar gezeigt, wie man Inventar UI-Scripte aufbauen kann ohne, dass die Scripte mit einander verbunden werden müssen. Eigentlich wirklich gutes Beispiel. Ich selbst verwende es mal so wie im Video und mal nicht so. Ich mag eher selber Coden und wahrscheinlich mag ich es deswegen manchmal anders, aber wenn es eher um Designer-fragen und Handhabung geht, dann ist das im Video echt gut, denn wenn du was ändern willst, dann kannst du das ohne im Code was zu ändern tun.
  3. Ich habe sowas bei Source 2 Engine (beim Spiel modden von Dota 2) verwenden müssen. Bald soll ja mit 2020 auch sowas kommen. Allerdings frage ich mich, wie es mit externen Frameworks aussieht z.B. animejs ist ein tolles Ding. In einem Kommentar oder Video, weiß nicht genau wo das war, meinte ein Unity Staff nämlich, dass Javascripts schwieriges Thema ist.
  4. Ich wollte jetzt nicht damit dich angreifen bzw. sagen, dass du unter einer Gehirnwäsche leidest oder so. Mit deinem Soda Solution hast du auch ein Video verlinkt, wo ich von anderen Threads teilweise die Argumente von dir gelesen habe wie im Video. Ich meinte damit nicht, dass die Aussagen darauf aufbauen, wenn es so rüber kam. Die Argumente sind auch ja nichts schlimmes, weil sie dort Probleme aufweisen und Lösungswege zeigen. Ich bin daher davon ausgegangen, dass du auch die gleiche Meinung teils ins Sinne von, dass zum Beispiel Singletons usw. die Produktivität in Unity erheblich kompliziert machen können. Aber du sagtest trotzdem auch, dass ICH etwas grundsätzlich Falsch mache, weil ich etwas Manager nenne, ohne eigentlich zu wissen, wie es im Hintergrund tatsächlich abläuft. Und ich finde hier gibt es aber kein richtig oder falsch. Ich habe auch nirgends erwähnt, dass ich überzeugt von meiner Methode bin, sondern nach verschiedenen Ideen Ausschau halt und etwas erklärt wie ich sonst mache bzw. mir vorstelle. Genauso denke ich das bei der Lösung mit Soda oder ähnliches auch. Ist ja nicht so, dass ich das "Falsch" sehe: Ich bin jetzt auch nicht großer Fan von Singletons, wie es gerade in Unity verwendet wird, aber genau deswegen hab ich eine eigene Technik in einem anderen Projekt was das angeht entwickelt. Genau die Probleme, dass ich nicht immer in der ersten Szene starten will, damit alles geladen wird, fehlende Referenzen vermeiden usw., die wollte ich damit eliminieren. Dabei wurden, wenn überhaupt gebraucht wird, die Singletons in ScriptableObjects eingebaut. Das heißt, sie werden nur dann eingesetzt, wenn etwas sie braucht. Egal ob ich ein Prefab in de Scene zum Testen rein schiebe oder nicht. Die waren automatisch da. Und solche Automatisierungen mag ich sehr gerne. Nichtsdestotrotz, ging mir ja hier eher um die Menüs und HUDs zu verwalten. Eine relevante Aussage hast du zu MVC gemacht. Es wird so aufgebaut, dass man von Unity weggehen kann und wo anders weiter machen kann und glaube hat auch mit sowas wenig zu tun und brauche das nicht. Ich hab letztens etwas anderes auch zu UI Sache gelesen und werde mal schauen, ob es eventuell Sinn macht.
  5. Mit Soda oder die ähnlichen Weg gehen konnte ich mich nicht anfreunden. Ich hab schon da einiges ausprobiert und teilweise auch einiges gemacht und benutze paar Techniken davon, aber insgesamt mit dem scriptable floats, ints usw. ist für mich nicht so schön. Allerdings finde ich die events schön mit scriptable objects und damit hab ich auch teilweise die UI geupdatet. Ich hab das so ähnlich, aber mit generic types. Mir geht es allgemein darum, dass ich wenig wie möglich übers Inspector machen möchte, sondern so aufbauen möchte, dass es automatisiert funktioniert. Also sprich Automation soll eher hier sein. Bezüglich der UI Beispiel: Je mehr Einheiten im Spiel vorhanden sind umso mehr sind HP Bars zu sehen. Diese Prozesse dahinter möchte ich sag mal so "perfektionieren". Ja in dem Fall hab ich tatsächlich Manager genannt, aber ich weiß nicht warum das "grundsätzlich" Falsch sein soll. Es ist einer der normalen Methoden die man benutzen kann. Hier geht es mir darum, dass ich direkt etwas aufrufen kann ohne, dass es etwas hier oder da gezogen werden muss (also die Components). Zum Beispiel ziehe ich ein neuen UI Panel rein und es ist automatisch zu finden. Später kann / möchte ich MenuManager.Get("TeamMenuItem") machen und MenuItem zurück geben und kann dann damit direkt arbeiten. Ist nicht mal von MonoBehaviour geerbt. Das ist derzeit so und möchte das aber etwas noch besser handlen. Ich schätze mal du reagierst darauf allergisch, weil in dem Unite Video die Manager bezüglich singletons etwas kritisiert haben und das man auch jedes mal in die Scene die Sachen brauchst damit es funktioniert. Das ist hier nicht der Fall da es singleton frei ist. Hierbei geht es wirklich um großes Spiel, welches in Steam, wenn es Fortschritte macht erscheinen soll. Deswegen möchte die UI Planung gut durchführen. Andere Teile sind schon fortgeschritten.
  6. Hallo ich war mal nach UI Architecture Techniken mal am Googlen um Tipps einzuholen. Dabei hab ich öfters gelesen, das einige von MVC schreiben. Ich verstehe ja grundsätzlich worum es da geht, aber von der Umsetzung her kommt mir das nicht so sinnvoll vor bzw. dass es vllt nicht so mein Ziel entspricht. Ein Beispiel was ich gelesen habe war: https://www.toptal.com/unity-unity3d/unity-with-mvc-how-to-level-up-your-game-development Allerdings bezieht man sich hier nicht um die UIs, sondern um das Konzept selbst. Trotzdem wollte ich mal allgemein Fragen, ob es überhaupt sind macht sowas bei sowas zu verwenden oder gibt es da andere Techniken. Einige andere System wie Doozy UI benutzt da komplexeres, allerdings ist das eher für Menüs gestaltet. Also Animationen, Sounds usw. Mir geht es eher um den Managen von verschiedenen Teilen. Was ich bei MVP gut finde ist, dass man quasi im Core von überall zugreifen kann. app.menuManager.Open("option");. MenuManager würde selber die app kennen und kann von da aus sogar andere Menüs öffnen (ob es machen dürfen sollte, ist ne andere Frage ^^). So ähnlich ist ja bei Components auch, wenn ich entweder Referenz zu dem Hauptteil aufbaue. Also quasi: class UIMenuManager; class UIMenuItem -> Awake -> finde UIMenuManager Jetzt könnte ich bei UIMenuItem beispielsweise Back() benutzen und da wäre sowas wie: Close this -> menuManager.LastMenu -> Open()
  7. Hast du die Beschreibung gelesen? Es steht da deutlich, dass VTRK SteamVR ab version 2 nicht unterstützt. https://assetstore.unity.com/packages/tools/integration/vrtk-virtual-reality-toolkit-vr-toolkit-64131
  8. Immer, ja ist aber immer noch Geschmacksache. Ich habe selbst und habe bis heute noch das Problem sie aufzuteilen, aber derzeit sieht bei mir z.B. so aus. SpaceShip SpaceShipMovement SpaceShipWeapon Ship hat auch ein ScriptableObject, wo ich die Basic Einstellungen wie Geschwindigkeit, Name usw habe. Die Geschwindigkeit könnte man aber ohne ScriptableObject in den ShipMovement packen, denn da ist das eher interessanter. Nun sagen wir mal, dass manche nicht bewegen können und stationär sind. Dann kann ich ShipMovement entfernen und schon können sie sich nicht bewegen. Das ist auf jeden Fall viel besser als alles in einen zu packen. Ich weise die SOs an den Basescript z.B. SpaceShip zu, Die anderen benutzen getcomponent von SpaceShip und da kann ich auf SO zugreifen. Aber da gibt es mehrere Wege.
  9. Ich glaube bei Google's Authentifizierung braucht man keine Angst habe, denn die wollen ja auch sogar callback url haben. Sowohl alles client seitig, aber auch client und server seitige Variante gibt es. Ich hab sowas bei meiner Seite auch vor ein, zwei Monate implementiert, aber musste schon einiges probieren, weil es nicht genau erklärt wird. Vor allem hab ich nicht verstanden, wann man ausgeloggt wird und wie man das checkt. Ich schätze mal du meinst WebGL Version und nicht Windows oder warum zeigst du da PHP-Code statt C# oder ähnliches?
  10. Ich würde sagen, was man am besten bequem findet. Ich ändere pro Projekt jedes mal meine Idee, weil mir was besseres oder manchmal auch schlechteres einfallen. Was ich immer tue ist, die Nachteile zu eliminieren und Vorteile zu generieren. Ich habe zum Beispiel öfters gesehen, dass einige unter jedem Button ein Script knallen um eine Aktion auszuführen. Beispiel ein Script UIActions.cs und hat oder mehrere Funktion z.B. OpenMenu( menu ). Was ist hier zum Beispiel der Nachteil? Jedes Button hat diesen Script und erschwert das Bearbeiten. Mehrere Instanzen, mehr verbrauch von Ram Speicher (und normalen Speicher weil Components größer werden). Dabei braucht man diesen Script nur einmal auf ein GameObject und man kann es dann auf jeden Button bei Click Event reinziehen. Daher mach ich meist leeren GameObject mit nur UI Scripte. Vorteil hier: Eine Instanz (also weniger Ram Speicher und Speicher usw.) Allerdings weiß ich nicht, wie Unity im Hintergrund das macht. Kann das da trotzdem mehr Speicher benutzt wird. Ein Script (wenn man zum Beispiel löschen oder ersetzen will muss man nicht bei allem Buttons löschen). Aber auch das mit Buttons tue ich nicht so. Das wird immer komplexer die Lösungen, aber bequemer. Nachteil ist immer noch: Sollte ich den UI Script ändern muss ich die Buttons wieder zuweisen. Also brauch ich noch geilere Idee. Tja und da komm ich wieder zu dem ersten teil kombiniert mit einer anderen Idee. Beispiel was ich noch ausprobiere ist mit FindObjectOfType und automatische Button Registration bzw. scriptableObject. Das heißt ich habe mehrere Button die zu einem Script senden, ich habe diese Aufgabe "Menu öffnen". Dort weiß das Script wohin er alles weiter leiten muss. In anderen Worten, ich muss nie den Button oder ihr Verhalten selber anfassen. Das wird automatisch in Runtime gemacht. Nachteil, dieser Button muss ein Script enthalten. Also.. du siehst schon. Hier ist die Frage, was ist bequemer Was Aufteilungen angeht: Bei Kleinigkeiten kann man ruhig in eine Datei machen. Bei größeren ist Aufteilung zu empfehlen. Auch hier ein Beispiel von mir. Multiplayer Spiel mit Player Spaceships + AI Spaceships. Folgende Componenten hatte ich beim Player Ship drauf: Ship ShipMovement ShipWeaponController DamageSystem Und Ai Ship hatte: ShipAi ShipMovement ShipWeaponController DamageSystem Du siehst also was man sich dadurch erspart. Aber der Nachteil bei mir ist, dass Ship und ShipBase den Movement und Weapon brauchen. Ohne funktioniert es nicht. Also da struggle ich noch, aber irgendwann ist das auch gut gelöst, denn ich versuch so gut wie möglich unabhängig von einander arbeiten zu lassen. Bei mir allgemein ist so, dass ich mittlerweile ohne meine Standard Scripte nicht mehr klar komme:
  11. You should really look for c# tutorials. This is even basic thing which you learn in the first lessons. If you copy and paste you will never reach the goal because you would not understand what you are doing. You put that under uiObject.SetActive(true); And the buttonGameObject needs to be declared under public GameObject uiObject; and assigned via Inspector. Please read or watch c# tutorials with unity before you start coding or copy pasting. https://unity3d.com/de/learning-c-sharp-in-unity-for-beginners
  12. Das ist einer der simpelsten Sachen. Denn diese Basic werden bereits beim Tutorial von Unity erklärt (Wie und wo man etwas spawnt, wie man etwas bewegt). Man kann dir helfen, wenn du Probleme nicht zu Lösen kriegst, aber selten wird hier geholfen bzw. von mir, wenn man mit der Thematik sich noch nicht richtig auseinander gesetzt hat und eher immer eine Vorlage haben möchte (in anderen Worten jemand programmiert für dich). Wenn du neu angefangen hast, dann schaue dir einfach mal die Unity Tutorials an. Da ist sogar ein Tutorial wie man das man macht. Nichtsdestotrotz wird man nach einigen Wochen bis Monate lernen, dass sogar alleine hinkriegen. Beispiel dieses Video, aber ich würde vorher noch die anderen Videos gucken, wo mit Unity C# besser erklärt wird, wenn du da nicht verstehst was zum Beispiel transform ist und was transform.position bedeutet usw:
  13. If you mean the button gets selected so you can instantly execute it with keyboard / controller then you would use EventSystem.current.SetSelectedGameObject( buttonGameObject ); buttonGameObject what the name already says the gameObject of the button what you want to highlight or have selected.
  14. Was heißt hier denn jetzt Create Player? Ich glaube nicht, dass das was mit PUN zu tun hat, denn da spawnt man Spieler mit PhotonNetwork.Instantiate. Wäre gut, wenn man ein Code Abschnitt dazu sehe kann, sonst muss man ja nur rumraten.
  15. Das Forum lebt auf jeden Fall. Eventuell gibt es kein Rat zu manchen Fragen oder, wenn manche Fragen (sorry, wenn das zu hart klingt) zu dämlich klingen, möchte man manchmal (zu Mindest bei mir so) nicht die Zeit da rein investieren. Ich mein jetzt nicht damit, dass die Frage selbst doof ist oder sondern, um den Inhalt bzw. Kontext. Wenn jemand fragt "Wie lösche im Multiplayer etwas", das ist einfach zu Allgemein. Was benutzt du (der die Frage stellte)? Pun, Mirror, Lidgren oder eigenes? Steht nichts davon und lässt sich daher nicht wirklich beantworten und auch eine Frage, was man schnell mit Google raus findet. Aber wer eine Antwort will, der strengt sich schon beim Schreiben an. Wenn man so umguckt da, sieht man auch, dass einige viel schwierigeres versuchen zu lösen und die verdienen meiner Meinung nach mehr Aufmerksamkeit, da dies nicht so mit "googlen" beantworten lässt. Zusätzlich dazu, ich besuche einmal pro Tag bis alle paar Tage das Forum. Wenn man schneller Antworten haben will zu kleinen Fragen, kann man ja sowas wie Discord benutzen. Das hier gehört zum Beispiel zu den Posts, wo ich ungern Lust habe. Du hast es "nicht gebacken" bekommen, aber was hast du versucht zu backen? Hast du zum Beispiel NetworkManager.onlineScene angewendet? Ich muss hier rumrätseln. Und ja mit OnServerAddPlayer kann man arbeiten, aber muss nicht sein, wenn man AutoCreate Player (oder wie das auch heißt) aktiviert hat. Für OnServerAddPlayer muss aber der Spieler ClientScene.AddPlayer ausführen, sonst wird OnServerAddPlayer nicht ausgeführt. Übrigens würde ich Mirror empfehlen. Es ist die weiter Entwicklung von UNet, da ja UNet nicht weiter entwickelt wird. Bis heute wird Mirror noch weiter entwickelt und bin sogar bei den in Discord ein bisschen aktiv.
×
×
  • Create New...