Jump to content
Unity Insider Forum

thewhiteshadow

Members
  • Content Count

    86
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by thewhiteshadow

  1. Erscheint mir wie ein Fall für Physics.BoxCast o.ä. Du testest damit den Weg von der alten zur neuen Position und verschiebst es dann um RaycastHit.distance zu Maus hin. Es findet somit keine Kollision statt.
  2. Du hast nur die Möglichkeit mehrere Assets in Packages zu bündeln. Das gleiche, was du auch über den Asset Store runterladest. Die kannst du aber genau so gut auf deine Platte packen und bei Bedarf in deine Projekte importieren. Einen übergreifenden Ressourcne-Path gibt es nicht. Möglicherweise gibt es im Store auch eine Art Sync-Tool, kann ich aber nicht sagen. mfg TWS
  3. Hallo, ich benötige mal ne weitere Meinung zur Implementierung einer Auswahlmöglichkeit für einen Text Dialog System. Es geht hierbei um eine bedingte Anzeige von Texten nach einer Spieler-Auswahl in einem Dialog und die Darstellung im Inspektor. Das hier ist die Message Klasse für die Einträge. public class Message { public enum Type { NONE, TEXT, QUESTION, EVENT } public Type type; public int option = -1; public int speaker; public int emotion = 0; public string message = ""; public AudioClip voice; public string messageHookID; } Und Hier mal ein Ausschnitt aus dem Editor mit 2 Einträgen. Also es wird eine Frage gestellt. Der Spieler gibt eine Antwort (Option 1, 2 oder 3) und Abhängig davon wird der nachfolgende Eintrag angezeigt oder nicht. Aktuell war die Idee unter dem Typ eine Options-Auswahl anzuzeigen bei der man auswählen kann, bei welcher Antwort der der Eintrag angezeigt wird. Zusätzlich die Option "Alle". Jetzt hat diese Umsetzung den Nachteil, dass man keine verschachtelten Fragen erstellen kann. Oder man setzt unter die Optionsauswahl weitere. Für jede Frage eine. Das wäre aber sehr unpraktisch, da man schon bei wenigen Verschachtelungen komplett die Übersicht verliert. Schöner wäre es, wenn das Fork-Handling bereits in dem Fragen-Element gemacht wird. Aber da fällt mir nur sowas wie Index-Sprungmarken ein, was auch nicht sehr ansehnlich ist. Zumal der Index momentan nicht angezeigt wird. Jemand ne Idee, wie man das einfach und intuitiv umsetzen kann?
  4. Ich hab den Fehler durch ein wenig refactoring behoben, auch wenn ich immer noch nicht genau nachvollziehen kann, warum der Fehler auftritt.
  5. ich dachte eigentlich, das ich das tue 😕 // Avatar ist das Custom-Skript, in der der Code aus meinem vorherigen Post steht. if (avatar != null) { avatar.Speaking = false; avatar.Active = false; }
  6. Ok, das Image ist es nicht, es ist das gameObject. MissingReferenceException: The object of type 'SpriteAvatar' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. TWS.Dialogs.SpriteAvatar.get_image () (at Assets/Scripts/Dialog/SpriteAvatar.cs: 60 ) 55: get { 60: if (gameObject != null && 65: _image == null) 66: _image = GetComponent<Image>(); // Ich hab die leeren Zeilennummern ausgelassen Ich weiß, dass der == und != Operator bei GameObject überladen ist (was das schlechteste API-Desing ist was ich je gesehen hab), aber dass er eine Exception auslösen kann, halte ich für außerst eigenartig.
  7. Danke für die Antwort. Im Editor gibt es keine "Frames" (nur Event getriggerte Updates) und dort funktioniert Destroy alleine nicht. Im Spiel führt DestroyImmediate zu keinen Problemen, auch wenn ich mir schon überlegt habe, ggf. einen Fork einzubauen.
  8. Hallo, ich bin dabei für ein SkriptableObject eine Visualisierung im Editor zu erstellen. Diese erstellt ein Object aus einem Prefab und zeigt es solange an, wie das Asset im ProjektOrdner ausgewählt ist (über einen Custom Inspector). Ändert man etwas im Inspector, soll sich die Visualisierung ändern. Genauer bei dessen UI Image Komponente wird das sprite ausgetasuscht. Wählt man das Asset ab, wird das Visualisierungs-Objekt wieder gelöscht. Bei der ersten Auswahl funktioniert es super. Auch im Spiel klappt es wunderbar. Wenn ich das Asset jedoch im Editor ein zweites mal auswähle (oder ein anderes vom gleichen Typ), spinnt er rum. Es wird eine MissingReferenceException geworfen, wenn ich das image auf null prüfe. private Image image{ get{ if (gameObject != null && _image == null) //<-- Error! _image = GetComponent<Image>(); return _image; } } Ich muss das Objekt für die Visualisierung dynamisch erzeugen, weil es nicht regulärer Bestandteil der Szene ist und im Spiel auch erst zur Laufzeit erzeugt wird. Ich denke, er bekommt das mit dem DestroyImmediate und anschließenden Instantiate nicht auf die Reihe, aber warum wirft er den Fehler bei der null Abfrage?
  9. Hallo, ich möchte in meinem Spiel die Möglichkeit implementieren, dass der Spieler sich an kleinen Wänden hochziehen kann. Ich hab aber noch Probleme damit die nächstgelegene Position der Wand zu ermitteln wo dessen Normal zum Spieler zeigt. Über den Raytrace erhalte ich nur die Position zu der forward-Richtung vom Spieler. Ich benötige aber Erstere für die Animation, damit die Hände später genau an der Kante greifen. Mein Ansatz bisher: Vector3 origin = transform.position + (Vector3.up * 1f); if (Physics.Raycast(origin, transform.rotation * Vector3.forward, out hitInfo, climbCheckDistance)) { (...) // Startpunkt über der Wand für den Down-Trace ermitteln. (50cm hinter der Kante in 2,10 Meter höhe) // Die Höhe ist die Kletterhöhe + 10cm Puffer. origin = transform.position - hitInfo.normal * 1.5f * (Vector3.Dot(origin - hitInfo.point, hitInfo.normal)) + (Vector3.up * 2.1f); (...) if (Physics.Raycast(origin, Vector3.down, out hitInfo, 1f)) { (...) Hiermit bekomme ich zwar schon sehr gut die Position raus. Leider liegt der Punkt tiefer in der Wand, je weiter der Spieler von der Wand weg steht. climbCheckDistance ist zwar klein, aber nicht klein genug, dass man es vernachlässigen könnte. Jemand ne Idee wie das besser geht?
  10. Das was du womöglich suchst sind ScriptableObject's
  11. So was ähnliches hatte ich auch mal. Das liegt glaub ich an einem Rigidbody an deinem Enemy. Das "sammelt die Collider ein". Da der Raycast über die Physik-Engine läuft, trifft er das Rigidbody mit seinen Collidern. Trigger-Events funktionieren ohne Physik und treffen daher nur den Collider. Lustig ist auch, dass OnCollisionEnter wiederum das Rigidbody treffen würde. Meine Lösung war die Events einfach weiter zu geben.
  12. Wüsste nicht, dass das geht. Deaktiviere doch einfach das Terrain bzw. ersetze es zum testen durch eine kleine Plane. Oder du packst das Haus in eine andere Szenen und ladest diese additiv. dann kannst du die Lightmap mitnehmen.
  13. mein Mobile-Game kommt aktuell auf etwa 50000 tris im Screen und läuft bei mir (Honor c5) noch mit 60fps. Aber Shader und Shadow-Caster machen deutlich mehr aus, als die Polygone allein.
  14. Geh auf deinem Baum. Dann auf Edit Tree... auf den kleinen Kreis in der rechten Ecke klicken. Fenster geht auf mit einer Prefab-Liste, davon ist dein Baum ausgewählt. Unten steht der Pfad zum Prefab. Öffne das Prefab im Projekt-Explorer und guck es dir mal an. Evtl. hat es einen Skin-Mesh-Renderer oder sowas. womit die Terrain-Engine nicht umgehen kann. Da ein Bild angezeigt wird, sollte das Objekt ja irgend einen Renderer haben. Und warum hat dein Terrain ein Meshrenderer? Das ist blödsin.
  15. Alle Oberflächen werden nur von einer Seite gerendert und du bist durch die Wand gelaufen. Folglich siehts du nur Rückwände, die nicht gerendert werden. Löscung1: Kollisionsboxen verwenden.
  16. Du benötigst eine Höhenmap. Üblicherweise ist das ein einfaches Bild in Graustufen. Darf nur nicht jpg sein! Du bekommst Höhenmaps teilweise gratis im Internet. z.B. NASA hat die ganze Erde in 16k wenn du willst. Edit: Programme die RAW-Dateien erstellen können: Photoshop, Gimp, ...
  17. rigid.velocity = movement * Camera.main.transform.rotation; Das ist schon halbwegs richtig, aber du darfst nur die Y-Achse der Rotation verwenden. Also erst nach Euler, Komponente trennen und das Resultat multiplizieren.
  18. ich habe das Terrain in Blender modeliert und die Straße aus einer Kurve erstellt und händisch auf das Terrain angeglichen. Danach eine Highmap daraus erstellt und in Unity geladen. Manuell Asphaltiert und fertig. Eine andere Idee, die bei mir nicht zufriedenstellend funktioniert hat, war eine hoch transparente linie in photoshop, die die Heightmap etwas aufhellt. Aber vielleicht lappt das ja bei dir. Edit: Andere Idee wenn due eine Model der Straße hast: Du könntest ein Skript schreiben, dass für jeden Vertex der Straße die Höhe des Terrains bestimmt und den Vertex um genau diese Höhe (minus Offset gegen kleine Lücken) setzt. Das kannst du im editor machen, zum spielbeginn oder sogar in einem Shader machen. Ich habe ähnliches mal gemacht um einen Zaun zu erstellen. Siehe Hier
  19. Das ist falsch. Das trifft zwar so auf Quads zu, aber eine Plane besteht aus mehreren Quads und zeigt die Textur ca 4-6 mal (weiß ich nicht mehr genau) an
  20. Eine Szene wird mit allen Objekten darin gespeichert. Aber beim build müssen alle Szenen angegeben werden die da rein sollen. Ich habs noch nie ausprobiert, aber könnte mir vorstellen, wenn du nichts angegeben hast, dass er eine leere Szene ladet.
  21. Du kannst nur eine Kamera gleichzeitig aktiv haben. Also beim Umschalten immer die anderen deaktivieren.
  22. Bei Spielen, die auf physikalisch korrektes Waffenverhalten setzen, kommt die Kugel eben aus der Waffe, während der Schütze daneben steht. Schießen aus der Hüfte ist nun mal ungenau. Dafür gibt es ja dann das Anvisieren, wo die Zielvorrichtung der Waffe benutzt wird. Willst du einfach unrealistischen Ballerspass, kannst du es mit dem Kamera-Raycast machen.
  23. Wenn ihr den Algorithmus ordentlich programmiert hättet, könntet ihr den Core einfach 1:1 kopieren. Das Grundproblem ist schon, dass der Algorithmus nix mit monobehavior zu tun hat, also bitte pack ihn in eine eigene Klasse. Spiel-Objekte sollten ihn nach einem Weg "fragen" und nicht implementieren. Die "Knoten" sollten auch nur die Informationen haben, die der Algorithmus braucht und evtl als interface implementiert werden. Außerdem sollten die Wegpunkte nicht von jedem Monster erstellt werden sondern als Struktur zentral (Singelton?) vorliegen. Bestenfalls vorgebacken.
  24. 1. Pack die Spieler in einem Array zusammen. 2. Iteriere über dieses Array. Das sollte ca 90% der Zeilen einsparen.
×
×
  • Create New...