Jump to content
Unity Insider Forum

Hellhound

Members
  • Content count

    83
  • Joined

  • Last visited

  • Days Won

    2

Hellhound last won the day on March 31 2017

Hellhound had the most liked content!

Community Reputation

7 Neutral

About Hellhound

  • Rank
    Advanced Member

Recent Profile Visitors

834 profile views
  1. Hallo zusammen, ich arbeite mich aktuell etwas in die Thematik der Behaviour Trees ein um eine AI umzusetzen. Dabei stellt sich mir die generelle Frage in welche Richtung ich das Design sinnvoller weise zu legen habe. Ich kann ja einerseits die Logik zum Großteil auf den Tree legen oder aber diesen mehr als übergeordnete Struktur nutzen und die Kernlogik in Eigenimplementationen legen. Ein einfaches Beispiel, was mir grad sozusagen vor die Füsse gefallen ist: Ich möchte, das die AI (und auch die Spielereinheit selbst) eine Einheit angreift, wenn diese in Reichweite gelangt ist und bestimmte Konditionen erfüllt sind. Dafür brauche ich spezifische Animationen (Zielen, Feuern, Laden, Mündungsfeuer) und auch Werte für die Gewichtung. Ich könnte nun die Logik durch spezifische Action-Tasks im Baum Abbilden: z.b. Wenn Ammo > 0. -> Sequenz -> Zielen -> Animation Schuss abspielen -> Animation Mündungsfeuer abspielen -> Ammo dekrement und von vorn bzw. Erweitern. Ich könnte auch einen komplexeren Action-Task, z.b. Schuss schreiben der die Punkte nach Zielen mit abdeckt und über Variablen im Blackboard referenziert. Das macht zumindest den Baum in identischen Abläufen schlanker. Grad bei Elementen mit einer hohen Varianz in der Ablauffolge sehe ich aber das Problem, dass ich mich hier tot modellieren kann, da ich je nach Waffe unterschiedliche Animationen, Sounds, MuzzleFlashes und auch Verhaltensweien haben kann (Bsp. M1 Grand das beim Wert Ammo == 0 immer den berühmten Pling Sound abspielen muss). Oder sollte ich hier den Behavour-Tree nur als Ankerpunkt nehmen, über Events in spezifische Implementationen wechseln, die anschließend über Events wieder Einfluss auf den Baum ausüben? Der Baum kann an sich ja schon recht komplex werden, wenn die AI mehrere Entscheidungen abwegen soll und nicht nur einfache Ablauffolgen wie: Eat, Sleep, Code, Repeat abdecken soll 😉 Hat hier jemand von Euch Erfahrung? Wie würdet Ihr vorgehen? Leider scheint es dazu wenig Input im Netz zu geben und die Beispiele reduzieren sich dann doch schnell auf solche simplen Ablauffolgen ...
  2. Hellhound

    NavMesh Bruch an Schwellen/Türen

    Ok, zumindest das Türschwellen Problem konnte ich dank der Unity-Doku beheben, das hatte ich zuvor übersehen. Durch erhöhen des Voxel-Space auf 10 wurden die engen Türen erkannt und können jetzt passiert werden. Sollte ich für Häuser generell ein eigenes NavMeshSurface nutzen? Aber soweit ich das verstehe, gibt es dann wieder autom. Links zwischen den NavMeshSurfaces, und damit auch ein WARP korrekt? Die Frage mit den Obstacles besteht nach wie vor ...
  3. Hallo zusammen, ich habe aktuell ein Problem mit den Unity Navmeshes. Aktuell verwende ich bereits die Unity Navmesh Components und nutze das NavmeshSurface zum Baken anstelle des Basis Baking-Mechanismus. Soweit so gut, klappt auch sehr gut. Nun habe ich in meiner Szene diverse Häuser, die begehbar sein müssen um hier später statische Deckungsposition definieren zu können. Wie man auf dem Screenshot gut sehen kann, wird das Gebäude selbst auch gut im Baking eingebunden, mit Ausnahme der Türen. An jeglichen Türen gibt es aktuell einen Bruch des Navmesh (rot markiert). Ich könnte hier, wie auch schon ausprobiert NavMeshLinks einsetzen um dies zu überbrücken. Das gefällt mir jedoch nicht, da es hier zu einem Warp des Avatars kommt, was total bescheuert ausschaut. Gibt es eine Möglichkeit das zu überbrücken? Ich habe auch schon versucht an den Sellen Panels/Cubes zu verwenden die kaum merklich über die Schwelle gehen um diese als Layer zu verwenden. Klappt aber nicht, das wird von Unity komplett ignoriert, wie man es an der Tür im Süden gut erkennen kann (das weiße Quad ist hier Walkable und kein Obstacle). Seht Ihr noch eine Möglichkeit? Desweiteren habe ich das Problem, das ich das Haus nicht gleichzeitig als Obstacle und Begehbares Objekt verwenden kann. D.h. im Normalfall wird das Haus zwar als Begehbare Fläche erkannt, dann kann aber der Avatar durch Wände laufen. Ich habe mir jetzt damit geholfen rund um das Gebäude kleine Quads zu sezten (Planes gingen aus irgen einem Grund nicht), die an den Stellen als Obstacle dienen (Im Screenshot deutlich als weiße Flächen zu erkennen). Ist aber sehr nervig, fisst enorm viel Zeit und zwingt mich manuell jedes Gebäude an zu fassen, zu modifizieren und ein Prefab zu erstellen. Hattet Ihr damit auch schon mal Probleme? Gibt es eine bessere Lösung? Viele Grüße Hellhound
  4. Hellhound

    HitPoint wandert?

    Danke für den Hinweis, genau das war es 👌. Da hätte ich noch ewig weiter gesucht ...
  5. Hellhound

    HitPoint wandert?

    Hallo, nach längerer Auszeit wollte ich nun ein bischen in Unity weiter coden. Ich versuche aktuell den NavMesh dazu zu bekommen, bei einem Klick auf ein Objekt eine Position vor dem Objekt einzunehmen. Folgende Schritte führe ich z.Z. aus: 1. Ermitteln der 3D Position für den Click auf Basis eines Raycast. 2. Prüfen ob ein Objekt sich an dieser Position befindet (Auswerten Gameobject vom Hit) 3. Ist dies der Fall einen erneuten Raycast zwischen der aktuellen Position machen und dem Objekt um den exakten HitPoint am Collider zu ermitteln 4. Diesen als Wegpunkt nutzen Allerdings habe ich das Problem, das beim zweiten Raycast der Hitpoint entlang des Direction-Vektors wandert. Hab ich in letzter Zeit zuviel JAVA getankt 🙄? Oder habe ich aktuell einen generellen Denkfehler? Hier eimal der OnClick Code. Pointer ist hierbei die Referenz auf eine Sphere die ich zum Debugging an der Zielposition plaziere // Determine click based on screen coordinates and convert it to world coordinates Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, Mathf.Infinity)) { var go = hit.transform.gameObject; var position = hit.point; position.y = 0f; if (go != null && go.tag != "Ground" && go.tag != "Pointer") { var dir = position - selected.transform.position; var length = dir.magnitude; Debug.DrawRay(this.selected.transform.position, dir, Color.magenta); // Warum erhalte ich hier immer einen anderen HitPoint mit neuer Position? RaycastHit hitInfo; if (Physics.Raycast(selected.transform.position, dir, out hitInfo, dir.magnitude)) { position = hitInfo.point; position.y = 0f; pointer.transform.position = position; pointer.GetComponent<Renderer>().material.color = Color.red; } } else { pointer.GetComponent<Renderer>().material.color = Color.green; position.y = 0f; pointer.transform.position = position; var dir = position - this.selected.transform.position; Debug.DrawRay(this.selected.transform.position, dir, Color.blue); target = null; } // Check if left mouse button has been pressed if (Input.GetMouseButtonDown(0)) { // determine if double click has been performed and raise click events var doubleClick = this.WasDoubleClick(); OnLeftClick.Invoke(position, doubleClick); } } pointer.SetActive(true); Hier mal ein Video: https://sendvid.com/h5ce5m3d
  6. Hellhound

    UI Texte unscharf

    Danke für Eure Hilfe. Der Canvas-Scaler war wie Zer0Cool es vermutet hat der Übeltäter, nach dieser Anpassung sieht es nun wie gewünscht aus.
  7. Hellhound

    UI Texte unscharf

    Habe diverse Schriftarten durch, leider stehts das gleiche Problem. Sobald ich unter eine Schriftgrösse von 20 komme wird es zunehmend unschärfer ...
  8. Ich habe z.Z. das Problem, dass ich auf meiner UI diverse Informations-Texte, die in der Gesamtdarstellung nicht zu groß sein dürfen, nicht scharf gerendert bekomme. Ich habe diverse Threads gelesen, in denen empfohlen wird, die Textfeldgröße und Schrift sehr groß zu machen und dann herunter zu skalieren. Das scheint aber nicht zu funktionieren, sobald ich die entsprechend vergrößerte Font wieder herunterskaliert habe, ist diese auch unscharf wie man an dem rosa Text im Screenshot schön erkennen kann. Zudem hätte ich in dem Fall Probleme mit den Layoutmanagern. Größere Texte sind wie man es auf dem Screenshot sieht kein Problem, nur kleinere bekomme ich nicht ensprechend scharf. Habt Ihr noch eine Idee wie ich die Texte scharf bekomme?
  9. Hellhound

    Unity 5 MouseOver & Farbpalette

    OnMouseOver müsste gehen. Kann es sein, dass Dein GameObject evtl. durch ein nicht sichtbares UI Element überlagert wird, das den Raycast schluckt?
  10. Hellhound

    Controll Settings in der neuen UI (C#)

    Spontan würde ich ein ScriptableObject für die Settings implementieren in der Du die Belegungsdaten hälst. Dies kannst Du auch zur Laufzeit ändern und das wird auch gleich über Unity Mechanismen persistiert. Für die Anpassung kannst Du dann ein Editor Script schreiben und ein UI Menü das die Werte ebenfalls anzeigt und anpassen lässt. Diese Werte werden dann von deinen Controllern ausgelesen und verarbeitet. Du müsstest allerdings etwas konkreter werden, was Du genau suchst und brauchst, damit wir hier mehr Details liefern können ...
  11. Hellhound

    Unity Projekt Git-Ready machen

    Mal ne Frage am Rande, habt Ihr mal darüber nachgedacht ob Unity Collaborate nicht evtl. eine Alternative für GIT sein könnte? Ich selbst habe immer wieder Probleme mit GIT gehabt, da Dateien wie Zer0Cool es schon gesagt hat recht schnell gross werden können. Bisher bin ich mit Collaborate recht zufrieden. Bin allerdings z.Z. auch Einzelkämpfer ...
  12. Hellhound

    Objekte mit einem Meneü versehen

    Beim Grass kann ich aktuell nicht helfen. Dafür solltest Du einen anderen Thread aufmachen. Was die 2D Menüs angeht ist das relativ einfach. Zum einen brauchst Du ein Canvas als Basis in der Scene und da kannst Du beliebig UIElemente plazieren. Damit solltest Du zunächst ein bissl rumspielen um ein Gefühl für die UI zu bekommen. Schau mal bei Youtube nach Unity UI tutorials, wie z.B. das hier. Es brauch ein bischen Übung bis man mit den UI Elementen klar kommt. Aber Du kannst es ziemlich weit ausbauen, hier mal ein Screenshot meiner aktuellen im Bau befindlichen UI. Ich würde für die Steuerung auf Events setzen. D.h. das Menü GameObjekt ist deaktiviert. Am Menü gibt es ein Skript mit Methoden z.B. für Show um es zu aktivieren. Diese Methode wird dann später durch ein Click Event am Objekt getriggert und zrigt dann das Menü an. Am Objekt brauchst Du dann ein Skript das in der Update Methode auf Mouse-Clicks reagiert und dann die Events triggert. Über die Unity UI kannst Du dann schön alles miteinander verknüpfen und bestimmen wer worauf reagieren soll. Klingt jetzt alles sicher sehr theoretisch und ist viel Input. Da Du grade erst einsteigst würde ich langsam anfangen, anschliessend kann man hier mehr Details liefern ...
  13. Hellhound

    Objekte mit einem Meneü versehen

    Das kannst Du alles direkt mit Unity Core Elementen machen und brauchst eigentlich kein Asset kaufen, auch wenn es dafür diverse Lösungen gibt. Lediglich etwas Skripting ist erforderlich. Die Frage die Du Dir stellen musst, ist eher wie soll das Menü sein? 2D, Reactive, 3D am Objekt oder gar ein Mix? Dafür brauchen wir mehr Infos von Dir, dann können wir auch konkreter werden, was Du Dir, wo anschauen solltest ...
  14. Wie es ausschaut gibt es in Unity keine Möglichkeit beide Canvas-Typen gleichzeitig zu nutzen. D.h. sie können zwar gleichzeitig genutzt werden, dürfen sich aber nicht überlappen. Der Overlay-Canvas scheint immer die höhere Priorität zu haben. Und wenn, wie in meinem Fall, ein UIElement über dem 3D-Objekt liegt, wird in den dahinter liegenden Objekten kein Hit mehr ermittelt. Die Sort-Order der Canvas-Objekte hat scheinbar hier keine Wirkung. D.h. ich muss in meinem Fall sicherstellen, dass der Hit über dem 3DObjekt nicht blockiert. Das kann ich auf 2 Arten erreichen: Deaktivieren des Raycasters am Overlay Canvas (Bringt mir nichts, da ich ja noch die UIElemente im Overlay nutzen will) Hinzufügen einer Canvas-Gruppe auf dem überdeckenden UI-Element und hier explizit das Blocking der Raycasts deaktivieren Durch den 2ten Schritt erreiche ich, dass die unter dem Overlay liegenden UIElemente am WorldCanvas auf die Events reagieren, nun muss ich halt zusätzlich, klassisch am 3D-Objekt ein Eventhandler einbauen um hier auf Click-Ereignisse reagieren zu können, damit ich mein Objekt rotieren kann ...
  15. Ich habe aktuell das Problem, dass meine WorldSpace Canvas UI-Objekte nicht auf Events reagieren, solange ich im parallel verwendeten ScreenSpaceOverlay-Canvas den Raycaster nicht deaktiviere. Ich muss jedoch beide Canvas parallel betreiben können, da ich über die WorldSpace-Canvas Objekte Menüs, die im ScreenSpace-Overlay angezeigt werden sollen, triggern muss. Folgendes habe ich laut Google schon probiert, alles ohne Effekt: Unterschiedliche Sorting Order in den Canvas Objekten (WorldSpace 0, Overlay 1) Unterschiedliche Layer und Tags WorldSpace-Event-Camera (Eigentlich eigene) auf MainSpace gesetzt und vice versa. Canvas Groups für beide Canvas hinzugefügt Blocking Masks in beiden Raycastern auf Nothing gesetzt Ich habe mal Screenshots meiner aktuellen Konfiguration der Canvas-Objekte und der Objekthierarchie hinzugefügt (Der Raycaster im WorldSpace ist inzwischen wieder aktiviert, das war nur ein Test). Habt Ihr evtl. noch Ideen, wie ich beide zusammen zum Laufen bekomme?
×