首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Editor -使用switch case显示两点之间的GUI线

Unity Editor -使用switch case显示两点之间的GUI线
EN

Stack Overflow用户
提问于 2017-06-26 04:02:36
回答 1查看 810关注 0票数 0

我正在尝试实现一个编辑器脚本,它将显示编辑器中任意两个点之间的GUI行。我有三个空的游戏对象作为Vector3点(A,B和C),例如,如果按下按钮# 1,整数"switchCase“的值将被设置为1,根据switch case语句,它将在A点和B点之间显示一条直线。如果按下按钮# 2,"switchCase”将被设置为2,它将显示点A和B之间,B点和C之间的直线,依此类推。

我遇到的问题是,当我按下按钮时,编辑器中没有任何反应。我可以看到"switchCase“的值在检查器中正确地更改了,但是没有显示线条。

如果我直接在检查器中输入值,它会正常工作,但我的目标是在按下按钮时更改值,而不是手动更改检查器中的值。

希望我的问题是有意义的。任何帮助都将不胜感激!

以下是编辑器脚本:

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
  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;

 }
EN

Stack Overflow用户

回答已采纳

发布于 2017-06-26 18:50:17

您必须调用EditorUtility.SetDirty(myScript);,以便编辑器在更改值后进行更新。

您的代码应如下所示:

代码语言:javascript
复制
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);
    }
  }
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44750099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档