[英]How can I draw the lines also in runtime and not only in scene as gizmos?
[英]Gizmos only update when I hover over the scene or game view
我有一個腳本:
//Assets/TestScript.cs
using UnityEngine;
public class TestScript : MonoBehaviour
{
public Vector2 a;
public Vector2 b;
public Vector2 c;
}
它是編輯器腳本:
//Assets/Editor/TestEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TestScript))]
public class TestEditor : Editor
{
public override void OnInspectorGUI()
{
TestScript script = (TestScript)target;
script.a = EditorGUILayout.Vector2Field("a", script.a);
script.b = EditorGUILayout.Vector2Field("b", script.b);
script.c = EditorGUILayout.Vector2Field("c", script.c);
}
[DrawGizmo(GizmoType.Active | GizmoType.Selected)]
static void DrawGizmos(TestScript script, GizmoType gizmoType)
{
Gizmos.DrawWireSphere(script.a, 1.0f);
Gizmos.DrawWireSphere(script.b, 1.0f);
Gizmos.DrawWireSphere(script.c, 1.0f);
}
}
它可以正確顯示線球小控件,但是當我編輯變量a
, b
或c
,除非將鼠標移到場景視圖或游戲視圖上,否則小控件不會重繪。 即使如此,它仍然需要大約一秒鍾的時間。
當我刪除重寫的OnInspectorGui()
方法時,小控件將正確更新。
我嘗試將SceneView.RepaintAll()
, HandleUtility.Repaint
和Repaint()
到OnInspectorGui()
方法的開頭和結尾,但沒有任何更改。
謝謝。
有人在reddit上給了我答案。
SceneView.RepaintAll()
方法將僅更新場景視圖,而UnityEditorInternal.InternalEditorUtility.RepaintAllViews()
將更新所有視圖。
更新的OnInspectorGUI()
重寫方法現在看起來像這樣:
public override void OnInspectorGUI()
{
TestScript script = (TestScript)target;
script.a = EditorGUILayout.Vector2Field("a", script.a);
script.b = EditorGUILayout.Vector2Field("b", script.b);
script.c = EditorGUILayout.Vector2Field("c", script.c);
if(Gui.changed)
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
首先,您應該創建一個EditorWindow
在這里看到它: http : //docs.unity3d.com/ScriptReference/EditorWindow-autoRepaintOnSceneChange.html
所有EditorWindows都具有以下屬性: autoRepaintOnSceneChange
您可以將其設置為true,並在某些更改后重新繪制窗口。 您也可以在editorWindow的Update()中手動調用Repaint()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.