1. Qiita
  2. 投稿
  3. UnityEditor

【UnityEditor】Projectビューで現在開いているディレクトリを取得する

  • 2
    いいね
  • 0
    コメント

はじめに

Projectビューで開いている場所のパスを取得する方法を調べてみました。

環境

Unity 5.5.0f3
Windows 10

カレントディレクトリの在りか

UnityEditor.ProjectBrowser クラスの GetActiveFolderPath() メソッドを実行するとカレントディレクトリが取得できます。
このメソッドは非公開なのでリフレクションを使って呼び出してやります。

ソースコード

以下のメソッドを実行するとカレントディレクトリが取得できます

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); 
}

活用例 (Windows 10)

コマンドプロンプトを起動してProjectビューのカレントディレクトリへ移動する

Ctrlキー + Tで コマンドプロンプトが起動します。

EditorRunTerminal.cs
using UnityEditor;
using System.Diagnostics;
using System.Reflection;

public class EditorRunTerminal
{
    [MenuItem("Window/Run Terminal %t")]
    static void RunTerminal()
    {
        Process p = new Process();
        p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
        p.StartInfo.Arguments = "/k cd " + GetCurrentDirectory();
        p.Start();
    }

    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); 
    }
}

結果
image