[Unity Editor] Editor Window에서 Show Button 만드는 법은 없어요.
11189 단어 Unity 확장UnityEditorUnity
컨디션
Windows 10
Unity 5.6.1f1
일의 발단
한 번은 아래의 Editor Window 반을 할 때 오류가 발생했습니다.
TestEditorWindow.csusing UnityEngine;
using UnityEditor;
public class TestEditorWindow : EditorWindow
{
[MenuItem("Tools/TestEditorWindow")]
static public void Open()
{
GetWindow<TestEditorWindow>();
}
void ShowButton()
{
}
}
이게 뭐야...
잘못
MSDN( https://msdn.microsoft.com/ja-jp/library/4k9x6bc0(v=vs.110).aspx ) 근거
parameters 그룹에 정확한 인자가 없습니다.
이 뜻의 잘못.(TargetParameterCountException)
잘못된 곳
스택 추적 중
UnityEditor.HostView.ShowGenericMenu () (at C:/buildslave/unity/build/Editor/Mono/HostView.cs:350)
그래서, HostView.cs에서 오류가 발생한 것 같습니다.
오류가 발생한 곳의 코드를 보다
HostView.왜냐하면 cs가 DLL에 숨겨져 있거든요.
다음 저장소에서 Unity 내부의 소스 코드를 읽습니다.
HostView.cs 내용
Unity5.6.0f3 컴파일된 HostView.cs를 읽었는데 쇼버튼 방법을 반사로 부르는 곳이 있었다.
HostView.cs 350~370 줄의 원본 코드protected void ShowGenericMenu()
{
GUIStyle gUIStyle = "PaneOptions";
Rect rect = new Rect(base.position.width - gUIStyle.fixedWidth - 4f, Mathf.Floor((float)(this.background.margin.top + 20) - gUIStyle.fixedHeight), gUIStyle.fixedWidth, gUIStyle.fixedHeight);
if (EditorGUI.DropdownButton(rect, GUIContent.none, FocusType.Passive, "PaneOptions"))
{
this.PopupGenericMenu(this.m_ActualView, rect);
}
MethodInfo paneMethod = this.GetPaneMethod("ShowButton", this.m_ActualView);
if (paneMethod != null)
{
object[] parameters = new object[]
{
new Rect(base.position.width - gUIStyle.fixedWidth - 20f, Mathf.Floor((float)(this.background.margin.top + 4)), 16f, 16f)
};
paneMethod.Invoke(this.m_ActualView, parameters);
}
}
HostView.cs의 170~190 줄 소스 코드private MethodInfo GetPaneMethod(string methodName)
{
return this.GetPaneMethod(methodName, this.m_ActualView);
}
private MethodInfo GetPaneMethod(string methodName, object obj)
{
MethodInfo result;
if (obj == null)
{
result = null;
}
else
{
for (Type type = obj.GetType(); type != null; type = type.BaseType)
{
MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
Rect형 변수를 매개변수로 지정하여 반사를 통해 ShowButon 메서드를 호출합니다.
방금 오류는 Editor Window에서 매개 변수가 없는 ShowButon 방법을 정의했기 때문에 발생한 것 같습니다.
ShowButton(Rectr)을 정의해 보십시오.
다음 Editor Window 클래스를 생성하고 창을 엽니다.
TestEditorWindow.csusing UnityEngine;
using UnityEditor;
public class TestEditorWindow : EditorWindow
{
[MenuItem("Tools/TestEditorWindow")]
static public void Open()
{
GetWindow<TestEditorWindow>();
}
void ShowButton(Rect r)
{
Debug.Log("called ShowButton");
}
}
ShowButon 방법이 호출되었음을 확인했습니다.(완료
총결산
Editor Window반에서 Show Button 방법을 만들면 Unity 쪽에서 마음대로 부르기 때문에 Show Button 방법을 만들 수 없습니다.
Reference
이 문제에 관하여([Unity Editor] Editor Window에서 Show Button 만드는 법은 없어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/bf8f975d80324f4a4685
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
한 번은 아래의 Editor Window 반을 할 때 오류가 발생했습니다.
TestEditorWindow.cs
using UnityEngine;
using UnityEditor;
public class TestEditorWindow : EditorWindow
{
[MenuItem("Tools/TestEditorWindow")]
static public void Open()
{
GetWindow<TestEditorWindow>();
}
void ShowButton()
{
}
}
이게 뭐야...
잘못
MSDN( https://msdn.microsoft.com/ja-jp/library/4k9x6bc0(v=vs.110).aspx ) 근거
parameters 그룹에 정확한 인자가 없습니다.
이 뜻의 잘못.(TargetParameterCountException)
잘못된 곳
스택 추적 중
UnityEditor.HostView.ShowGenericMenu () (at C:/buildslave/unity/build/Editor/Mono/HostView.cs:350)
그래서, HostView.cs에서 오류가 발생한 것 같습니다.
오류가 발생한 곳의 코드를 보다
HostView.왜냐하면 cs가 DLL에 숨겨져 있거든요.
다음 저장소에서 Unity 내부의 소스 코드를 읽습니다.
HostView.cs 내용
Unity5.6.0f3 컴파일된 HostView.cs를 읽었는데 쇼버튼 방법을 반사로 부르는 곳이 있었다.
HostView.cs 350~370 줄의 원본 코드protected void ShowGenericMenu()
{
GUIStyle gUIStyle = "PaneOptions";
Rect rect = new Rect(base.position.width - gUIStyle.fixedWidth - 4f, Mathf.Floor((float)(this.background.margin.top + 20) - gUIStyle.fixedHeight), gUIStyle.fixedWidth, gUIStyle.fixedHeight);
if (EditorGUI.DropdownButton(rect, GUIContent.none, FocusType.Passive, "PaneOptions"))
{
this.PopupGenericMenu(this.m_ActualView, rect);
}
MethodInfo paneMethod = this.GetPaneMethod("ShowButton", this.m_ActualView);
if (paneMethod != null)
{
object[] parameters = new object[]
{
new Rect(base.position.width - gUIStyle.fixedWidth - 20f, Mathf.Floor((float)(this.background.margin.top + 4)), 16f, 16f)
};
paneMethod.Invoke(this.m_ActualView, parameters);
}
}
HostView.cs의 170~190 줄 소스 코드private MethodInfo GetPaneMethod(string methodName)
{
return this.GetPaneMethod(methodName, this.m_ActualView);
}
private MethodInfo GetPaneMethod(string methodName, object obj)
{
MethodInfo result;
if (obj == null)
{
result = null;
}
else
{
for (Type type = obj.GetType(); type != null; type = type.BaseType)
{
MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
Rect형 변수를 매개변수로 지정하여 반사를 통해 ShowButon 메서드를 호출합니다.
방금 오류는 Editor Window에서 매개 변수가 없는 ShowButon 방법을 정의했기 때문에 발생한 것 같습니다.
ShowButton(Rectr)을 정의해 보십시오.
다음 Editor Window 클래스를 생성하고 창을 엽니다.
TestEditorWindow.csusing UnityEngine;
using UnityEditor;
public class TestEditorWindow : EditorWindow
{
[MenuItem("Tools/TestEditorWindow")]
static public void Open()
{
GetWindow<TestEditorWindow>();
}
void ShowButton(Rect r)
{
Debug.Log("called ShowButton");
}
}
ShowButon 방법이 호출되었음을 확인했습니다.(완료
총결산
Editor Window반에서 Show Button 방법을 만들면 Unity 쪽에서 마음대로 부르기 때문에 Show Button 방법을 만들 수 없습니다.
Reference
이 문제에 관하여([Unity Editor] Editor Window에서 Show Button 만드는 법은 없어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/bf8f975d80324f4a4685
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
protected void ShowGenericMenu()
{
GUIStyle gUIStyle = "PaneOptions";
Rect rect = new Rect(base.position.width - gUIStyle.fixedWidth - 4f, Mathf.Floor((float)(this.background.margin.top + 20) - gUIStyle.fixedHeight), gUIStyle.fixedWidth, gUIStyle.fixedHeight);
if (EditorGUI.DropdownButton(rect, GUIContent.none, FocusType.Passive, "PaneOptions"))
{
this.PopupGenericMenu(this.m_ActualView, rect);
}
MethodInfo paneMethod = this.GetPaneMethod("ShowButton", this.m_ActualView);
if (paneMethod != null)
{
object[] parameters = new object[]
{
new Rect(base.position.width - gUIStyle.fixedWidth - 20f, Mathf.Floor((float)(this.background.margin.top + 4)), 16f, 16f)
};
paneMethod.Invoke(this.m_ActualView, parameters);
}
}
private MethodInfo GetPaneMethod(string methodName)
{
return this.GetPaneMethod(methodName, this.m_ActualView);
}
private MethodInfo GetPaneMethod(string methodName, object obj)
{
MethodInfo result;
if (obj == null)
{
result = null;
}
else
{
for (Type type = obj.GetType(); type != null; type = type.BaseType)
{
MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
using UnityEngine;
using UnityEditor;
public class TestEditorWindow : EditorWindow
{
[MenuItem("Tools/TestEditorWindow")]
static public void Open()
{
GetWindow<TestEditorWindow>();
}
void ShowButton(Rect r)
{
Debug.Log("called ShowButton");
}
}
Editor Window반에서 Show Button 방법을 만들면 Unity 쪽에서 마음대로 부르기 때문에 Show Button 방법을 만들 수 없습니다.
Reference
이 문제에 관하여([Unity Editor] Editor Window에서 Show Button 만드는 법은 없어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-ngtm/items/bf8f975d80324f4a4685텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)