[Unity] 키 입력에서 GameObject에 포함된 모든 스크립트를 엽니다.

11331 단어 UnityEditorUnity
※ 본문 유니티 버전은 5.3.5f1

개시하다


게임 대상에 첨부된 스크립트를 열 때 마우스를 사용하십시오
더블 클릭 귀찮죠.
따라서 선택한 대상을 첨부하는 모든 스크립트
나는 키를 입력해서 열 수 있는 편집 확장을 시도해 보았다.

소스 코드


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
  • Hierrarchy의 GameObject 를 선택합니다.

  • 키보드의.누르다
    3
  • 누르면 선택한 GameObject와 함께 제공된 모든 스크립트가 외부 편집기에서 열립니다.

    필자는 Visual Studio를 편집기로 설정했고 Visual Studio가 시작되었습니다
  • 그렇게 지도 모른다, 아마, 아마...

    참고 자료


    Unity Editor의 글로벌 이벤트
    http://anchan828.hatenablog.jp/entry/2013/05/20/135339

    좋은 웹페이지 즐겨찾기