UIだけ表示するシーンビューを試しに作ってみました。
右上の画面がUIのみを表示するシーンビュー、左上がUIを表示しないシーンビューです。
UnityでUIのみシーンビューとUI以外シーンビューとゲームビュー pic.twitter.com/wByCx29Po3
— 椿 (@tsubaki_t1) 2015, 9月 21
今回は並べてみましたが、画面が小さい場合はSceneViewの裏に配置しクリック一発で切り替えるも面白いかもしれません。
何故こんな物を作ってしまったのか
何故こんな物を作ってしまったのかと言うと、原因はシーンビューのオブジェクトをタップしても選択できない です。つまりUIが邪魔すぎて選択する上で邪魔な事この上なかった訳です。UIの表示切替も何度もやってると面倒くさくなります。
UI専用カメラを用意しScreen Space Cameraにして画面隅に配置する方法も考えましたが、UIの位置調整が面倒くさいので止めました。
で、どうせならシーンビューからUI表示を消して、UIを操作する専用のシーンビューを作ってしまおうと、そう思った訳です。
どのようにして作ったのか
UnityエディタのUIは突きつめると大体がScriptableObjectで作られています。なので、
ScriptableObject.CreateInstance
で生成することが可能です。
で幸いにもSceneViewクラスはpublicなので、UnityEditor.SceneViewクラスを継承したテキトウなクラスを用意しScriptableObject.CreateInstance
を実行すればオリジナルなSceneViewが作れます。
やっかいな問題が二つ。
一つ目は「描画の制御に使用しているSceneViewCameraのCullingMaskがOnGUI内で書き換えられている」事、もう一つは「SceneViewクラスの持っているOnGUIメソッドがInternalでアクセス出来ない」点です。
まずCullingMaskが書き換えられている点ですが、どうもTools.visibleLayers
からレイヤー情報を取ってるらしいので、OnGUIの前後でTools.visibleLayers
の情報を書き換えました。
書き換えたタイミングですが、OnGUIを新しく作りInternalでアクセス出来ないOnGUIはリフレクションで呼び出しました。
本当はOnGUIの中身を持ってきて書き換えたかったのですが、他のInternalクラスやPrivateメソッドが結構あったので面倒くさくなり止めました。
実はもう一つ問題があり、これは解決出来ていません。というのも「UI専用シーンビューをドラッグするとTools.visibleLayers
が上書きされ本来のシーンビューがUI専用ビューになってしまう」問題です。
とりあえず「UI専用シーンビューからフォーカスが外れたら元に戻す」設定で何とかしていますが、割と挙動的に気持ちが悪いので何とかしたい処です。
導入方法
Unity 5.2 p1で作成。
Editorフォルダを作り、下のコードをそこに配置します。
「メニューバー > Window > UISceneView」でウィンドウが開きます。
あとはエディタ画面右上のLayersからUIを非表示にします。やり方
ちなみにリフレクション使ってInternalなコードにアクセスしているので、Unityエディタバージョンアップで使えなくなる可能性有