Jump to content
Unity Insider Forum

MaZy

Members
  • Content Count

    610
  • Joined

  • Last visited

  • Days Won

    24

Everything posted by MaZy

  1. Sieht bei google link aber falsch aus. Zu mindest zeigt es bei mi reine Welt oder Erde Icon. Richtig ist es das hier: bzw https://github.githubassets.com/favicons/favicon.svg https://github.githubassets.com/favicons/favicon.png Meistens werden sie als example.com/favicon.svg oder png usw gespeichert, aber manche Seiten benutzen noch unterordner sowas wie media oder assets usw. Falls du das automatisieren willst musstes du die seite runterladen also quelltext haben und nach dem favicon verlinkung gucken.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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()
  8. 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
  9. 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.
  10. 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?
  11. 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:
  12. 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
  13. 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:
  14. 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.
  15. 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.
  16. 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.
  17. Die Person hat deine Frage beantwortet. Sonst ist da keine Frage, sondern nur eine Situation wird geschildert.
  18. Ich habe nicht verstanden wo dein Problem liegt. Wo brennst denn?
  19. MaZy

    Shadow Bug

    Es gibt zwei Dinge die das verursachen können. Mesh. Das Tier hat zum Beispiel auch solche Lücken. Das Problem hab ich z.B. gehabt, wenn ich MagicaVoxel benutzt habe. Dort waren sehr viele Flächen. Einzige Idee war einfach wo anders nochmal zu exportieren und dabei das Model zu optimieren (automatisch). Ansonsten Lights, Mal normal bias runter drehen.
  20. Ja hab tatsächlich mittlerweile Rigidbody genommen.
  21. Wenn du meinst, dass ein Auto einen weiteren und größeren Boxradius hat, ja könnte man, aber bin kein Freund davon, wenn andere Objekte die Arbeit von anderen machen ^^. Ebenfalls geht das auch bei dem Verfolger, aber irgendwie fand ich hier Raycast passender. Aber ist eigentlich gute Frage, welches allgemein besser wäre.
  22. Ich prototype gerade ein Spiel. Folgendes sieht man in dem Gifv: https://i.imgur.com/rvjO3aM.gifv Links ist ein Rigidbodyobjekt mit Masse von 5000. Rechts ein CharacterController und Rigidbody kann CharacterController nicht schubsen. Ist das nicht möglich? Ich benutze MovePosition beim Rigidbodyscript.
  23. Moin. Normalerweise, wenn ein Gegner den Spieler verfolgt lässt man ihn ab bestimmten Distanz stoppen und angreifen (zu mindest hab ich das so gemacht). Wie macht man das bei Objekten, die nicht an allein Seiten gleich breit bzw. lang sind, zum Beispiel Autos, Züge oder sogar Laster? Oder noch krasser wie bei Zombie spielen, wenn Zäune drum rum sind, wie wissen sie dass man es angreifen kann mit Verbindung NavmeshAgent usw. EDIT: Könnte das mit raycast lösen fällt mir gerade ein.
  24. Man sagt allgemein so viele Cubes erstellen ist nicht gut. 17500 Cubes * 8 Ecken = 140.000 Vertices. Wenn du Culling benutzen tust, muss Culling noch diese Vertices durch loopen. Weiß jetzt nicht wie das aber exakt abläuft. Daher am besten den Voxel Technik benutzen. Hab damals das hier verwendet: http://studentgamedev.blogspot.com/2013/08/unity-voxel-tutorial-part-1-generating.html Zum Occlusion Culling. Ich glaube das funktioniert nur bei Dingen in der Scene, die auch Occlusion Static eingestellt haben. Weiß gar nicht, ob es dynamisch geht, also wenn du die Welt generierst und dann. Musst nur noch baken und dann ist das eigentlich fertig. Ups, hab erst gedacht, willst wissen wie das geht. Also kannst theoretisch selbst machen. Im Discord gibt es jemanden, der sowas ähnliches gemacht hatte, aber dennoch Probleme mit Performance hatte. Im Prinzip fragst du einfach nur ob, ob die Kamera etwas sehen kann, wenn nicht ausblenden (MeshRenderer). Kannst dazu OnBecameInvisible und OnBecameVisible benutzen. Ich weiß nur nicht, ob das auch gecalled wird, wenn man meshrenderer deaktiviert hat.
  25. Das habe ich schon verstanden. Ich hab ja auch allgemein darüber geschrieben und zusätzlich noch die Ads erwähnt, da man dort noch mal die Privacy einstellen kann. Finde aber immer noch, dass man direkt am Anfang fragen sollte. Also ich hab mich da nicht eingelesen, da ich nur einfach das Verlinkt habe und die User sich das selbst durchlesen können aber, wenn die ID zugeordnet werden kann, zum Beispiel, wo man sagt "ah die ID hat heute das Spiel länger gespielt" oder "ID hat x mal das Spiel / Unity heute gestartet" ist das ein Fall für die DSVGO und nicht mehr wirklich anonym und tatsächlich gelt das als personenbezogen, weil man da einordnen kann wer was macht. Auch wenn man jetzt nicht weiß wer wirklich dahinter steckt. Wenn es aber eine z.B. länderspezifische Gruppierung ist, also wo man sagt "In Deutschland wurde Unity in diesem Monat insgesamt 3 Millionen mal gestartet, die version x y z", dann gelt das als anonym. Wenn wir Analytics benutzen sammeln wir auf jeden Fall für uns alles Anonym. Ich will hier nichts falsches sagen, aber ich glaube, dass man das sogar ohne Zustimmung machen darf (also beim Starten des Spiels), aber dennoch informieren MUSS und darauf hinweisen sollte. Da senden wir ja nur zum Beispiel sowas wie "Scene1 mit einem Score von x wurde beendet". Dabei erfasst man keine personenbezogene Daten. Das Privacy Plugin ist leider veraltet und es kommt eine Fehlermeldung. Bei meinem alten Projekt ist es als Button noch da (ist dasselbe Projekt wie das Bild oben). Man braucht diesen Plugin nicht mehr, weil wohl Analytics sowas schon beinhaltet. Muss ich mal eigentlich genauer anschauen und mal da umsteigen.
×
×
  • Create New...