Jump to content
Unity Insider Forum

malzbie

Moderators
  • Content Count

    5,017
  • Joined

  • Last visited

  • Days Won

    338

Everything posted by malzbie

  1. Wenn ich jetzt gerade mal so in meine magische Glaskugel schau, dann sehe ich, dass du einen Fehler gemacht hast! Denn wenn nicht, würde es genauso funktionieren, wie bei dem Tutor aus dem Video. Hilft dir das? Nö? Schade, aber ich (wir) kann (können) dir nicht helfen, wenn du uns lediglich erzählst was passiert und dann ein Bild zeigst, wie deine Szene aussieht. Stell dir mal vor, ich würde dir erzählen, dass bei mein Auto immer eine Warnleuchte im Armaturenbrett leuchtet. Und dann zeige ich dir zusätzlich ein hübschen Foto, wie mein Auto auf einem Parkplatz steht. Jetzt müsstest du mir doch eigentlich sagen können, was mit meinem Auto los ist! Nein? Ist doof, oder? Aber so ist das nunmal wenn man nur irrelevante Infos bekommt. Also geh mal in dich und überlege dir, was wir uns anschauen sollten um dir helfen zu können. Kleiner Tipp: Ein Screenshot von der Szene ist es nicht!
  2. Es gibt den Profiler, der dir richtig viele Informationen bieten kann. https://docs.unity3d.com/Manual/Profiler.html Schau dir das und die die nachfolgenden Kapiten einfach mal an.
  3. An sich ist die Update Methode ja genau dafür da, um in jedem Frame etwas zu machen oder wenigstens abzufragen. Natürlich summiert sich alles, was in all den Update Methoden gemacht wird. Genauso summiert sich auch alles was mit der Physik zu tun hat. Also z.B. auch die OnTrigger Events. Aber eine If Abfrage ob etwas nun eingetreten ist, oder nicht, kostet so gut wie gar nichts. Du solltest dir jetzt vielleicht überlegen, ob es gut ist, dass jedes interagierbare Objekt ständig überprüft ob der Player im Trigger ist und dann selber etwas ausführt. Oder ob es vielleicht besser ist, dass nur der Player triggert und erkennt, ob da ein Interagierbares Objekt ist. Wenn er das macht, dann kann er auch gleich die Tasten abfragen. Aber wie auch immer: Wenn jetzt das eine oder andere Objekt triggert und dann erkannt wird, dass der Player einem interagierbaren Objekt nahe ist, solltest du einfach eine entsprechende Variable auf true setzen. Und sobald sich der Player aus dem Trigger raus bewegt sollte diese Variable wieder auf false gehen. In der Update Funktion würde dann ein Abfrage auf die Trigger-Variable sein. Und nur wenn diese Variable true ist, würde auch ein Tastendruck der Taste E abgefragt werden. Ist die Variable nicht true, wird eben nichts weiter gemacht. Ganz einfach und kostet fast keine Leistung. Es gäbe auch die Möglichkeit innerhalb der OnTriggerStay Funktion die Taste E abzufragen. Aber das würde ich eigentlich nicht machen, weil diese TriggerEvents mit der FixedTime ausgeführt werden und das kann viel öfters sein, als es in der Update gemacht würde. (Je nachdem, was für ein Wert in der FixedTime steht und mit welcher Framerate dein Spiel läuft) Auf jeden Fall kannst du die Tastenabfrage nicht in der OnTriggerEnter machen, denn dann müsstest du E genau in dem Moment drücken, in dem dein Player in das Triggerobjekt eindringt. Das wirst du nur ganz selten mal schaffen.
  4. Für Blender kenn ich nix, Blender ist nicht mein Dingen. Aber es gibt bestimmt 100 Programme, die dir Bäume oder Pflanzen erstellen können. Solche Programme sind jedoch so gut wie nie umsonst, wenn du richtig damit arbeiten willst. Importer, um Modelle einzuladen, sind idR. umsonst . Aber was du jetzt brauchst, damit du LOD's erstellen kannst und was mit Unity super funktioniert ist SpeedTree. Hier mal eine Seite aus der Unity-Dokumentation: https://docs.unity3d.com/Manual/class-Tree.html Wenn du auf der Seite ganz runter scrollst, siehst du einen Link zu Speedtree. Das Dingen kann alles was du nur willst. Aber auch hier gilt: Wenn du alles willst dann musst du ein paar Pfennige (19$ pro Monat oder die große Version für 999$ im Jahr) ausgeben.
  5. Irgendwo müssen auch die Meshes sein. Leg mal eine Pflanze in die Szene und klick die dann an. Im Inspector solltest du den Meshrenderer der Pflanze sehen und da ist dann auch das Mesh drin. Wenn du dieses jetzt anklickst, wist du es im Projektordner finden, denn es wird markiert.
  6. Grundsätzlich musst du dir erst einmal Gedanken dazu machen, welche Eigenschaften abgespeichert werden sollten und welche unwichtig sind. -Passive Objekte, die vielleicht irgendwo in der Szene rum liegen, weil der Spieler sie da abgelegt hat, brauchen ja eigentlich nur die Position und evtl. die Ausrichtung in der Welt (wenn es für das Spiel wichtig ist) abzuspeichern. -Aktive oder veränderliche Objekte brauchen natürlich mehr. Eine Wasserflasche braucht möglicherweise noch einen Füllstand, ein Gegner braucht zusätzlich Statusinformationen wie die Bewegung, Geschwindigkeit, Lebenspunkte und, wie du ja selber schreibst, einen Animationstatus. An welchem Punkt in diesem Status die Animation gerade ist, ist zu 99,9% egal. Es reicht idR. zu wissen, dass das Objekt gerade läuft. Welcher Fuß nun gerade den Boden berührt, wird wohl nicht so wichtig sein. -Der Player braucht das ganze Programm! Alles was wichtig ist, und das ist eigentlich alles, muss abgespeichert werden. Aufgrund dieser Unterschiede solltest du dir eine Zugehörigkeitsinformation mit abspeichern, wenn sie nicht vom Objekt an sich abzuleiten ist, damit beim Einladen auch alle Eigenschaften übergeben und evtl. gestartet werden. Wenn du einen Spielstand speichern willst, musst du erst einmal alle Daten kennen, die gespeichert werden sollen. Jetzt könntest du einmalig die Szene durchsuchen und die Werte sammeln, oder aber du hast eine Logik eingebaut, die alle veränderlichen Infos schon zusammengefasst sind. Dafür könnte z.B. jedes Objekt bei einem neuen Zustand seine Infos an einen zentralen Punkt übergeben. Das kann auch intervallmäßig passieren. Wie dem auch sei, du brauchst all die Daten um einen Spielstand zu speichern. Beim Einladen eines Spielstandes müssten die Daten auch wieder an einen zentralen Punkt, um sie abzuarbeiten. Du lädst also ersteinmal alle Daten in Arrays, Dictionarys oder Listen ein und nutzt dann die Infos da drin um das richtige Objekt zu instanzieren (oder zu aktivieren, falls es schon prewarmed in der Szene ist) und die nötigen Daten zu übergeben. Jetzt kannst du über das Erstellerscript alles setzen wie z.B. die Position, Rotation, Bewegungsgeschwindigkeit und evtl. die Animationsphase, oder aber du lässt das alles vom erstellten Objekt selbst holen. Wenn das Objekt das selbst holen soll, muss es nur wissen welches Objekt es ist, wo die dazugehörigen Infos sind, und dass es gerade eingeladen wurde und somit jetzt aktiv werden soll. Diese Datenposition, kann dann auch super für die Eigenschaftsveränderungen im Verlauf des Spiels genutzt werden und wäre beim Speichern eines Spielstandes sofort da. Ich persönlich finde die zweite Möglichkeit besser, denn dann braucht das Ersteller/Ladescript nicht erst alle Komponenten des Objektes referenzieren um ihnen Werte zu übergeben. Das Objekt kennt seine Komponenten eh und wenn es beim Einladen z.B. den Zustand "Laufen" hat, wird einfach dem Animator ein entsprechender Parameter gesetzt.
  7. Und dein Exposed Parameter für die MasterLautstärke heisst auch wirklich genau masterVol ???
  8. Versteh ich nicht... das sind doch jetzt unterschiedliche Dinge. Ein Sprite ist ein Gameobject in der Welt. Ein Canvas ist nur dann ein Object in der Welt, wenn du es in Inspector auf WorldSpace schaltest. Das macht man aber eigentlich nur bei 3D Games, wo UI Anzeigen auf 3D Objekten projeziert sein sollen. Ansonsten ist die UI immer über allen anderen Dingen. Ist denn dein Canvas für die UI Anzeigen auf ScreenSpaceOverlay geschaltet? Wenn ja, kann das Sprite nie davor liegen. Zeig doch mal einen Screenshot.
  9. Das mit der Hierachie funktioniert einwandfrei. Garantiert auch bei dir. Alles was innerhalb einens Canvas ist, wird von hinten nach vorne gezeichnet. Also ist das oberte Element im Hierachiebaum ganz hinten, und das nächste eine Ebene drüber, usw....
  10. An sich ist das alles schon sehr gut gemacht. Aber für mich ist das alles viel zu dunkel. Dein Schiff nimmt kaum oder gar keine Beleuchtung von den Lichtquellen auf. Gerade wenn es auf der Station landen, die selbst super ausgeleuchtet ist, kann man das sehen. Klar, das Schiff ist schwarz! Trotzdem sollte eine Sonne oder Lampe ganz klare Glanzkanten erzeugen. Auch in der Station wirken sich die Lichter viel zu gering auf den Piloten und das Schiff aus. Ich weiß nicht ob das so gut ist, wenn man ein "Racing" Game macht. Also ich würde schon gerne meine Gegner sehen können. Schau dir mal Bilder von Elite Dangerous an. Dort ist es auch dunkel, aber trotzdem haben Sonnen und Stationslichter einen viel größeren impact auf ein Schiff oder Asteroiden, als es bei dir der Fall ist. Dann ist mir aufgefallen, dass dein Pilot, wenn er außen über die Station läuft, weiche Schatten wirft (bzw. zu helle Schatten wirft). Weiche schatten gibt es nur wenn Licht gestreut wird und der Hauptteil der Streuung kommt von der Atmosphäre, wie du am Tage sehen kannst, selbst wenn die Sonne verdeckt ist. Da es draußen im All keine Atmosphere gibt und auch kaum was Anderes da sit, was Licht reflektieren würde, gibt's auch keine weichen Schatten. Das ist natürlich kritik auf ganz hohem Niveau. Aber du möchtest ja sicherlich auch mal hören, was Andere so meinen. Die Modelle sind super und die Planeten, Sonne , Stationen auch. Richtig klasse fand ich den Gaseffekt von den Triebwerken und die Atmospheren deiner Planeten. Das war alles sehr glaubhaft. Ich bin jedenfalls gespannt, wie's weiter geht.
  11. Ah, ok. Ich dachte die Canvas wären nebeneinander, nicht übereinander. Ja da sehe ich eigentlich nur die Möglichkeit, dass du das gedragte Objekt zum Kind vom oberen Canvas machst, sobald du es eben dragst. Ist ja auch nur ein Gameobject, welches du mit transform.Parent woanders unterordnen kannst. Ich persönlich hätte solch eine Sache eigentlich nur mit einem Canvas gelöst. Mehrere Canvas, bei denen Objekte links wie rechts reagieren sollen ist immer doof.
  12. Ich bin mir nicht sicher, was jetzt genau dein Problem ist. Du möchtest ein Objekt aus dem Canvas A Draggen und in Canvas B fallen lassen? Beim rüberziehen ins Canvas B ist das Objekt aber hinter dem Canvas, weil B in der Reihenfolge über A ist? Wenn das dein Problem ist, dann sollte die SortingOrder eigentlich dein Problem lösen. Oder geht es um Das Objekt selbst, wenn es dem Anderen Canvas zugeordnet wird, dass es nicht on Top zu sehen ist? Wenn ja, dann kannst du das über transform.SetSiblingIndex verändern. https://docs.unity3d.com/ScriptReference/Transform.SetSiblingIndex.html Aber wie gesagt. Ich habs noch nicht so ganz verstanden.
  13. Das sind die Fehler, die ich liebe! Irgendwas wird wohl gestört haben. Bin mal gespannt ob es wieder passiert.
  14. Wie oft fragst du denn den Wert ab? Es ist ja so, dass die Maus nur wärend des drehens Werte !=0 übergibt. Danach ist der Wert wieder 0. Also da ist irgendeine Taktung im System, denn wenn du schnell drehst kann auch ein Wert von 0.3 raus kommen. Kann es sein, dass du ein zweites Eingabegerät angeschlossen hast, welches den gleichen Kanal bedient und von Unity vielleicht gleichzeitig mit ausgelesen wird? Hast du mal Input.mouseScrollDelta versucht? Ich habe eben mal einen schnellen Test gemacht und in der Update einfach das ScrollWheel abgefragt und darüber einfach nur nen Klotz bewegt. Bei mir geht es im Build genauso wie im Editor. Es ist aber mit V2018.2.5f1 getestet worden und ich habe auch keine Änderungen am Inputmanager vorgenommen. Hast du ne ältere Unityversion auf der Platte mit der du mal einen einfachen Test machen kannst, um sicherzustellen, dass es kein Bug von 2019 ist?
  15. malzbie

    YouTube Lizenzkram

    So einfach ist das nicht. In den AGB's steht dieser wichtige Satzteil: Und solange der Urheber dir kein Recht dazu erteilt hat, hast du auch kein Recht. Ich war mal auf der YouTube Seite und konnte ganz klar erkennen, dass er die Titel (Alben) verkauft und nicht frei zur Verfügung stellt. Auch andere bekannte Künstler stellen ihre Videos auf Youtube aus (ich rede da von offiziellen Kanälen, nicht Vevo). Die darfst du dir angucken. Deswegen darfst du die trotzdem nicht ohne Weiteres für deine Projekte nutzen. Eigentlich müsstest du jetzt herausfinden, welche Verwertungsgesellschaft für diesen Künstler zuständig ist (z.B. die GEMA) und pro View etwas an die zahlen. Es gibt da noch so ne Sache bei YouTube, bei der irgendwie entscheidend ist, ob du deine Videos mit Werbung monetarisierst oder nicht. Aber da kann ich dir nicht genau sagen, was da der Unterschied ist. YouTube überprüft inzwischen auch schon beim Hochladen der Videos ob da irgendwelche Musiken genutzt werden. Es kann durchaus sein, dass dein Video gar nicht erst veröffentlicht werden kann, wenn in deren Datenbank dieser Titel drin ist. Klick mal auf diesen Suchlink: https://www.youtube.com/results?search_query=freie+musik+für+youtube+videos Da wirst du einige Videos finden die dir einige Tipps geben und natürlich auch die Anbieter der freinen Musiken (Frei heisst aber nicht unbedingt kostenlos). Vielleicht ist da etwas für dich dabei.
  16. Da kann mehreres Problematisch sein. Dein Speed könnte z.B. zu gering sein und es sieht einfach so aus, als würde er nichts tun. Oder aber die >1 ist zu hoch gewählt bei: if(Vector3.Distance(transform.position, position)>1) Kann ja sein, dass dein Ziel immer weniger entfernt ist als dieser eine Meter.
  17. Ich würde mir da jetzt keinen großen Kopf machen. So wie es der Kerle da im Video gesagt hat, erzeugt jeder Animator eine Grundlast, egal ob gerade auch wirklich ein UI Element animiert wird oder nicht. Diese Grundlast ist meiner Erfahrung nach nicht besonders hoch, summiert sich aber natürlich, wenn viele UI Elemente einen Animator haben. Ein Mainmenu ist in der Regel eine eigene Szene, wo die ganzen vielen Elemente drin sind. Dort ist es meiner Meinung nach total egal, ob da eine hohe Grundlast auftritt, denn da passiert ja sonst nichts! Innerhalb des Spiels könnte es schon sein, das ein oder zwei Frames für die UI drauf gehen, "wenn" da viele Dinge animiert werden, die vielleicht besser ins Game investiert wären. Joah... kann man natürlich optimieren. Ich sehe da aber trotzdem keinen Grund, sich die dollsten Coroutinen oder Tween zu bauen, wenn ich das mit ner Animation in kurzer Zeit lösen kann. Außerdem kann man ohne Weiteres auch mehrere Elemente mit einem einzigen Animator steuern, wenn sieh in der Hierachie unter dem Objekt mit dem Animator sind. Just my two cents!
  18. Ja das geht auch ohne Code du brauchst den Canvas Scaler dafür. https://docs.unity3d.com/Manual/script-CanvasScaler.html Hier ist schön erklärt worauf du achten solltest: https://docs.unity3d.com/Manual/HOWTO-UIMultiResolution.html
  19. Alter Schwede! Aber echt geile Flieger!
  20. Wegen deiner Frage, ob Blendeffekte gemocht werden oder nicht: Kommt auf den Style an! Ich persönlich mag es schon, wenn gewisse Dinge nicht sofort rein ploppen. Aber trotzdem sollte sich sowas schon zügig aufbauen, denn das Verhalten eines Menüs wird nur beim ersten Mal beachtet. Später will der Spieler einfach nur so schnell wie möglich durch das Menü navigieren, denn er will ja spielen! Übrigens: Man kann auch eine UI animieren und muss eigentlich nur ein paar Trigger im Animator anstubsen. Ich habe das bei meiner Pinball Collection so gemacht. Die einzelnen Menüs werden außerhalb des sichtbaren Bereiches geparkt und kommen dann über eine Animation zum gewünschten Zeitpunkt rein. In meiner ersten Version habe ich sie auch einblenden lassen und hatte ganz viele Einzelteile animiert, aber inzwischen fliegen sie mehr oder weniger als Ganzes rein, weil ich für die Leute, die hochkant spielen, eine extra UI gebaut hatte. Der Aufwand wurde mir dann doch zu hoch.
  21. Dein 2ter Level ist eine neue Szene? Wenn ja, dann gib dem Script einfach in der Awake() oder Start() den Befehl: DontDestroyOnLoad(). Schau dir mal den Link an, da sind einige Beispiele bei. https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html Mit diesem Befehl, wird das GameObject nicht beim Szenenwechsel zerstört und ist in der nächsten Szene noch da, mit all den Werten, die es in der alten Szene hatte. Natürlich darfst du nicht nochmal so ein Objekt in der neuen Szene haben, weil dann hättest du ja 2 Objekte der gleichen Art. Ich weiß nicht wie fortgeschritten du bist, deswegen gehe ich jetzt nicht auf ein Singleton ein. Außerdem musst du wissen, dass ein Script nicht alleine in einer Szene sein kann. Das Script muss immer auf einem Gameobject liegen, und somit solte dein Script, (welches die Werte hat) auf einem neutralen Objekt liegen, also nicht auf dem Player oder der Kamera, denn die sind in der neuen Szene bestimmt nochmal drin. Und noch was Wichtiges: Da dein Objekt sich bei einem Szenenwechsel nicht zerstört, musst du es per Befehl zerstören, wenn du aus dem Spiel ins Hauptmenü zurück gehst, oder du gestorben bist und wieder bei Lvl1 anfangen willst. Dort im Lvl1 wird ja dieses Object geladen und hat die default Werte.
  22. Warum du die Meldung bekommst, weiß ich jetzt auch nicht so direkt, da du ja schreibst, dass du das trainerPrefab hinterlegt hast. Wobei ich nicht genau weiß, was du mit hinterlegt meinst. Also du hast es im Inspector auf die Public Variable gezogen?! Du solltest aber die Variable newEnemy nicht in der Start bilden, sondern oben, wo auch dein trainerPrefab ist. Ja und dann castest du ja als GameObject, obwohl das TrainerPrefab eh vom Typ GameObject ist und du es mit newEnemy verknüpfst, was ja auch ein GameObject ist. Vielleicht mag er das ja nicht.
  23. Fein! Poste ruhig hier auch mal ab und zu, nicht nur aufm ollen Discord!
  24. @Timothyee Es ist zwar schon ne Woche her, aber vielleicht siehst du es ja doch noch. Ich habe mal ein Video zu deinen Problemen gemacht, weil es zu viel Text gewesen wäre. Hier kannste gucken:
×
×
  • Create New...