2017-06-25 5 views
0

エディタ内の任意の2つのポイントの間にGUIラインを表示するエディタスクリプトを実装しようとしています。私はVector3点(A、B、C)として3つの空のゲームオブジェクトを持っています。例えば、ボタン#1が押されると、整数 "switchCase"の値は1にセットされ、 A点とB点の間に線が表示されます。ボタン#2を押すと、switchCaseは2に設定され、A点とB点、B点とC点の間に線が表示されます。Unity Editor - スイッチケースを使用して2つのポイント間にGUIラインを表示する

問題は、私がボタンを押すとエディタで何も起こらないということです。私は "switchCase"の値がインスペクタで正しく変化しているのがわかりますが、線は表示されません。

インスペクタで値をそのまま入力すると、正常に機能しますが、ボタンを押したときに値が変更されるのが目的です。手動でインスペクタの値を変更します。

私の質問にはうまくいきたいと思います。どんな助けもありがとう!ここで

は、エディタのスクリプトです:

using UnityEngine; 
using System.Collections; 
using UnityEditor; 
using System.Collections.Generic; 
using UnityEditor.AnimatedValues; 
using System.Linq; 

[CustomEditor(typeof(LineTest))] 
public class LineTestInspector : Editor 
{  
public LineTest myScript; 

public void OnSceneGUI() 
{ 

    Handles.color = Color.red; 

    switch (myScript.switchCase) 
    {  
     case 1: 

      GameObject posAobj = GameObject.Find("PointA"); 
      GameObject posBobj = GameObject.Find("PointB"); 

      myScript.posA = posAobj.transform.position; 
      myScript.posB = posBobj.transform.position; 

      Handles.DrawLine(myScript.posA, myScript.posB); 

      break; 

     case 2: 

      GameObject posCobj = GameObject.Find("PointC"); 

      myScript.posC = posCobj.transform.position; 

      Handles.DrawLine(myScript.posA, myScript.posB); 
      Handles.DrawLine(myScript.posB, myScript.posC); 

      break; 
    } 

public override void OnInspectorGUI() 
{ 
    DrawDefaultInspector(); 

    if (GUILayout.Button("Draw First Line")) 
    { 
     myScript.switchCase= 1; 
     Debug.Log("Switch - 1"); 
    } 

    if (GUILayout.Button("Draw Second Line")) 
    { 
     myScript.switchCase = 2; 
     Debug.Log("Switch - 2"); 
    } 

    if (GUILayout.Button("Reset switchCase")) 
    { 
     myScript.switchCase = 0; 
     Debug.Log("Switch - 0"); 
    } 
} 
} 

とMonoスクリプト:

using System.Collections; 
    using System; 
    using System.Collections.Generic; 
    using UnityEngine; 

    public class LineTest : MonoBehaviour { 

    public Vector3 posA; 
    public Vector3 posB; 
    public Vector3 posC; 

    public int switchCase; 

} 

答えて

1

あなたが値を変更した後に更新するために、エディタのためEditorUtility.SetDirty(myScript);を呼び出す必要があります。

あなたのコードは次のようになります。

public override void OnInspectorGUI() 
    { 
    DrawDefaultInspector(); 

    if (GUILayout.Button("Draw First Line")) 
    { 
     myScript.switchCase = 1; 
     Debug.Log("Switch - 1"); 

     EditorUtility.SetDirty(myScript); 
    } 

    if (GUILayout.Button("Draw Second Line")) 
    { 
     myScript.switchCase = 2; 
     Debug.Log("Switch - 2"); 

     EditorUtility.SetDirty(myScript); 
    } 

    if (GUILayout.Button("Reset switchCase")) 
    { 
     myScript.switchCase = 0; 
     Debug.Log("Switch - 0"); 

     EditorUtility.SetDirty(myScript); 
    } 
    } 
+0

感謝を!これは期待通りに機能しました! –

関連する問題