Jump to content
Unity Insider Forum

Gizmo.Drawline zeigt keine Linie im Scene-Editor :(


Elharter

Recommended Posts

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...