UnityTab
UnityEditorのlayoutを切り替えるWindowを作成しました。
UnityTabSample
Unityでアニメーションをしよう、GameViewを大きくみよう、カスタムViewをメインでいじる...etc
のように制作をしていれば、切り替えたいタイミングが出てくることもあるかともいます。
なので、別Windowにtabを出して切り替えれたら便利じゃないかな?と思い作りました。
VisualStuidoでForm使って制作したので、Windowsのみの対応となっています。
UnityTab
プロジェクトは勢いで作って公開してます。
もしかすると、Windowsでも動かない場合もあるかもしれません。
UnityEditorのlayoutファイルである*.wltは、自分の場合/Users/UserName/AppData/Roaming
/Unity/Editor-5.x/Preferences/Layouts/*.wltという感じにあったのでEditor-5.xが違うかもしれません。
少し解説
dll側は大したことはしてなく、Windowを出して*.wltを読み込んでTabControllerに突っ込んでTabを出してるだけです。
Tabを押したときのeventをUnityに通知する方法が思い浮かばなかったのでdelegateを渡すことで解決させています(力技感あるので変えたい…)
Unity側は
public class TabEditor : Editor
{
[MenuItem ("UnityTab/LaunchWindowStart")]
static void LaunchWindowStart ()
{
UnityTab.TabMain.Launch (
(int index) =>
{
var path = UnityTab.TabMain.GetFilePath[index];
var tyWindowLayout = Type.GetType ("UnityEditor.WindowLayout,UnityEditor");
var method = tyWindowLayout.GetMethod ("LoadWindowLayout", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof (string), typeof (bool) }, null);
var assetPath = Path.Combine (Directory.GetCurrentDirectory (), path);
method.Invoke (null, new object[] { assetPath, false });
});
}
[MenuItem ("UnityTab/LaunchWindowStop")]
static void LaunchWindowStop ()
{
UnityTab.TabMain.Stop ();
}
}
となっており、またもや力業ぽいです。というか正式なAPIが提供されてないけど、メソッドたたきに行ってます。
WindowLayout.cs
を参照するとlayout系のメソッドが読めます
まとめ
結構力業を使ってるところがあるので、今のままだと使えない時がいずれ来るかもしれません。
使ってみたい方は使えるうちにお願いします。
今後は
- タブを可変にして好きなやつだけ追加できるようにする
- MacOS等の対応
- UnityEditorの上に追従するようにする
とか考えてますが、いつできるかはわからないです。やれればやります。(やるならElectron化とかかも)
変数命名とかFormは詳しくないので変なところある気はしてますが、ご容赦ください…