Elharter Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Hey, ich habe aus einem Tutorial einen code 1:1 kopiert...eingefügt..... der Code soll zwischen Node-Punkten sichtbare Linien zeichnen um einen Path für eine AI anzuzeigen. Im Tutorial-Video funktioniert das offenbar - auch ist der selbe Code im Video zu sehen, bei mir wird aber keine Linie angezeigt. Gizmos sind enabled. Code: using UnityEngine; using System.Collections; using System.Collections.Generic; public class PathScript : MonoBehaviour { public Color lineColor; private List<Transform> nodes = new List<Transform>(); void OnDrawGizmosSelected() { Gizmos.color = lineColor; Transform[] pathTransforms = GetComponentsInChildren<Transform>(); nodes = new List<Transform>(); for (int i = 0; i < pathTransforms.Length; i++) { if (pathTransforms[i] != transform) { nodes.Add(pathTransforms[i]); //Debug.Log(pathTransforms[i].name); } } for (int i = 0; i < nodes.Count; i++) { Vector3 currentNode = nodes[i].position; Vector3 previousNode = Vector3.zero; if (i > 0) { previousNode = nodes[i - 1].position; } else if (i == 0 && nodes.Count > 1) { previousNode = nodes[nodes.Count - 1].position; } Gizmos.DrawLine(previousNode, currentNode); Gizmos.DrawWireSphere(currentNode, 0.3f); } } } Hat jemand eine Idee? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Damon93 Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Kenne mich mit Gizmos nicht wirklich aus, aber wo definierst du die Farbe für deine lineColor? public Color lineColor; Machst du das im Inspector? oder hast das vllt vergessen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 2. Dezember 2016 Autor Melden Share Geschrieben 2. Dezember 2016 Ja, im Inspector...habe natürlich mehrere Farben durchprobiert.... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Damon93 Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 könntest du den Link zu dem tutorial mal posten bitte Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Hast du denn Gizmo auch aktiv im Game Windows/Mode? Und ein Satz aus der Doku der vllt auch ganz wichtig sein könnte: Gizmos are drawn only when the object is selected. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Hab jetzt kein Unity vor mir, aber wird DrawLine den nicht NUR im Scenen-Fenster angezeigt? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Soweit ich weiß nur in der Szeneview und wenn ich mir die Klasse anschaue muss das Game laufen, da es keine Editorklasse ist. Also Game starten und dann in die Szeneview wechseln. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. Dezember 2016 Melden Share Geschrieben 2. Dezember 2016 Hab jetzt kein Unity vor mir, aber wird DrawLine den nicht NUR im Scenen-Fenster angezeigt? Man kann Gizmos im Game View anschalten, und das wurde hier offenbar auch getan. Soweit ich weiß nur in der Szeneview und wenn ich mir die Klasse anschaue muss das Game laufen, da es keine Editorklasse ist. Also Game starten und dann in die Szeneview wechseln. Das stimmt nicht - OnDrawGizmos und OnDrawGizmosSelected werden bei normalen MonoBehaviours vom Editor auch dann aufgerufen, wenn das Spiel nicht läuft. Ähnlich, wie auch für Reset oder OnValidate kein laufendes Spiel nötig ist. Ich habe das Script jedenfalls kopiert und es tut ohne Probleme. Hast du das GameObject mit dem Script markiert (nicht eine der Children oder den Parent)? Ach ja, ich habe eben das Skript gekürzt und dabei noch etwas behoben, was für mich nach einem Bug aussah: using UnityEngine; public class PathScript : MonoBehaviour { public Color lineColor; void OnDrawGizmosSelected() { Gizmos.color = lineColor; var nodes = GetComponentsInChildren<Transform>(); var previousPosition = Vector3.zero; for(int i = 0; i < nodes.Length; i++) { Vector3 currentPosition = nodes[i].position; if(i > 0) { Gizmos.DrawLine(previousPosition, currentPosition); } Gizmos.DrawWireSphere(currentPosition, 0.3f); previousPosition = currentPosition; } } } //e: Ich fand's gerade interessant, daher hier noch eine kleine Idee. Wenn du willst, dass der Pfad auch dann angezeigt wird, wenn einer der Children angeklickt wird: #if UNITY_EDITOR void OnDrawGizmos() { var nodes = GetComponentsInChildren<Transform>(); var active = UnityEditor.Selection.activeGameObject.transform; if(active != transform && !(new HashSet<Transform>(nodes).Contains(active))) return; // ... } #endif Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.