Jump to content
Unity Insider Forum

malzbie

Moderators
  • Posts

    5,413
  • Joined

  • Last visited

  • Days Won

    403

Everything posted by malzbie

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Sorry @Sascha Ich hatte nicht so viel Muse wie du und habe deswegen schnell mal das Video gepostet. Hätte ich es nicht gemacht, wäre ich wieder zu spät gewesen. Deine ausführliche Antwort ergänzt das Video recht gut, weil du ja schön schreibst, wie er die Daten dafür benutzen kann. Besser geht's doch garnicht.
  7. Moin! Das was du suchst nennt sich Mesh Generation. Unity kann das natürlich. Hier ist mal ein gutes Video dazu, was dir viele grundsätzliche Dinge erklärt.
  8. Jaja. aber da in den Scripten nichts drin ist, was die Animation blockieren könnte, muss es im Animator selber sein. Verstehst du das? Öffne mal den Animator und klicke das Objekt an, welches den Animator hat. Wenn du jetzt das Spiel startest und es nicht im Vollbild ist, solltest du im Animator sehen, welche Animation er gerade abspielt. Du solltest auch sehen, welche Parameter gesetzt sind, bzw. gesetzt werden, wenn du Buttons drückst. So, und dann gehste mal auf die Plattform und auch wieder runter. Solltest du jetzt den Jump Button drücken und der Parameter isJumping wird true, ist von außen alles in Ordnung. Wird die Animation aber trotzdem nicht ausgeführt, musst du mal schauen, was da im Animator passiert. Kann ja sein, dass eine andere Animation ständig gestartet wird und deinen Jump somit überschreibt.
  9. Ja, man kann Licht und Schatten berechnen/backen. Das geht aber nur bei Objekten die Static sind, also sich nicht mehr im Raum bewegen. Dann gibt es noch Reflection Probes und Light Probes, die dir bei bewegilchen Objekten helfen können. Das alles kann ich nicht auf die Schnelle erklären, weil das ein großes Feld ist. Schau dir dazu mal die Dukumentation von Unity an und such mal nach Tutorials. Ein Material/Shader aber komplett vorzuberechnen geht so nicht, denn du willst dich ja in der Szene bewegen. Du musst halt schauen was für einen Shader du nutzen willst. Es gibt ganz einfache Shader, die nur den Texturkanal haben nicht glänzen oder spiegeln. Es gibt die Unlit Shader, die von selbst leuchten, also keine Lichtquelle nutzen. Dann kannst du sagen ob sie Schatten empfangen sollen oder nicht und ob sie schatten werfen oder nicht. Und noch vieles mehr. Übrigens: Die Quest berechnet das nicht. Sie zeigt es nur an. Das sind einfach nur 2 Kameras, die beide in einer gewissen Auflösung das Bild für deine 2 Guckeäugelchen aufnehmen und auf die 2 internen Monitore geben. Es wird also doppelt soviel Info verarbeitet und erzeugt, als wenn du mit einem normalen Monitor, der selben Auflösung das Spiel spielen würdest. Deswegen ist die Anzahl der Objekte und Polygone so wichtig. Und das wird dann mit den Lichtquellen Schattenwerfern und Shadereffekten nochmals multipliziert. Also Backe dein Licht und deinen Schatten und sei sparsam mit den Polygonen, Objekten und Effekten.
  10. So wie ich das sehe, hast du da scheinbar, mindestens in Teilen, code verwendet, der nicht von dir ist. Das iat ja nicht schlimm. Man sollte aber wissen was da passiert. Ich finde es etwas verwirrend weil da einige Inkonsistensen drin sind. Z.B. OnLandEvent ist ein UnityEvent. On CrouchEvent ist ein BoolEvent. Warum das eine so und das andere so? Wo die Events später genutzt werden sehe ich leider nicht. Dann hast du ja geschrieben, dass der Sprung an sich geht, aber die Aniamtion nicht abgespielt wird. Also habe ich mal meinen Fokus auf das Animationsscript gelegt. Der Animator sollte eigentlich immer den boolschen Parameter "isJumping" auf true gesetzt bekommen, wenn du den Button dückst. Da gibt es keine weitere Bedingung. Außer du hast eine Bedingung in einer der Transitions drin, wo du von einer Animation zum Jump Animation gehst. Zusätzlich zum Setzen des Parameters im Animator setzt du noch die bool jump auf true. Man sieht aber nicht wofür die genutzt wird. Sie ist Public, also kann sie von irgendeinem Script abgefragt werden. Nur von welchem? Diese jump Variable setzt du außerdem auf false, sobald fixedUpdate ausgeführt wird. Da gibt es keine Bedingung die wird immer in der FixedUpdate auf false gesetzt. Da FixedUpdate einen anderen Zyklus hat, als die Update, ist die jump Variable nur einen ganz kurzen Zeitraum true. Also für mich macht das keinen Sinn. Jetzt hast du da noch 2 Methoden dirn. OnLanding() und OnJumping(). Von wo werden die aufgerufen? Hast du da Animationsevents, die da rein springen? Wenn ja, was ruft OnJumping() auf und warum ruft es das auf? In der Methode setzt du den gleichen Parameter auf true, wie du das auch beim Input des Buttons gemacht hast. Eigentlich sollte wirklich nur der Button den Parameter auf true setzen. Verstehe ich nicht... OnLanding() leuchtet mir ein, wenn ein Animationsevent die Variable auf false setzen soll. Wenn das aber von ganz woanders kommt, dann leuchtet mir das auch nicht ein. Lange Rede, kurzer Sinn: Variablen, die in einem Script auf true und false setzt, die aber nirgendwo als Bedingung nutzt, sind sinnlos. So wie die crouch Variable. Variablen die Public sind, können von anderen Scripts abgefragt und auch verändert werden. Wenn das so ist, dann solltest du einen Kommentar dazuschreiben, welches Script darauf zugreift. Und falls du das nur zum Gucken oder testen gemacht hast, dann schreib das auch hin. Das hilft nicht nur mir, sondern auch dir selber. Du nutzt Events zur Kommunikation. Das ist ok. Aber wer hört denn auf diese Events? Ist da vielleicht noch etwas wichtiges im Spiel? Da der Parameter isJumping im Animator immer auf true gesetzt wird, sobald du den Button drückst, muss dein Problem im Animator zu finden sein. Entweder wird gerade eine Animation abgespielt, die keine Verbindung zur Jump Animation hat, oder aber die Verbindung hat nicht nur isJumping==true da drin. In den Scripten sehe ich jetzt nicht, warum die Animation nicht gestartet wird.
  11. Willkommen! Vorweg möchte ich dir sagen, dass nicht so gut ist, ein Screenshot vom Code zu posten. Füge lieber den Code in deinen Beitrag wiefolgt ein: Kopiere den Code, den du posten willst, in die Zwischenablage. Drücke in der Menüleiste fom Eingabefeld auf die 2 Spitzklammern <> direkt neben dem Smily Jetzt geht ein neues Fenster auf, wo du unten rechts "C" für das Highliting auswählen solltest, damit der Code schön bunt wird. Jetzt fügst du deinen Code einfach in das Fenster ein und schließt das Fenster. Das lässt sich jetzt viel besser lesen als ein Screenshot. Zu deinem Problem: Du hast leider nur den Code der Plattform gepostet. Da wird ja der Player beim OnEnter zum Kind der Plattform und beim OnExit wieder entlassen. Da ist aber leider nichts von den Bedingungen für den Sprung vom Player zu sehen. Warum der Sprung jetzt nicht geht, kann man hier nicht erkennen. Poste bitte mal den Codebereich, wo es um das Springen des Players geht.
  12. Genau. Da gibt es noch ein Culture Info, die das Ganze umformatieren sollte.
  13. Du nutzt ja forward für die Beschleunigung. Das heißt, dass du in Richtung der Z Achse Kraft ausübst. Das kannst du auch genau so abfragen. Eine Vorwärtsbewegung hat einen positiven Wert, Rückwärts wäre negativ. Also frage einfach die Velocity des RB's ab. Und nutze am besten 2 boolsche Variablen. So etwa: if( (Input.GetKey(KeyCode.W) || Input.GetButton("Fire1") ) && _rueckw == false){ // ich habe keinen Rüeckwärtsgang drin, kann also jetzt los fahren und lege auch gleich den Vorwärstgang ein. _vorw = true; //... } if( (Input.GetKey(KeyCode.S) || Input.GetButton("Fire3") ) && _vorw == false){ // ich habe keinen Vorwärtsgang drin, kann also rückwärts fahren und lege auch gleich den Rückwärstgang ein. _rueckw = true; //... } // hier wird jetzt ab einem gewissen Schwellenwert in der Nähe der 0 die entsprechende Variable zurück gesetzt. if(_rb.velocity.z < 0.5f){ // sobald ich unter den Wert von 0.5 komme, fliegt der Vorwärtsgang raus (falls er denn drin war). _vorw = false; } if(_rb.velocity.z > -0.5f){ // sobald ich über den Wert von -0.5 komme, fliegt der Rückwärtsgang raus (falls er denn drin war). _rueckw= false; }
  14. Moin! Ich will nur mal schnell ein paar grobe Dinge erklären, die dir aber weiter helfen könnten. Und zwar rendert Unity ( eigentlich alle Engines) immer nur das, was im Sichtfeld der Kamera ist. Das bedeutet aber nicht, dass Unity erkennt ob eine Wand etwas verdeckt. Ist es in Richtung der Kamera, wird es auch berechnet. Willst du so etwas verhindern kannst du Occlusion Culling nutzen: https://docs.unity3d.com/Manual/OcclusionCulling.html Jedes Objekt, welches auch nur zum Teil in der Kamera ist, wird komplett berechnet. Ist dein Haus, also das ganze Gemauerte nur ein Mesh, dann wird es auch komplett berechnet. Besteht das Haus aus vielen Einzelobjekten, werden nur die Objekte berechnet, die auch sichtbar sind. Es macht also Sinn, nicht alles zu einem Mesh zusammenzuführen, wenn es sehr groß ist. Andererseits ist es für die Berechnung gut, wenn wenn so wenig Objekte wie möglich da sind. Du kannst ein Auto aus vielen Objekten zusammen stellen, was auch Sinn machen kann wenn sich z.B. die Motorhaube und die Türen öffnen lassen sollen, oder aber weniger Objekte nutzen wenn die Türen und Haube sich nicht öffen lassen müssen. Du musst jetzt aber nicht alles 2Mal bauen, denn Unity kann Objekte, die das Selbe Material haben auch automatisch zusammen fassen wenn sie static sind. Das nennt sich static batching: https://docs.unity3d.com/Manual/static-batching.html Diese Dinge kosten etwas mehr CPU Leistung, aber die GPU wird dadurch entlastet. Ansonsten solltest du immer schauen, dass du so wenig Poygone wie möglich in der Szene hast. Alles nicht bewegliche auf static stellen und evtl. Licht und schatten backen. Deine Materialien (Shader) sparsam nutzen. Jedes kleine Effektlein kostet einen Durchlauf mehr bei der Berechnung. Nutze die Stats Anzeige (Oben rechts beim Gameview) um schon einmal zu sehen, was da alles in der Szene los ist. Nutze den Profiler um genauere Leistungsanzeigen zu sehen. Das wars erstmal von mir.
  15. Was heisst denn 2 Panels? Erkläre das mal genauer, denn ich verstehe nicht, warum du Buttons deaktivieren musst.
  16. Von der Logik her müssten die Static Variablen der sparsamste Weg sein, denn die sind immer an der selben Stelle im Speicher. Sie belegen aber auch immer ihren Platz, egal ob sie gebraucht werden, oder nicht. Es ist doch so, dass ein Szenenwechsel ja den alten Kram verwirft und alles neu einlädt, was in der neuen Szene jetzt nötig ist. Ein Scriptable Object, was ja an ein Script gebunden ist, wird mit dem Script neu eingeladen / verknüpft. Ein Singleton, was den Szenenwechsel überlebt, bleibt im Speicher. Aber wahrscheinlich wird in jeder Szene ein Singelton geladen (damit es beim laden einer bestimmten Szene auch da ist), was dann schaut ob es einzigartig ist und wenn nicht sich wieder zerstören würde. Da passiert also noch viel mehr als nur ein Einladen und das kostet alles eine gewisse Zeit. Hier und da würden also Daten neu eingelesen und in den Speicher geschoben werden. Nur von wo werden sie eingeladen? Sind sie nicht vielleicht schon längst im Speicher, weil die Engine weiß, dass sie fürs Spiel gebraucht werden? Ich weiß nicht, wie weit die Engine optimiert ist. Was relativ langsam ist, ist ja das Laden von einem mechanischen Laufwerk. Alles Andere geht so schnell, dass du keinen Unterschied feststellen wirst. Und wenn deine neue Szene nur eine einzige Textur oder einen Sound laden muss, die/der vorher noch nicht da war, dann sind deine paar Daten in den Variablen völlig nebensächlich.
  17. Ich habe es noch nicht genutzt und ich werde auch noch warten. Viele Dinge sind zwar geplant aber noch lange nicht implementiert. Hier kannst du mal die Unterschiede vergleichen und so ab der Mitte der Seite siehst du was alles noch nicht geht. Und das ist ganz schön viel! https://docs.unity3d.com/Manual/UI-system-compare.html Es ist zwar nett wenn man es auch im Editor funktioniert und man auch Cascade styles nutzen kann, aber es ist noch sehr begrenzt wenn es um Text und Events geht. 3D bzw. World space geht auch noch nicht.
  18. So richtig kann ich dir leider nicht helfen, weil ich in der PDF Materie nicht drin bin. Ich weiß aber, dass PDF ja eigentlich ein Format für den Drucker ist. Das bedeutet, dass das Layout, was du siehts genau so auf dem Drucker erscheint. Damit das funktioniert, müssen aber auch alle Steuerungs-Tags drin sein. Das ist so ähnlich wie beim HTML. Wenn du da in einem Bereich eine End-Befehl vergisst, zeigt der Browser dir trotzdem noch etwas an, aber eben falsch weil er von oben nach unten durchfährt und dann erst der Fehlende Befehl auffällt. PDF ist außerdem schwierig zu handhaben, weil es sehr viele Versionen gibt und die nicht immer kompatibel sind. Deine PDF ist irgendwo schadhaft. Ich habe die Datei mal mit 2 Browsern angeschaut und diesen Unterschied festgestellt: Links ist der Edge, Rechts ist der FireFox am Werk. Der Edge hat komplette Skalierungsprobleme, der Firefox kann es eigentlich. Wenn ich die Datei in irgendeine Adobe SW einlade, wie z.B. Photoshop dann ist die Grafik als solches nicht zu erkennen, die ist da komplet im Arsch. Du musst dich da wohl noch ein wenig schlau machen, was für Daten in die PDF rein müssen, damit alles passt. Momentan ist die Sache noch nicht vollständig bzw. falsch konfiguriert. Du brauchst außerdem auf jeden Fall einen Einen Editor, der die die Hex-Werte anzeigt, damit du genau erkennst was da ist. So wie hier im Bild. Zu sehen, dass in der defekten Datei Fragezeichen drin sind, reicht nicht aus. Mehr kann ich leider nicht sagen. Aber ich glaube es fehlt nicht mehr viel. Du kriegst das hin!
  19. Oben schreibst du, dass sich das Bild nicht einfügen lässt. Unten schreibst du aber, dass das Bild "einfach" nicht richtig angezeigt wird. Und es ist auch ein Bild in der PDF drin... Also geht's ja doch?! Wie soll es denn angezeigt werden?
  20. So ein Flimmershader könnte funktionieren, wird aber Leistung kosten, und da bist du ja eh schon im oberen Bereich. Wie wäre es mit einer Schlucht? Was ich auch gut finde, ist sowas, was bei The Thalos Principle gemacht wurde. Wenn man eine Grenze übertritt, hört man "Gottes" Stimme die einen warnt. Wenn man dann trotzdem weiter geht, wird man zurück gesetzt. Vielleicht kannst du das ja so ähnlich umsetzen.
  21. Vergleiche mal ein Objekt, welches nicht geht, mit einem funktionierenden. Guck mal im Static-Bereich ob da ein häkchen fehlt. Sind Objekte dynamic, darfst du Dynamic Occlusion nicht ausschalten. Wenn du keine Bilder hochladen kannst, dann haste wahrscheinlich deinen Platz verbraucht. Lösche alte Bilder um Platz frei zu machen. Die Option findest du, wenn du ganz oben rechts auf das Dreieck neben deinem Avatar klickst und in den Bereich "Meine Dateianhänge" gehst.
  22. Ok. Aber dann hast du also doch etwas geändert. Wenn plötzlich etwas passiert, was kurz zuvor noch nicht da war, dann immer mal zurücklehnen und überlegen was du dazwischen getan hast.
  23. Da hast du 100%ig etwas verschoben oder falsch eingestellt.
  24. Ach um solche Schüsse geht es. Die sind doch nicht schnell! Ne Gewehrkugel ist schnell. Da sollte es reichen, wenn du einfach den Fixed Timestep reduzieren. Steht ja auf regulär auf 0.02 und kann man ohne Probleme auf 0.01 runter stellen. Dadurch wird FixedUpdate() und alle anderen physikalischen Berechnungen doppelt sooft ausgeführt. Also anstatt 50mal/sec dann 100mal /sec. Unendlich klein kannst du das natürlich nicht machen, weil irgendwann der Prozessor dicke Backen machen wird. Die 0.02 steht da aber seit anbeginn der Zeit, also noch bevor die Intel I-Reihe kam. Da kannst du also ruhig ein wenig runter schrauben und alle gängigen Rechner werden das mühelos bewältigen. https://docs.unity3d.com/2020.1/Documentation/Manual/class-TimeManager.html
×
×
  • Create New...