Jump to content
Unity Insider Forum

Thariel

Members
  • Posts

    499
  • Joined

  • Last visited

  • Days Won

    19

Everything posted by Thariel

  1. Hi Der Spieler kann einen Ordner auf seinem PC definieren, in dem sehr viele und grosse Dateien sind und er kann sie danach in Unity in Kategorien sortieren, sie bewerten und so weiter. Ich möchte also Dateien in eine XML Datenbank aufnehmen und über diese Dateien Informationen speichern. Irgendwie muss ich die Dateien wiedererkennen um ihnen die Informationen zuordnen zu können. Der Dateiname taug dazu nicht, weil es kann in verschiedenen Unterordner mehrere mit selbem Namen geben. Den Pfad mit Dateinamen zu verwenden geht auch nicht, weil man die Dateien verschieben könnte und sie nicht mehr erkannt werden. Ein Hash berechnen geht viel zu lange. Die Dateien können 10GB gross sein und es können 1000 Dateien sein. Es sollte nicht länger als 1000ms gehen, um eine Datei zu erkennen. Habt ihr eine Idee, wie ich Dateien schnell, aber ohne ihren Namen erkennen und zuordnen kann? Es wäre nicht sehr schlimm, wenn es in seltenen Ausnahmen dabei eine Verwechslung geben würde. Hoffe ihr habt da eine Idee 😃 Edit: Es sollte auch Plattformunabhängig funktionieren.
  2. Ich hab jetzt ein kleines Video gemacht um es zu demonstrieren. Leider nicht so tolle Qualität. Hab echt lange rumprobiert, aber ging gerade nicht besser. Zu sehen ist vor allem, dass die Decals immer nur an Orten platziert werden, wo sie nie überlappen oder überstehen. Ausserdem werden nur 50 dargestellt und die ältesten wieder gelöscht. Das ganze ist jetzt ohne Projektoren. Bin mit dem Ergebnis so zufrieden und muss nur noch Pooling anwenden, um es abzuschliessen.
  3. Hi Ich hätte gerne die Möglichkeit, ein Dissolve Effekt auf alle Npcs anzuwenden. Dazu hab ich (URP) mit dem Shader Graph den Standard-LitShader nachgebaut und den Dissolve Effekt mit integriert. Leider wird das Objekt jetzt verkümmert dargestellt, auch wenn der Alpha Wert noch so hoch ist, dass keine Transparenz dargestellt wird. Die Transparenz-Eigenschaft kann ich aber natürlich nicht entfernen, sonst funktioniert es ja nicht mehr. Oder mache ich das grundsätzlich irgendwie falsch? Kann ich etwas tun, dass das Objekt nicht mehr verkümmert dargestellt wird? Gibt es vielleicht sogar die Möglichkeit, den Teil im ShaderGraph für den Dissolve Effekt erst nachträglich zu aktivieren? Gibt es die Möglichkeit, 2 Materialien mit einem Fade auszutauschen? Dazu würde ich einfach den Standard-LitShader nutzen und bei bedarf auch einen Dissolve Shader wechseln. Links mit Dissolve Shader:
  4. Ja, da hast du recht. Vor allem auch für die Munition, Hülsen und so weiter. Muss mich mal ernsthaft damit befassen. Mit SRP meinte ich den Built-in Shader. Habe mich jetzt aber weiter mit URP und HDRP befasst und es gibt tatsächlich eine Menge Gründe, die für die URP sprechen, gerade auch in VR. Habe die URP bereits aktiviert und "dein" Decal System getestet. Leider gibt es da auch Probleme. Zum Beispiel langgezogene Decals an Kanten, wenn der Projektor nicht korrekt positioniert wird. Zudem projiziert der Projektor auf alles. Wenn ein Objekt vor den Projektor gerät, wird das Decal plötzlich darauf gerendert. Hab noch kein Weg gefunden, da bestimmte Layer auszuschliessen. Aktuell bleibe ich lieber noch bei meinem jetzigen System 😀
  5. Hi Danke für den Tipp. Ich hab eigentlich nicht vor, die SRP zu verlassen. Gibt sonst sicher kompatibilitäts Probleme mit anderen Assets. Ich hab es jetzt so gemacht, dass ich vor dem platzieren eines Decals mit 4 Raycasts prüfe, ob jeden der Ecken auch auf Grund liegt. Danach platziere ich das Decal und sie haben ein Box Collider, damit sie nicht überlappen. Ich sorge ausserdem, dass nie mehr als 50 Decals vorhanden sind, sonst wird das älteste wieder gelöscht. Ich denke, es sollte so von der Performance her passen. Schliesslich ist das Schiessen und die direkten Auswirkungen darauf DAS Kernelement vom Spiel, da darf man auch mal etwas in die Performance investieren. Funktioniert jetzt alles sehr gut.
  6. Hi Mich würde interessieren, wie ihr Decals in euern Spielen handhabt oder wie ihr es tun würdet. Habe mir darüber bisher noch keine Gedanken gemacht, hab irgendwie damit gerechnet, dass Unity da eine Built-in Lösung hat... falsch gedacht 😂 Im Moment erstelle ich einfach ein GameObject mit einem Sprite Renderer und positioniere es mit einem Raycast. GameObject go = Instantiate(goBulletHoleTemplate, hit.point, Quaternion.LookRotation(hit.normal)); go.transform.position += go.transform.forward * 0.0001f; //flickern verhindern Natürlich überlappt das Decal auch (noch) Ecken und Kanten: Ich hab mir das in Serious Sam 3 VR BFE ganz genau angeschaut. Da überlappen Decals niemals eine Kante. Das Decal wird "abgeschnitten" dargestellt: Ich hab keine Ahnung wie die das machen. Zum Beispiel könnte man bei jedem Decal mit 4 Raycasts prüfen, ob da wirklich überall Untergrund ist, aber dann gäbe es an Ecken keine Decals mehr und es wäre nicht besonders performant, vor allem bei einer Schrotflinte, die etwa 15 Einschusslöscher macht. Ich denke da gibt es irgend einen performanten Trick, den ich (noch) nicht kenne 😀 Hab ihr irgend welche Ideen? Danke schon mal! Edit: Ausserdem werden nie 2 Decals übereinander positioniert. Irgendwie wird erkannt, dass da schon ein Decal ist, aber kann mir nicht vorstellen, dass dieses Decal ein eigener Collider hat... oder überschätze ich einfach die Performance Einbusse für solchen "Kleinkram"?
  7. Ich speichere immer in XML Files mit System.Xml.Linq.XDocument
  8. Ich kenne das Oculus Plugin (gibts gratis im Unity Asset Store) und das hat bei mir immer auf Anhieb funktioniert. Ich habe noch nichts mit SteamVR entwickelt, aber SteamVR ist sicher zukunftsträchtig. Ich würde sogar eher zu SteamVR raten, weil Facebook scheint ja völlig übergeschnappt zu sein mit dem Facebook zwang und so weiter. Viele wollen von Oculus weg und Oculus hat kein Mittelklasse oder High-End Headset das nur ansatzweise konkurrieren könnte. Bei SteamVR bist du sicher gut aufgehoben. Wäre nur ärgerlich, wenn Oculus plötzlich dagegen arbeiten würde.
  9. Das Projekt nimmt langsam Gestalt an, das ist gut 👍 Ich habe noch einen Vorschlag: Du könntest beim Soundeffekt vom Schuss jedes mal den Pitch Wert zufällig variieren (z.B. Random.Range(0.85F, 1.15F)), so dass jeder Schuss ein wenig mehr Variation hat und es dynamischer klingt.
  10. Ich denke es ist nicht die Funktion SetActive(), die langsam ist, sondern es liegt eher am GameObject selbst. Wahrscheinlich gibt es da für Unity einfach "viel zu tun", um es ein/aus zu schalten. Wenn du es mit einem anderen oder leeren GameObject machst, wird es sicher sehr schnell sein. Hatte aber noch nie Performance Probleme beim ein und ausschalten. Ich denke das Problem liegt daran, dass da etwas nicht so elegant entwickelt hast. Edit: War zu langsam 🤪
  11. Ich finde die Musik einfach super 😄👍 Ich glaub ich lass' die grad ne weile laufen! Das Sprunggeräusch finde ich gut so.
  12. Die grünen Linien der BoxCollider siehst du ja und die anderen wurden gezeichnet. Du kannst mit der Gizmos Klasse selber Linien und vieles mehr zeichnen: https://docs.unity3d.com/ScriptReference/Gizmos.html Zum Beispiel kannst du genau diese Funktion in dein Script kopieren und es wird eine gelbe Kugel im Editor Window gezeichnet. Du kannst deine eigene Funktion schreiben um Dinge zu visualisieren und so verstehen, ob dein Script richtig arbeitet. void OnDrawGizmos() { // Draw a yellow sphere at the transform's position Gizmos.color = Color.yellow; Gizmos.DrawSphere(transform.position, 1); }
  13. Die grösse des BoxCillider2D kannst du natürlich schon ermitteln. Hier siehst du alles Relevante zum BoxCollider2D: https://docs.unity3d.com/ScriptReference/BoxCollider2D.html Interessant sind da sicher size und bounds. Wenn dein Charakter zum Beispiel auf ein Gegner springen soll, so wie in Mario, dann kannst du einfach das Zentrum der Gegner-BoxCollider nehmen und die Hälfte der Höhe der Box addieren. Das selbe machst du mit der Charakter Box, aber subtrahierst die Halbe Höhe. Wenn der Y Wert nun etwa gleich gross ist, ist der Charakter auf den Gegner gesprungen. Aber du kannst auch einfach mehrere BoxCollider nehmen. Das ist sicher am einfachsten. Du kannst auch nach der Kollision noch ein Linecast machen und dann hast du einen genauen HitPoint, aber die Seite musst du dann immer noch ermitteln. Es gibt da wirklich viele Möglichkeiten.
  14. Du hast bei der Kollision beide Objekte und kannst ganz einfach ermitteln, wo welches ist anhand von transform.position.
  15. Hi Ich suche schon länger ein Buch oder eine andere Quelle, die erklärt, wie man selbst Rätsel erfindet. Ich meine damit eine Sammlung von Techniken und Vorgehensweisen, wie man ein Rätsel oder ein bestimmter Rätseltyp erfinden oder wie man vorgeht. So wie ein Spiel über Game Design, aber halt über Rätsel Design. Kennt jemand so ein Buch?
  16. Ich bin ehrlich gesagt sehr neidisch auf die Grafiken, Models und Animationen, die du erstellst. Bei mir ist es nämlich immer genau anders rum, ich bin immer total fortgeschritten mit den technischen Dingen und Spielmechaniken, aber der Inhalt fehlt mir immer und muss ihn mir mühsam zusammen suchen. Wir würden uns sicher gut ergänzen 😂 Musik gibt es sehr viele, würde da nicht extra jemanden dafür bezahlen. Zum Beispiel kannst du dir ein Envato Elements Abo gönnen, dann kannst du schon mal viel SFX und Musik (und auch viel anderes wie PS Pinsel, Web Vorlagen, ...) runterladen. Ansonsten: Weiter so! 😀
  17. Macht schon mal einen guten ersten Eindruck 😀 Ich weiss nicht ob die Musik im Spiel oder nur im Video ist, aber sie ist ziemlich dominant und verschluckt die kleinen Umgebungsgeräusche. Könnte mir vorstellen, dass man sich mit weniger oder gar keiner Musik, viel besser in die Katze hineinversetzen kann, wenn die Sound Effekte der Umgebung reichhaltig sind. Könntest ja eine Funktion "Lauschen" machen und dann hört man weiter entfernte Objekte. So wie ein radar um Dinge zu finden.
  18. Hi Hat jemand eine Idee, wie ich die Kette am besten in Maya "im ganzen" Biegen kann, ohne jedes einzelne Glied positionieren zu müssen? Möchte die Kette über das Rad legen... Danke schon mal
  19. Jetzt hab ichs raus gefunden! Type[] arguments = prop.GetValue(obj).GetType().GetGenericArguments(); Type keyType = arguments[0]; Type valueType = arguments[1]; Type dictType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType); var dict = Activator.CreateInstance(dictType);
  20. Hi Ich entwickle gerade eine Klasse, um beliebige Objekte in XML und wieder zurück zu konvertieren. Ist alles ziemlich schwierig 😮 Jetzt versuche ich gerade, aus dem XML das Dictionary "stats" wiederherzustellen. <?xml version="1.0" encoding="utf-8"?> <XmlTest> <health>10</health> <speed>3.5</speed> <isDeath>false</isDeath> <stats> <!--Dictionary--> <row> <key>strength</key> <value>5</value> </row> <row> <key>armor</key> <value>0</value> </row> </stats> </XmlTest> Das XElement "stats" übergebe ich also meiner Funktion: public static void GetDictionaryFromXElement(XElement elDictionary, object obj, PropertyInfo prop) { var dict = (IDictionary)Activator.CreateInstance(prop.GetType()); foreach (XElement elRow in elDictionary.Elements()) { object key; if (dict.Keys.GetType() == typeof(int)) { string sValue = elRow.Element("key").Value; int i = 0; int.TryParse(sValue, out i); key = i; } else Debug.LogError("Variable type not handled: " + prop.PropertyType); /// hier ein teil ausgeschnitten um das script kürzer zu halten dict.Add(key, value); } prop.SetValue(obj, dict); } Jetzt habe ich das Problem, dass dict.Keys.GetType() nicht den typ des "Keys" zurück gibt, sondern "System.Collections.Generic.Dictionary`2[System.String,System.String]". Trotz Suche habe nicht nicht herausgefunden, wie ich das Dictionary füllen kann, ohne vorher den Datentyp zu kennen. Ich müsste einfach den Datentyp des "Key" und des "Value" Wertes wissen, damit ich das ganze abarbeiten kann. Wer kann mir da helfen?
  21. Wäre cool, wenn es eine Software gäbe um aus 3d Models, Artworks zu generieren! :)

  22. Hi In meiner Map hab ich ein Fog of War, damit man nur Bereiche sieht, die der Spieler schon besucht hat. Dazu habe ich über die Map einfach eine Maske gelegt und ändere die Pixel an der Position vom Player. Aber nur, wenn der Spieler sich bewegt hat und das ganze befindet sich auch noch in einer Coroutine. Hab mir gedacht, dass dies sicher Preformant genug ist, doch ich habe starke Ruckler. Anscheinend ist SetPixels extrem langsam bei grossen Bilder, selbst wenn man nur ein kleiner Bereich ändert (64x64). Habe die Idee, ein echter eigener Prozess zu machen oder die zu ändernden Pixels in eine Datenbank zu schreiben, die dann einzeln abgearbeitet werden. Ist aber beides irgendwie Quatsch. Hat jemand eine gute Idee?
  23. Freut mich, dass es dir gefällt 🙂
  24. Hi Entwickle ein System zum bauen von Gebäuden und Einrichtung. Wenn ich eine Fackel an eine Wand baue und die Wand danach wieder lösche, soll die Fackel benachrichtigt werden und entweder herunter fallen oder zerstört werden. Das ist leider ziemlich kompliziert. OnCollisionStay kommt nicht in Frage, obwohl ich damit ein ganzes System entwickelt habe (da die Funktion für jede Collision einzeln aufgerufen wird, musste ich dem Objekt erst Rigidbody hinzufügen, eine Liste erstellen, paar Frames warten mit Coroutine, nur um alle relevanten Collider zu erhalten). Zudem funktioniert es nicht mit MeshCollider. Am einfachsten wäre es, wenn die "anderen" Objekte sich selbst testen würden. Also erst noch mit OverlapBox finden, aber dann muss ich für jedes Objekt extra dafür "ausrüsten", welche grösse der OverlapBox etc. Ich könnte beim Bauen auch eine Referenz erstellen. Wird aber beim Laden eines Spielstandes lustig, für alle Objekte die Referenzen zu finden. Gibt es da keine elegantere Lösung?
×
×
  • Create New...