2017-02-24 173 views
0

我可以使用Debug.DrawLine在对象之间绘制线条。 但现在我想要在每个航点上/上画/写一个数字。 因此,在场景视图中,我将在每个航点上看到1,2,3,4 ...。如何使用Handles.Label在场景视图中绘制文本

我尝试添加DrawGizmo但不知道如何在更新功能,使用它,我得到一些警告与小发明:所以 :

第一个警告是消除各UnityEditor使它简化我用UnityEditor删除了所有的地方。然后我得到警告:

严重性代码说明项目文件的线路抑制状态 警告CS0618 'GizmoType.SelectedOrChild' 已过时: '使用 InSelectionHierarchy代替(UnityUpgradable) - > InSelectionHierarchy'

所以不知道如何使用这个Gizmo。

void Update() 
    { 
     if (MyCommands.walkbetweenwaypoints == true) 
     { 
      WayPointsAI(); 
     } 
     // create lines between each checkpoint // 
     for (int i = 0; i < waypoints.Length - 1; i++) 
     { 
      Debug.DrawLine(waypoints[i].transform.position, waypoints[i + 1].transform.position, Color.blue); 

     } 

     // create line between original transform start position 
     // and the current transform position // 
     Debug.DrawLine(originalPosition, transform.position, Color.red); 

     // create a line between current transform position and the next waypoint target 
     // each time reached a waypoint. 
     Debug.DrawLine(target.transform.position, myTransform.position, Color.green); 
    } 

    [UnityEditor.DrawGizmo(GizmoType.SelectedOrChild | UnityEditor.GizmoType.NotSelected)] 
    static void DrawGameObjectName(Transform transform, UnityEditor.GizmoType gizmoType) 
    { 
     Handles.Label(transform.position, transform.gameObject.name); 
    } 

回答

0

使用Handles.Label是棘手的。

假设您的脚本名称为WayPointScript。下面是它应该是什么样子:

[ExecuteInEditMode] 
public class WayPointScript : MonoBehaviour 
{ 
    public GameObject[] waypoints; 

    void Update() 
    { 
     if (MyCommands.walkbetweenwaypoints == true) 
     { 
      WayPointsAI(); 
     } 
     // create lines between each checkpoint // 
     for (int i = 0; i < waypoints.Length - 1; i++) 
     { 
      Debug.DrawLine(waypoints[i].transform.position, waypoints[i + 1].transform.position, Color.blue); 

     } 

     // create line between original transform start position 
     // and the current transform position // 
     Debug.DrawLine(originalPosition, transform.position, Color.red); 

     // create a line between current transform position and the next waypoint target 
     // each time reached a waypoint. 
     Debug.DrawLine(target.transform.position, myTransform.position, Color.green); 
    } 
} 

注意到了它上面的[ExecuteInEditMode]必须在那里。

现在,您可以使用下面的代码来绘制TextHandles.Label

[CustomEditor(typeof(WayPointScript))] 
public class TextDrawer : Editor 
{ 

    void OnSceneGUI() 
    { 

     Debug.Log("Running"); 
     WayPointScript t = target as WayPointScript; 

     //Create Text on each checkpoint // 
     for (int i = 0; i < t.waypoints.Length; i++) 
     { 
      UnityEditor.Handles.Label(t.waypoints[i].transform.position, (i + 1).ToString()); 
     } 
    } 
} 

你想要文本在上面?将偏移量添加到t.waypoints[i].transform.position变量的y轴。