[Unity] 키 입력에서 GameObject에 포함된 모든 스크립트를 엽니다.
11331 단어 UnityEditorUnity
개시하다
게임 대상에 첨부된 스크립트를 열 때 마우스를 사용하십시오
더블 클릭 귀찮죠.
따라서 선택한 대상을 첨부하는 모든 스크립트
나는 키를 입력해서 열 수 있는 편집 확장을 시도해 보았다.
소스 코드
Unity 프로젝트에 다음 스크립트를 넣으면 바로 사용할 수 있습니다.
EditorOpenComponents.cs#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Reflection;
[InitializeOnLoad]
public class EditorOpenComponents
{
static EditorOpenComponents()
{
bool keyDown = false;
EditorApplication.CallbackFunction function = () =>
{
if (!keyDown && Event.current.type == EventType.KeyDown)
{
keyDown = true;
// . が入力されたらHierarchyで選択しているオブジェクトにアタッチされているすべてのスクリプトを開く
if (Event.current.keyCode == KeyCode.Period && Selection.activeGameObject != null)
{
var mss = Resources.FindObjectsOfTypeAll<MonoScript>();
foreach (var ms in mss)
{
var cls = ms.GetClass();
if (cls != null)
{
if (cls.IsSubclassOf(typeof(MonoBehaviour)) && Selection.activeGameObject.GetComponent(cls) != null)
{
// スクリプトを開く
OpenInEditor(cls.ToString(), 0);
}
}
}
}
}
if (keyDown && Event.current.type == EventType.KeyUp)
{
keyDown = false;
}
};
FieldInfo info = typeof(EditorApplication).GetField("globalEventHandler", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
EditorApplication.CallbackFunction functions = (EditorApplication.CallbackFunction)info.GetValue(null);
functions += function;
info.SetValue(null, (object)functions);
}
/// <summary>
/// スクリプトを外部エディタで開く
/// </summary>
public static void OpenInEditor(string scriptName, int scriptLine)
{
string[] paths = AssetDatabase.GetAllAssetPaths();
foreach (string path in paths)
{
string scriptPath = System.IO.Path.GetFileNameWithoutExtension(path);
if (scriptPath.Equals(scriptName))
{
MonoScript script = AssetDatabase.LoadAssetAtPath(path, typeof(MonoScript)) as MonoScript;
if (script != null)
{
if (!AssetDatabase.OpenAsset(script, scriptLine))
{
Debug.LogWarning("Couldn't open script : " + scriptName);
}
break;
}
else
{
Debug.LogWarning("Couldn't open script : " + scriptName);
}
break;
}
}
}
}
#endif // UNITY_EDITOR
사용법
4
Unity 프로젝트에 다음 스크립트를 넣으면 바로 사용할 수 있습니다.
EditorOpenComponents.cs
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Reflection;
[InitializeOnLoad]
public class EditorOpenComponents
{
static EditorOpenComponents()
{
bool keyDown = false;
EditorApplication.CallbackFunction function = () =>
{
if (!keyDown && Event.current.type == EventType.KeyDown)
{
keyDown = true;
// . が入力されたらHierarchyで選択しているオブジェクトにアタッチされているすべてのスクリプトを開く
if (Event.current.keyCode == KeyCode.Period && Selection.activeGameObject != null)
{
var mss = Resources.FindObjectsOfTypeAll<MonoScript>();
foreach (var ms in mss)
{
var cls = ms.GetClass();
if (cls != null)
{
if (cls.IsSubclassOf(typeof(MonoBehaviour)) && Selection.activeGameObject.GetComponent(cls) != null)
{
// スクリプトを開く
OpenInEditor(cls.ToString(), 0);
}
}
}
}
}
if (keyDown && Event.current.type == EventType.KeyUp)
{
keyDown = false;
}
};
FieldInfo info = typeof(EditorApplication).GetField("globalEventHandler", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
EditorApplication.CallbackFunction functions = (EditorApplication.CallbackFunction)info.GetValue(null);
functions += function;
info.SetValue(null, (object)functions);
}
/// <summary>
/// スクリプトを外部エディタで開く
/// </summary>
public static void OpenInEditor(string scriptName, int scriptLine)
{
string[] paths = AssetDatabase.GetAllAssetPaths();
foreach (string path in paths)
{
string scriptPath = System.IO.Path.GetFileNameWithoutExtension(path);
if (scriptPath.Equals(scriptName))
{
MonoScript script = AssetDatabase.LoadAssetAtPath(path, typeof(MonoScript)) as MonoScript;
if (script != null)
{
if (!AssetDatabase.OpenAsset(script, scriptLine))
{
Debug.LogWarning("Couldn't open script : " + scriptName);
}
break;
}
else
{
Debug.LogWarning("Couldn't open script : " + scriptName);
}
break;
}
}
}
}
#endif // UNITY_EDITOR
사용법
4
3
필자는 Visual Studio를 편집기로 설정했고 Visual Studio가 시작되었습니다
참고 자료
Unity Editor의 글로벌 이벤트
http://anchan828.hatenablog.jp/entry/2013/05/20/135339
Reference
이 문제에 관하여([Unity] 키 입력에서 GameObject에 포함된 모든 스크립트를 엽니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/d8b55b064fbb496ba408
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Unity] 키 입력에서 GameObject에 포함된 모든 스크립트를 엽니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-ngtm/items/d8b55b064fbb496ba408텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)