Jump to content
Unity Insider Forum

malzbie

Moderators
  • Posts

    5,398
  • Joined

  • Last visited

  • Days Won

    402

malzbie last won the day on April 25

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

32,328 profile views

malzbie's Achievements

Advanced Member

Advanced Member (3/3)

1.6k

Reputation

  1. Was heisst denn 2 Panels? Erkläre das mal genauer, denn ich verstehe nicht, warum du Buttons deaktivieren musst.
  2. 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.
  3. 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.
  4. 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!
  5. 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?
  6. 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.
  7. 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.
  8. 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.
  9. Da hast du 100%ig etwas verschoben oder falsch eingestellt.
  10. 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
  11. Da sehe ich jetzt auch keinen Zusammenhang... es sei denn, es hat mit dem Speicher zu tun. Denn static batching dupliziert ja die Objekte die gebatcht werden sollen, verbindet die zu einem Object und belegt dann Speicher der Grafikkarte damit. Vielleicht ist das nicht so gut fürn Handy und der Speicher muss immer wieder freigegeben werden und dann wird neu Gebatcht... Ich weiß es nicht! Es gibt so'n paar Dinge in Unity und dem Profiler, die nicht besonders einleuchtend sind. Ich selber nutze den Profiler kaum noch. Mit dieser Balkenansicht im Timeline-Bereich kann ich z.B. überhaupt nichts anfangen. Man sieht zwar wie lange etwas dauert, aber was bringt's? Was macht denn Clear? Was ist denn Semaphore? Wirkt sich Semaphore auf die Performance aus, oder zeigt es dir einfach nur an wie lange es still im Hintergrund wartet? Und was ist denn alles in dem Others im CPU Bereich drin? Na ja. Man sieht im Profiler wenigstens, dass da irgendwo ein Spike oder eine Grundlast ist. Was es ist und wie man es wegkriegt, findet man meist nur durch rumprobieren raus. Du hast es scheinbar gefunden.
  12. Da ich heute sowieso irgendwie zu nix komme, will ich mir mal ein wenig Zeit nehmen und versuchen die das mit dem Licht zu erklären. In der echten Welt werden von einem leuchtenden Objekt Photonen ausgesendet. Der Einfachheit halber nehmen wir mal eine für uns neutrale Lichtquelle, wie die Sonne. Für und wirkt das Licht weiß, weil es alle für uns sichtbaren Farben beinhalten. Was wir als Farbe interpretieren sind unterschiedliche Wellenlängen der Photonen. Ich schreiben jetzt immer nur Farbe, anstatt Wellenlänge. Sollte ja sowieso klar sein. Die Photonen der Sonne treffen auf irgendwelche Dinge, wie z.B. Gras. Das Gras absorbiert fast alle Farben des weißen Lichts und reflektiert fast nur grünes Licht. Du schaust auf das Gras und siehst das Gras also Objekt und die Refelktion des Sonnenlichts auf dem Objekt. Also grünes Gras. Das Gras selber ist nahezu undurchsichtig und deswegen kannst du einen Schatten vom Grashalm sehen. Soweit so gut. Jetzt beleuchtet aber nicht nur die Sonne, sondern auch die Atmosphere, weil Photonen der Sonne einerseits manche Moleküle des Gases zum Leuchten anregen können, oder aber an ihnen gestreut werden und auch absorbiert werden können. Du kennst das, das ist das Blau des Himmels am Tag und das Rot am Abend oder Morgen, wenn das Licht der Sonne im flachen Winkel durch viel mehr Gas muss. Der Schatten des Grases auf dem Bode ist nicht schwarz, denn in dem beschatteten Bereich fällt immer noch viel Streulicht von der Atmosphere und allen anderen Grashalmen drumherum, die das Licht da hin reflektieren. Ein andere Beispiel wäre da die Staubwolke, wie du sie ja über Partikel lösen willst. Der Staub, als Ganzes gesehen, würe ein transluzenter Körper sein. Also etwas was durchscheinend ist bzw. Licht diffus hindurch transportiert. Du kennst das von milchigem Glas oder sogar deiner Haut, durch die Licht hindurch kommt und dabei dann so wirkt, als würde das Glas oder die Haut leuchten. Dort werden die Photonen innerhalb des Körpers hin und hergestreut bis sie an der anderen Seite wieder heraus kommen. Natürlich auch dort gerne in anderer Farbe, weil gewisse Farben absorbiert werden können. Das Alles würdest du jetzt gerne in deinem Spiel sehen wollen. So etwas physikalisch korrekt zu erstellen, ist aber nicht möglich. Eine Rendersoftware braucht für ein son Bild mehrere Minuten bis Tage, je nachdem wie genau es sein soll. Du weißt das ja, weil du schon Lightmaps gebacken hast. Aber auch dort wird nur mit wenigen Photonen simuliert und nicht mit Milliarden pro Quadratzentimeter. Außerdem werden die Bounces sehr stark reduziert. Das ist die Anzahl der Reflektionen von der Lichtquelle über Objekt(e) zur Kamera. Jeder Bounce verändert die Lichtfarbe und gibt dem getroffenen Objekt etwas mehr Beleuchtung. Alles über 3 Bounces fällt aber eh kaum noch ins Gewicht. Und wo wir eben bei den Lightmaps waren. Bei deinem Spiel müssten diese Maps riesengroß sein um realistisch zu sein. Dann könnte es keiner mehr spielen, weil keiner mehr Speicherplatz fürs Spiel selbst hat. In Unity hast du einige Dinge die dir helfen können den Realismus zu erhöhen. Es wird jedoch nie Real werden! Als Erstes hast du dein Environment Light. Damit kannst du eine Grundausleuchtung deiner Szenerie gestalten. Es kann eine einzelne Farbe sein, ein Skybox-Material oder ein Farbverlauf aus 3 Farben (oben, mitte, unten). Du kannst diesen Ambient Sky auch per script bedienen und z.B. Verlaufsfarben ändern. Hier kannst du schön sehen, wie sich sowas auswirken kann. Wenn du jetzt also Bereiche im Spiel definieren würdest, wo reflektiertes Licht vom Boden grün ist, und wo es braun ist, könntest du per script die Lichtfabe der GroundColor ändern und gute Effekte erzeugen. Dann hast du die Möglichkeit der Realtime Global Illumination. Kennste ja. Hier werden Reflektionen und Shatten gebacken und deinen Texturen überlagert. Das Funktioniert aber eben nur mit statischen Objekten oder, wenn Lightprobes im Spiel sind auch für die Beleuchtung von dynamischen Objekten. Da aber die Info der Probes gebacken ist, wird sich nichts ändern, wenn zusätzliche Objekte in dem Bereich auftauchen. Die Beleuchtung bleibt so, wie sie war, als gebacken wurde. Bei den Probes wird außerdem immer nur der, der dem Objekt am nächsten ist, genutzt. Ist das z.B. ein Probe, welches Beleuchtung von einem Sandbereich geben würde, dein Tier steht aber auf einer Wiese, wäre das Tier trotzdem Sandfarben beleuchtet. Bei den Reflection Probes ist das so ähnlich, wobei die, gaube ich, überblenden. Egal. Du musst die Probes so setzen, dass deine Bereiche gut zur Beleuchtung passen. Also hier und da enger setzen und woanders kann es viel breiter sein. Das große Problem bei den Probes, egal ob reflection oder light, ist, dass du nur das lokale Bild projeziert kriegst. Es ist ja im Endeffekt sowas wie eine Skymap von einem gewissen Punkt aus. Deswegen auch immer daran denken, dass die Intensität deiner Lightmaps viel zum Gesamtbild beitragen. Manchmal will man vielleicht nur leicht unterstützen, weil viele andere Lichter noch im Spiel sind. Raytracing ist ja das neue Zauberwort. Leistungshungrig, nur auf den modernsten Karten zu kriegen und auch nur nützlich, wenn etwas gut reflektiert. Bei diffusen Reflektionen ist sogut wie kein Mehrwert da. Da kann man dann auch Lichtquellen oder Skymaps nutzen. Bei deinem Staub musst du richtig Faken, entweder gibst du ihm ein Eigenleuchten, oder aber du nutzt eine Lichtquelle, die nur für den Staub da ist und immer in nähe der Kamera ist. Das kannst du schön mit einem extra Layer bewerkstelligen. Je nach Tag oder Nacht, hat das Licht dann mehr oder weniger Intensität. Der Staub bräuchte eigentlich einen transluzenten Shader. Sowas gibt's, aber wieviel Performance sowas kostet und ob sowas überhaupt bei einem Partikel geht, weiss ich nicht. Na ja. Man kommt sicher an einen gewissen Realismus heran, mühsam und mit viel Ressourcenhunger. Finde selbst heraus wie viel du brauchst und immer daran denken: Es ist ein Spiel! Die Stimmung sollte passen, aber es muss nicht zu 100% realistisch sein. Guck dir Cyberpunk an. Die haben viel zu viel gewollt und alles in den Sand gesetzt. Und jetzt, ein Jahr nach release, geht immer noch nicht alles und das echte schicke Raytracing geht auch nur auf dem PC.
  13. Du hast ja die nötige Position beim Instantiate schon ermittelt. Also änderst du dein Update einfach so ab. void Update() { if (firstGround.transform.position.x <= transform.position.x -9.9f) { GameObject tempGround = firstGround; firstGround = secondGround; secondGround = thirdGround; thirdGround = tempGround; thirdGround.transform.position= new Vector3(secondGround.transform.position.x + 19.8f, -4.5f, 0f); } } Wie du siehst, habe ich eine lokale GameObject Variable, in die der firstGround temporär abgelegt. Das Gameobject willst du ja weiter nutzen und soll nicht überschrieben werden. thirdGround bekommt dann am Schluss das Gameobject vom tempGround übergeben und wird danach an die richtige Position geschoben. Das ganze Verschiebesystem kann man natürlich auch anders bzw. eleganter lösen, denn man könnte z.B. auch eine Liste oder ein Array nutzen. Du könntest dir evtl. auch überlegen, dass du das nicht über ein Zentrales Script löst, sondern dass jede Platte sich selbst verschiebt, wenn sich hinter dem Player ist. Also jede Platte ihre eigene Logik hat. Es gibt viele Möglichkeiten für sowas. Hier hast du jedenfalls eine Möglichkeit mit der du was anfangen kannst.
  14. Da du eh immer nur 3 Grounds nutzt, solltest du einfach den letzten Ground versicheben. Also nicht zerstören und neu instanzieren, sondern einfach da hin schieben, wo der neue Ground instanziert würde.
×
×
  • Create New...