Jump to content
Unity Insider Forum

malzbie

Moderators
  • Posts

    5,423
  • Joined

  • Last visited

  • Days Won

    405

malzbie last won the day on July 23

malzbie had the most liked content!

2 Followers

About malzbie

  • Birthday 10/30/1968

Profile Information

  • Gender
    Male
  • Location
    Kassel, Hessen, Deutschland

Recent Profile Visitors

33,560 profile views

malzbie's Achievements

Advanced Member

Advanced Member (3/3)

1.6k

Reputation

  1. Ja, das stimmt. mit der Zeit hat man so einen Tunnelblick drauf und dann fallen gewisse Dinge nicht mehr auf. Was immer gut hilft, ist mal über den Tellerrand zu schauen. Also Spiele des gleichen Genres zu spielen und schauen, wie gewisse Dinge dort erledigt werden. Man erkennt dann relativ schnell, dass gewisse Mechaniken in fast allen Spielen verwendet werden. Diese sollte man dann auch nutzen, weil es für die Spieler intuitiv sofort so angewendet wird. Ich freue mich schon auf die neue Version. Mein Projekt geht gut vorran. Ich versuche das noch vor dem Winter zu veröffentlichen. Ich sehe gerade, dass ich im Forum lange nichts mehr gepostet haben. Das muss ich ändern!
  2. So, jetzt komme ich endlich mal dazu, dir Feedback zu geben. Das Spiel gefällt mir schon ganz gut. Aber! Du baust ja ein Spiel nach dem anderen, deswegen weiß ich nicht auf was du den Fokus legst. Willst du einfach nur Spiele erstellen, weil es dich reizt die unterschiedlichen Themen selber mal zu erarbeiten, oder soll da einmal mehr daraus werden? Deine Spiele funktionieren und machen auch Spaß, sie brauchen aber noch Feinschliff. Ich schreibe dir mal auf, was ich meine. Farmer Jack wird ja mit Maus und Tastatur gespielt, trotzdem kann ich nicht per Escape-Taste in die Pause rein. Geht nur mit dem PauseButton. Ich kann mein Männchen mit Tastatur (WASD) oder per Maus steuern. Ich kann sogar mit E die Kamera in eine Richtung drehen. Aber nicht mit Q in die andere Richtung. Per Maus kann ich aufs Mausrad drücken und auch da dreht sich die Kamera nur in die eine Richtung, klar ist ja nur eine Taste. Warum kann ich in eine Richtung drehen, aber nicht in die Andere? Gleich zu Beginn sind die Scheune und die Mühle schon auswählbar. Also sie werden hell, wenn ich mit der Maus da drüber gehe. Nur passiert halt nix, wenn ich sie anklicke. Ich bin noch nicht soweit, dass ich mit den Gebäuden etwas machen kann, deswegen weiß ich nicht was da passieren wird. Jedenfalls solltest du die Gebäude erst dann interaktiv werden lassen, wenn man auch was damit machen kann. Wenn irgendwelche Fenster auf sind, sollten die Dinge, die da drunter liegen, nicht auswählbar sein. Das verwirrt total. Außerdem sollte der Infogeber nicht zur selben Zeit ein Fenster unter dem anderen Fenster öffnen. Das finde ich ganz wichtig! Wenn ich das Aufgabenmenü auf mache, kann ich mit der Maus scrollen. Super. Nur zur selben Zeit zoome ich mit der Camera rein und raus. Die Spieluhr läuft dabei auch noch weiter, und die ist schnell! Zack ist der Tag rum, alles schließt sich und ich sehe mich wieder am Hof. Egal wo ich vorher war. Also da unbedingt abfragen, ob das Aufgabenpanel an ist, und solange die Zeit anhalten. Ja, das ist aufwändig, aber das gehört dazu. Ich bin ja sogar schon mal auf dem Markt mitten beim Handeln in den neuen Tag geschwuppst worden. Der Tag ist nämlich schon um 22Uhr vorbei und das war mir erst nicht klar. Die Zeit läuft sehr schnell. Da würde ich mir wünschen, dass man die Spielgeschwindigkeit verändern kann. Und selbst wenn nicht, sollte die Grafik schon ganz voll werden. So, wie es jetzt ist (V 0.6) ist es nicht hilfreich. Die Leute, die man auf dem Markt treffen kann, habe ja alle einen eigenen Namen, der als UI Text oben drüber zu sehen ist. Ist der Name wichtig? Wenn ja, dann drehe die UI immer zur Camera. Wenn nein, kann der Name weg. Sieh das Ganze als konstruktive Kritik an. Ist nicht böse gement. Nur wenn du schreibst, dass deine Simulation sogut wie fertig ist, muss ich dir sagen, dass das noch lange nicht so ist. Der Prototyp mag fertig sein, das Spiel selber braucht noch etwas. die ersten 90% eines Spiels dauern genauso lange wie die letzten 10%. Die ersten 90% hast du jetzt geschafft. Den Rest schaffst du auch!
  3. Ich habe zwar keine Ahnung vom Pro Builder, aber wenn du sagst, dass bei Verwendung von Texturen alles ok ist, dann erzeuge doch einfach eine kleine weiße Textur. Also einfach ein Bild in 256x256 und einfach weiß gefüllt. Da die Textur weiß ist, solltest du in Unity über die Grundfarbe des Materials so einfärben können, wie du es brauchst.
  4. Jetzt wo ich die Viedeos so sehe, glaube ich, dass es UI Elemente sein könnten. Oder aber echte Objekte, die mit der Kamera verbunden sind. Diese "Objekte" bewegen sich im Bezug zur Kamera ja nicht, weshalb sie sie entweder Kinder der Kamera oder Objekte in einem Canvas sein müssten. Das Drahtgitter der Objekte, könnten die Collider für die UI Elemente sein.
  5. Das könntest du evtl. noch beheben, wenn du die Kompression auf High Quality und/oder den Filtermode auf Point stellst. Aber ja, eine PNG daraus zu machen ist möglicherweise der beste Weg. Unity kann zwar schon sehr gut mit Photoshop Dateien umgehen, aber die vollen 100% schafft es dann doch nicht.
  6. Das hier ist das Entscheidende:
  7. Jaaa das ist klar. Bei deiner Abfrage der Taste I fragst du leider nicht den Druck, oder das Loslassen der Taste ab, sondern das halten. Und weil das so ist wird der Code dahinter ständig ausgeführt und das schaltet deine UI bei jedem Frame um. Du möchtest eher Input.GetKeyDown() nutzen. Das gibt nämlich nur beim runterdrücken ein true zurück.
  8. Echt jetzt? Das ist es? Du ballerst eine verschlüsselte Fehlerbeschreibung ohne Punkt und Komma raus. Da drin steht dann etwas von einer Plattform, einer AudioSource, OnCollisionEnter2D, einem RB2D und "natürlich" FixedUpdate und Update. Völlig ohne Zusammenhang! Jetzt versucht @Peanutdir zu helfen und fragt dich etwas. Deine Antwort darauf ist "Nein". Kurz darauf fällt dir ein, dass ein RB ja nach unten Fallen würde und dein FixedUpdate trotzdem nicht funktioniert. Jetzt gibt dir Peanut die Info, dass man die Gravity bei einem RB ja ausschalten kann und er würde gerne mehr über das Problem erfahren, weil er dir immer noch helfen will. Und was machst du? Du schreibst, dass du das Problem gefunden hast und bedankst dich. Klasse! Niemand weiß, was dein Problem war und niemand weiß, wie du es gelöst hast. Dafür ist ein Forum nicht da. Ein Forum dient nämlich auch als Nachschlagewerk. Es kann anderen Leuten helfen, indem sie nach erstmal nach einem Problem suchen und auch eine mögliche Lösung dazu finden. Dieser Thread ist verschwendet, denn man kann nicht erkennen was eigentlich dein Problem war und eine Lösung gibt es auch nicht. Aber mach du mal.
  9. Gerne. Ich hoffe, dass deine Bones so gut angeordnet sind, dass du sie im Animator als Humanoid nutzen kannst, dann hast du nämlich sogar die Möglichkeit freie Motion-Capture Daten zu nutzen und möglicherweise sind in den Aniamtionsspure sogar die Posen versteckt, die du willst. Wenn nicht, musst du halt generic nutzen und selber Hand anlegen. Aber das geht schon.
  10. Genau. Du musst der Liste sagen, dass da drin Quaternions sind. An sich ist das jetzt so ok. Aber warum willst du das über eine Liste machen und dann auch noch mit den üblen Quaternions? Ich persönlich würde Animationen erstellen. Selbst wenn da keine Bewegung drin ist, sondern nur eine starre Pose. Ich würde also eine Animationsdatei Datei erstellen, und auf das Vaterobjekt des Humans werfen. Der Animator wird dann automatisch generiert. Der Animation würde ich alle Bones als spuren zuweisen. Dabei werden automatisch 2 Keys erzeugt, die ich löschen würde. Dann würde ich nacheinander die einzelnen Bones drehen und einen Animations-Key bei Bild 0 setzen, um eine Grundpose zu definieren. Ist alles definiert würde ich zu Bild 10 oder so springen und nocheinmal einen Key für alle Bones erzeugen. Diese Datei kann mann man jetzt so oft wie nötig duplizieren und umbennen wie man will. Dadurch wird viel Arbeit erspart. Die kopierten Animationen kann man dann auch in dem Animator ablegen, die nötigen Bones für die neue Pose wieder drehen und die Keys überschreiben. Schon hat man weitere Posen. Jetzt noch im Animator für jede Pose einen Trigger-Parameter erzeugen, und Transitions von AnyState zu den Animationen erstellen. Je Pose den gewünschten Parameter in der Transition auswählen und ExitTime auf 0 sowie die Transition Duration auf 0 stellen. Fertig. Nun kann man im Code den Animator mit MyAnim.SetTrigger("pose1"); sagen, welche Animation er abspielen soll. Der Human verändert einmalig seine Pose und bleibt in dieser, bis ein anderer Parameter angesprochen wird. So würde ich es machen. Vielleicht ist das ja etwas, was du mal testen willst.
  11. Das Ganze ist nicht mehr so freundlich gestaltet und an manches kommt man zuer Laufzeit nicht heran. Aber ich hänge dir hier mal ein Testscript rein und unten drunter erkläre ich es dir. using UnityEngine.Rendering; // brauchst du um Rendersettings anzusprechen using UnityEngine.Rendering.Universal; // brauchst du für den ganzen Rest public class Shadowtest : MonoBehaviour { UniversalAdditionalCameraData AdditionalData; // für den Schatten an sich UniversalRenderPipelineAsset HardShadowRenderer; // ein Asset ohne softShadow UniversalRenderPipelineAsset SoftShadowRenderer; // ein Kopie vom Asset mit softShadow an [SerializeField] Volume MyGlobalVolume; // Ein Global Volume, was in der Szene sein muss // Testfelder [SerializeField] bool ShadowsOn; [SerializeField] bool shadowsOff; [SerializeField] bool makeSoft; [SerializeField] bool makeHard; [SerializeField] bool bloomOn; [SerializeField] bool bloomOff; private Bloom bloom; void Start() { AdditionalData = Camera.main.GetComponent<UniversalAdditionalCameraData>(); // ich hols mir direkt von der Camera. Du kannst natürlich anders machen AdditionalData.antialiasing = AntialiasingMode.FastApproximateAntialiasing; // oder andere Einstellungen } void Update() { if (ShadowsOn) { ShadowsOn = false; AdditionalData.renderShadows = true; } if (shadowsOff) { shadowsOff = false; AdditionalData.renderShadows = false; } if (makeSoft) { makeSoft = false; GraphicsSettings.renderPipelineAsset = SoftShadowRenderer; // nimm das Asset mit softshadows } if (makeHard) { makeHard = false; GraphicsSettings.renderPipelineAsset = HardShadowRenderer; // nimm das Asset ohne softshadows } if (bloomOn) { bloomOn = false; bloom.active = true; // bloom setzen MyGlobalVolume.profile.TryGet(out bloom); // und übergeben } if (bloomOff) { bloomOff = false; bloom.active = false; MyGlobalVolume.profile.TryGet(out bloom); } } } Also. In diesem Script ist nicht nur der Schatten, sondern auch Antialiasing und ein Bereich aus dem GlobalVolume, nämlich das Bloom. Ich habe mir gedacht, dass du da auch die Augenbrauen heben wirst. Deswegen hab ich es mal mit eingebaut. Den Schatten selbst schaltest du nicht mehr in irgendwelchen Qualitysettings ein, sondern bei den AdditionalCameraData. Das ist mit deiner Kamera verbunden. Du musst ne Referenz zu dem Teil bilden und kannst dann ganz einfach über .RenderShadows die Schatten ein und ausschalten. Siehst du ja im Script. Die Qualität der Schatten ist komplizierter. Die werden in dem UniversalRenderpipelineAsset verwaltet. Und das tolle daran ist, dass nicht alle Felder zur Laufzeit gesetzt werden können. SoftShadow ist so ein Feld. Das kannst du zur Laufzeit nur auslesen. Ander Dinge, wie zum Beispiel die Schattenweite kann man direkt einstellen. Na ja. Du musst also ein 2tes RenderAsset erzeugen in dem du das vorhandene einfach duplizierst. Dann benennst du es um, damit du weißt was welches ist, und stellst in einem von beiden den Schatten auf Soft. Auch die beiden Assets musst du Referenzieren und kannst sie dann einfach zur Laufzeit den GraphicSettings übergeben. Es werden also einfach die beiden Assets ausgewechselt. AntiAliasing ist wieder bei den AdditionalCameraData zu finden. Das kannst du einfach wechseln. Eines hab ich dir in der Start vorgegeben. Die anderen Optionen siehst du ja wenn du den Punkt setzt. Bloon ist auch son Dingen. Das würde ja als Posteffekt in den GlobalSettings eingestellt. Hier kannst du aber nicht einfach auf true oder False setzen, sondern du musst das BloomObjekt (Keine Ahnung was das ist) über .active=true setzen und dann dem Global Volume komplett übergeben. Warum man das mit TryGet(Out xxx) machen muss, weiß ich nicht. Das hab ich selber aus dem Netz, denn ich bin da auch fast dran verzweifelt. Vielleicht weiß der @Sascha mehr über die Notwendigkeit es so anzusprechen. Also. Versuch mal das Testscript. Sollte alles funktionieren, wenn du alle Referenzen gebildet hast.
  12. Ich hatte mir das Video vor ein paar Tagen schon mal angeschaut. Das ist schonmal ganz gut. Ohne Licht und Schatten fehlt natürlich was. Aber das kannst du ja backen, es muss also nicht in Echtzeit berechnet werden. Das solltest du eh erst später rein tun, wenn dein Projekt zufriedenstellend läuft. Was ich da über die Stühle gelesen habe, hat mich aufgeschreckt. Huch! 40.000 Polygone! Da kannst und musst du optimieren! Ich weiß zwar nicht was das für fancy Dinger sind, aber mehr als 5000 Polys würde ich einem "Stuhl" niemals geben. In einem modernen Spiel hat ein Stuhl vielleicht 100-500 Polygone. Gut, die sind da nur Beiwerk und nicht für die Visualisierung da. Trotzdem. Da musst du ran! Fahrstuhl und Türen kann man recht schnell in Unity animieren. Oder aber über die Transformkomponente per code drehen oder bewegen. Da findest du ganz viel im Netz.
  13. Willkommen! Dein Werdegang ist so ähnlich wie meiner, nur dass ich mit dem VC20 angefangen habe. Ich habe in deine Videos rein geschaut und ganz klar die Vorlagen für die Spiele erkannt. Hehe! Beim ersten bin ich mir nicht ganz so sicher. Grid Runner vielleicht? Lunar Lander ist klar. Bei deinen Sharks fällt mir der Name des Originals nicht ein, Aber dein Agent müsste Alien Breed als Vorlage haben. Ich habe es so ähnlich gemacht, ich hatte sogar mal ein Grafikadventure auf dem Amiga begonnen, aber nie fertig gekriegt. Das war einfach zu groß und außerdem kam dann der PC um die Ecke. Naja. Ich wünsche dir jedefalls viel Spaß. Hier bist du richtig, denn es gibt viiiiel zu lernen.
  14. Ah, jetzt verstehe ich's. Da hast du was vor. Ich haue jetzt ersteinmal ein paar Links aus der Dokumentation für dich rein: LOD: https://docs.unity3d.com/Manual/LevelOfDetail.html Graphics Performance: https://docs.unity3d.com/Manual/graphics-performance-profiling.html Render Pipelines: https://docs.unity3d.com/Manual/render-pipelines.html Jetzt zu den Links ein wenig Text: LOD ist klar, denn da findest du die Infos, wie es funktioniert und wie es eingestellt wird. Unity hilft dir bei der Erzeugung der Meshes leider nicht. Die Objekte musst du selber in einem 3D Programm deiner Wahl erstellen und via FBX nach unity bringen. Hast du die Dateien aber richtig benannt, baut unity dir dann gleich eine LOD Gruppe zusammen. Bei Graphics Performance geht es natürlich darum, was wieviel Leistung kostet und wie du das Ganze optimieren kannst. Gerade bei den Drawcalls kann man viel einsparen, wenn man weiß, wo man schrauben muss. Hier ist noch so ne Art Tutorial, welches dir helfen könnte. https://learn.unity.com/tutorial/optimizing-graphics-in-unity# Bei Render Pipelines geht es um die unterschiedlichen Renderer, denn Unity hat 3! Ich würde dir empfehlen, falls du es nicht schon eingestellt hast, dass du auf die URP (Universal Render Pipeline) wechselst. Die ist gerade für leistungsschwache Geräte optimiert. Da kommst du garnicht erst in Versuchung, irgendwelche Dinge zu nutzen, die das System überlasten. Jetzt noch zu deiner Hecke. Die ist natürlich ein Klopper! So wie ich es sehe, hast du da jede Menge Flächen, die alle teilweise transparente Grafiken drauf haben. Also ausgestanzte Blätter und Äste. Das ist nicht gut, denn diese überlagernden Transparenzen kosten viel Leistung. Muss es eine Hecke sein? Geht nicht auch ein Zaun? Du musst leider deine Erwartungen etwas runter schrauben. Und du musst dich langsam hoch tasten. Nimm die Hecke ersteinmal komplett aus der Szene raus und baue die wichtigsten Dinge. Nutze die Stats die du oben im Gameview ein- und ausblenden kannst: https://docs.unity3d.com/Manual/RenderingStatistics.html Nutze dann noch den Profiler um in die Details zu gehen. https://docs.unity3d.com/Manual/Profiler.html Der Profiler ist nicht so leicht zu verstehen, weil er dich mit Infos erschlägt. Den kannst du auch erst einmal ignorieren. Die Stats zeigen dir schon recht gut, was da los ist. Tja. Für leistungsarme Geräte zu bauen ist schon nicht leicht, wenn es dann auch noch VR ist, ist es doppelt so schwer. Jetzt hast du erst einmal was zu lesen. Mit all diesen Schlagwörtern findest du bestimmt auch gute Tuts bei Youtube.
  15. Ich verstehe gar nicht, warum die Quest sich aufhängt. Das ist doch eigentlich nur ein Anzeigegerät, oder habe ich da was verpasst. Es ist ja so, dass die Quest im Endeffekt 2 hochauflösende Monitore sind. Es werden 2 Bilder über 2 Kameras erzeugt, die deine Augen simulieren und somit Stereo-Sehen ermöglichen. Da das alles Mal 2 ist, ist natürlich die Menge der berechneten Daten doppelt so groß wie am normalen Monitorl. Und irgendwann macht die Garffikkarte dann dicke Backen. Aber aufhängen sollte sich das System eigentlich nicht. Ich habe jedoch keine Erfahrung mit der Quest. Trotzdem. Es gilt so wenig Polygone wie möglich in der Szene zu haben und die Drawcalls so gering wie möglich zu halten. Das gilt immer, egal ob mit Quest oder ohne. Ein Nebel wird nicht viel helfen, denn der ist meist eine Nachbearbeitung des Bildes, also en Post-Effekt. Die Polygone sind dann schon berechnet. Was du aber machen kannst, ist LOD (Level of Detail) zu nutzen. Dabei brauchst du aber vom den Objekten mehrere Versionen, je nach dem wie viele Detailstufen du nutzen willst, sind es mehr oder weniger. Der Sinn dahinter ist der, dass ein weiter entferntes Objekt mit viel weniger Polygonen dargestellt wird, als das nahe Objekt. Weit entfernte Objekte sind kleiner zu sehen und die Details sind meist nicht mehr zu erkennen, deswegen kann man sie auch weg lassen. Je weiter das Objekt weg ist, umso weniger Polygone braucht man und das weiteste noch sichtbare Objekt kann dann sogar ein Bilboard sein, also einfach eine Fläche mit Foto des Objektes. Das wird z.B. in all den Spielen so gemacht, die viel Landschaft zu sehen haben. Sind die LOD-Stufen zu gering gewählt, sieht man meist ein Aufploppen der Objekte. Sind es ausreichend Stufen, fällt das nicht auf. Das ist natürlich viel Arbeit. Das Sichtfeld der Kameras zu verringer macht eigentlich keinen Sinn, weil dann die Immersion eingeschränkt wird. Aber von der Logik her ist ein kleineres Bild oder ein Bild in geringerer Auflösung immer schneller zu berechnen, als ein hochauflösendes, großes Bild. Das ist ja genau Teil deines Problems. Du hast doppel so viele Pixel, wie der Normalo an seinem Monitor, weil du 2 Bilder berechnen musst. Ich würde dir empfehlen einfach mal raus zu kriegen, wieviele Polygone denn da sein dürfen bis du auf deinem System Leistungseinbußen bemerkst. Also legst du immer neue Objekte mit durchschnittlichen Materialen/Shadern in dein Sichtfeld und guckst mal ab wann es einbricht. Diese Anzahl der Polygone ist dann deine Referenz, unter der du drunter bleiben musst.
×
×
  • Create New...