[Unity 확장] 현재 디렉터리를 강조하는 편집 확장을 만들어 보았습니다.
18006 단어 Unity 확장UnityEditorUnity
개시하다
프로젝트 내 폴더의 수가 증가함에 따라 현재 열린 디렉터리가 프로젝트 보기 트리의 어디에 있는지 찾기가 점점 어려워집니다.
(이미지의 폴더 구성은 이번 기사를 위해 기습적으로 만든 것인데 좀 심했나 봐...)
그래서 이번에 우리는 현재 열려 있는 디렉터리 (= 현재 디렉터리) 를 강조하는 편집 확장을 만들었다.
컨디션
Unity 5.5.0f3
Windows 10
제작에 관한 것
오른쪽 메뉴에서 한 번 클릭하면 현재 디렉터리의 편집 확장을 강조할 수 있습니다.
편리할 거예요.
소스 코드
프로젝트에 Editor 폴더를 만들고 다음 스크립트를 Editor 폴더에 삽입하십시오.
ProjectBrowserExtension.csnamespace ProjectBrowserExtension
{
using UnityEditor;
using System.Reflection;
using System.Linq;
public class ProjectBrowserExtension
{
const string MenuItemName = "Assets/Highlight Current Directory";
/// <summary>
/// プロジェクトウィンドウでカレントディレクトリの親フォルダをハイライトする
/// </summary>
[MenuItem(MenuItemName)]
static void FrameCurrentDirectory()
{
string currentDirectory = GetCurrentDirectory(); // カレントディレクトリ
// カレントディレクトリ直下のファイルのパスを取得
int depth = currentDirectory.Split('/').Length;
string path = AssetDatabase.GetAllAssetPaths()
.Where(assetPath => assetPath.Contains(currentDirectory)) // カレントディレクトリのファイルかどうか
.FirstOrDefault(assetPath => assetPath.Split('/').Length == depth + 1); // カレントディレクトリ直下のファイルかどうか
if (string.IsNullOrEmpty(path)) // カレントディレクトリにファイルが存在しない場合
{
FrameObjectInTwoColumnMode(GetInstanceID(currentDirectory), true, false);
EditorApplication.delayCall += () =>
{
ShowFolderContents(GetInstanceID(currentDirectory), true);
};
}
else // カレントディレクトリにファイルが存在する場合
{
FrameObjectInTwoColumnMode(GetInstanceID(path), true, true);
}
}
/// <summary>
/// FrameCurrentDirectory()のValidate関数
/// </summary>
[MenuItem(MenuItemName, true, 20000)]
static bool ValidateFrameCurrentDirectory()
{
return IsTwoColumn();
}
/// <summary>
/// ProjectウィンドウがTwoColumnモードかどうか
/// </summary>
static bool IsTwoColumn()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return typeProjectBrowser.GetField("m_ViewMode", flag).GetValue(projectBrowserWindow).ToString() == "TwoColumns";
}
/// <summary>
/// pathからInstanceIDを取得
/// </summary>
static int GetInstanceID(string path)
{
return AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)).GetInstanceID();
}
/// <summary>
/// Projectウィンドウでオブジェクトをハイライトする
/// </summary>
static void FrameObjectInTwoColumnMode(int instanceID, bool frame, bool ping)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("FrameObjectInTwoColumnMode", flag).Invoke(projectBrowserWindow, new object[] { instanceID, frame, ping });
}
/// <summary>
/// Projectウィンドウでフォルダの中身を表示
/// </summary>
static void ShowFolderContents(int folderInstanceID, bool revealAndFrameInFolderTree)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("ShowFolderContents", flag).Invoke(projectBrowserWindow, new object[] { folderInstanceID, revealAndFrameInFolderTree });
}
/// <summary>
/// Projectウィンドウで現在開いているディレクトリを取得
/// </summary>
static string GetCurrentDirectory()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return (string)typeProjectBrowser.GetMethod("GetActiveFolderPath", flag).Invoke(projectBrowserWindow, null);
}
}
}
편집을 사용하여 확장
마우스 오른쪽 버튼 메뉴에서 Highlight 현재 Directory 를 선택하면 됩니다.현재 디렉토리를 강조 표시합니다.
편집과 확장을 거치지 않고 같은 일을 하다
편집 확장 후 빵 부스러기 목록의 현재 디렉터리를 클릭하면 폴더를 강조할 수 있습니다.
만약 폴더의 차원이 너무 깊다면, 빵 부스러기 목록이 화면 밖을 넘어서면, 이 편집의 확장이 매우 편리할 것이다.(완료)
Reference
이 문제에 관하여([Unity 확장] 현재 디렉터리를 강조하는 편집 확장을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/1b42bac0c361ac157f43
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Unity 5.5.0f3
Windows 10
제작에 관한 것
오른쪽 메뉴에서 한 번 클릭하면 현재 디렉터리의 편집 확장을 강조할 수 있습니다.
편리할 거예요.
소스 코드
프로젝트에 Editor 폴더를 만들고 다음 스크립트를 Editor 폴더에 삽입하십시오.
ProjectBrowserExtension.csnamespace ProjectBrowserExtension
{
using UnityEditor;
using System.Reflection;
using System.Linq;
public class ProjectBrowserExtension
{
const string MenuItemName = "Assets/Highlight Current Directory";
/// <summary>
/// プロジェクトウィンドウでカレントディレクトリの親フォルダをハイライトする
/// </summary>
[MenuItem(MenuItemName)]
static void FrameCurrentDirectory()
{
string currentDirectory = GetCurrentDirectory(); // カレントディレクトリ
// カレントディレクトリ直下のファイルのパスを取得
int depth = currentDirectory.Split('/').Length;
string path = AssetDatabase.GetAllAssetPaths()
.Where(assetPath => assetPath.Contains(currentDirectory)) // カレントディレクトリのファイルかどうか
.FirstOrDefault(assetPath => assetPath.Split('/').Length == depth + 1); // カレントディレクトリ直下のファイルかどうか
if (string.IsNullOrEmpty(path)) // カレントディレクトリにファイルが存在しない場合
{
FrameObjectInTwoColumnMode(GetInstanceID(currentDirectory), true, false);
EditorApplication.delayCall += () =>
{
ShowFolderContents(GetInstanceID(currentDirectory), true);
};
}
else // カレントディレクトリにファイルが存在する場合
{
FrameObjectInTwoColumnMode(GetInstanceID(path), true, true);
}
}
/// <summary>
/// FrameCurrentDirectory()のValidate関数
/// </summary>
[MenuItem(MenuItemName, true, 20000)]
static bool ValidateFrameCurrentDirectory()
{
return IsTwoColumn();
}
/// <summary>
/// ProjectウィンドウがTwoColumnモードかどうか
/// </summary>
static bool IsTwoColumn()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return typeProjectBrowser.GetField("m_ViewMode", flag).GetValue(projectBrowserWindow).ToString() == "TwoColumns";
}
/// <summary>
/// pathからInstanceIDを取得
/// </summary>
static int GetInstanceID(string path)
{
return AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)).GetInstanceID();
}
/// <summary>
/// Projectウィンドウでオブジェクトをハイライトする
/// </summary>
static void FrameObjectInTwoColumnMode(int instanceID, bool frame, bool ping)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("FrameObjectInTwoColumnMode", flag).Invoke(projectBrowserWindow, new object[] { instanceID, frame, ping });
}
/// <summary>
/// Projectウィンドウでフォルダの中身を表示
/// </summary>
static void ShowFolderContents(int folderInstanceID, bool revealAndFrameInFolderTree)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("ShowFolderContents", flag).Invoke(projectBrowserWindow, new object[] { folderInstanceID, revealAndFrameInFolderTree });
}
/// <summary>
/// Projectウィンドウで現在開いているディレクトリを取得
/// </summary>
static string GetCurrentDirectory()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return (string)typeProjectBrowser.GetMethod("GetActiveFolderPath", flag).Invoke(projectBrowserWindow, null);
}
}
}
편집을 사용하여 확장
마우스 오른쪽 버튼 메뉴에서 Highlight 현재 Directory 를 선택하면 됩니다.현재 디렉토리를 강조 표시합니다.
편집과 확장을 거치지 않고 같은 일을 하다
편집 확장 후 빵 부스러기 목록의 현재 디렉터리를 클릭하면 폴더를 강조할 수 있습니다.
만약 폴더의 차원이 너무 깊다면, 빵 부스러기 목록이 화면 밖을 넘어서면, 이 편집의 확장이 매우 편리할 것이다.(완료)
Reference
이 문제에 관하여([Unity 확장] 현재 디렉터리를 강조하는 편집 확장을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/1b42bac0c361ac157f43
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
프로젝트에 Editor 폴더를 만들고 다음 스크립트를 Editor 폴더에 삽입하십시오.
ProjectBrowserExtension.cs
namespace ProjectBrowserExtension
{
using UnityEditor;
using System.Reflection;
using System.Linq;
public class ProjectBrowserExtension
{
const string MenuItemName = "Assets/Highlight Current Directory";
/// <summary>
/// プロジェクトウィンドウでカレントディレクトリの親フォルダをハイライトする
/// </summary>
[MenuItem(MenuItemName)]
static void FrameCurrentDirectory()
{
string currentDirectory = GetCurrentDirectory(); // カレントディレクトリ
// カレントディレクトリ直下のファイルのパスを取得
int depth = currentDirectory.Split('/').Length;
string path = AssetDatabase.GetAllAssetPaths()
.Where(assetPath => assetPath.Contains(currentDirectory)) // カレントディレクトリのファイルかどうか
.FirstOrDefault(assetPath => assetPath.Split('/').Length == depth + 1); // カレントディレクトリ直下のファイルかどうか
if (string.IsNullOrEmpty(path)) // カレントディレクトリにファイルが存在しない場合
{
FrameObjectInTwoColumnMode(GetInstanceID(currentDirectory), true, false);
EditorApplication.delayCall += () =>
{
ShowFolderContents(GetInstanceID(currentDirectory), true);
};
}
else // カレントディレクトリにファイルが存在する場合
{
FrameObjectInTwoColumnMode(GetInstanceID(path), true, true);
}
}
/// <summary>
/// FrameCurrentDirectory()のValidate関数
/// </summary>
[MenuItem(MenuItemName, true, 20000)]
static bool ValidateFrameCurrentDirectory()
{
return IsTwoColumn();
}
/// <summary>
/// ProjectウィンドウがTwoColumnモードかどうか
/// </summary>
static bool IsTwoColumn()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return typeProjectBrowser.GetField("m_ViewMode", flag).GetValue(projectBrowserWindow).ToString() == "TwoColumns";
}
/// <summary>
/// pathからInstanceIDを取得
/// </summary>
static int GetInstanceID(string path)
{
return AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)).GetInstanceID();
}
/// <summary>
/// Projectウィンドウでオブジェクトをハイライトする
/// </summary>
static void FrameObjectInTwoColumnMode(int instanceID, bool frame, bool ping)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("FrameObjectInTwoColumnMode", flag).Invoke(projectBrowserWindow, new object[] { instanceID, frame, ping });
}
/// <summary>
/// Projectウィンドウでフォルダの中身を表示
/// </summary>
static void ShowFolderContents(int folderInstanceID, bool revealAndFrameInFolderTree)
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
typeProjectBrowser.GetMethod("ShowFolderContents", flag).Invoke(projectBrowserWindow, new object[] { folderInstanceID, revealAndFrameInFolderTree });
}
/// <summary>
/// Projectウィンドウで現在開いているディレクトリを取得
/// </summary>
static string GetCurrentDirectory()
{
var flag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
var asm = Assembly.Load("UnityEditor.dll");
var typeProjectBrowser = asm.GetType("UnityEditor.ProjectBrowser");
var projectBrowserWindow = EditorWindow.GetWindow(typeProjectBrowser);
return (string)typeProjectBrowser.GetMethod("GetActiveFolderPath", flag).Invoke(projectBrowserWindow, null);
}
}
}
편집을 사용하여 확장
마우스 오른쪽 버튼 메뉴에서 Highlight 현재 Directory 를 선택하면 됩니다.현재 디렉토리를 강조 표시합니다.
편집과 확장을 거치지 않고 같은 일을 하다
편집 확장 후 빵 부스러기 목록의 현재 디렉터리를 클릭하면 폴더를 강조할 수 있습니다.
만약 폴더의 차원이 너무 깊다면, 빵 부스러기 목록이 화면 밖을 넘어서면, 이 편집의 확장이 매우 편리할 것이다.(완료)
Reference
이 문제에 관하여([Unity 확장] 현재 디렉터리를 강조하는 편집 확장을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/1b42bac0c361ac157f43
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
편집 확장 후 빵 부스러기 목록의 현재 디렉터리를 클릭하면 폴더를 강조할 수 있습니다.
만약 폴더의 차원이 너무 깊다면, 빵 부스러기 목록이 화면 밖을 넘어서면, 이 편집의 확장이 매우 편리할 것이다.(완료)
Reference
이 문제에 관하여([Unity 확장] 현재 디렉터리를 강조하는 편집 확장을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-ngtm/items/1b42bac0c361ac157f43텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)