SceneViewクラスについて
そろそろ誰かSceneViewクラスについて情報書いていいと思うの
— けーごさん (@kyusyukeigo) 2013年3月12日
@tsubaki_t1 ふおおお
— けーごさん (@kyusyukeigo) 2013年3月12日
SceneViewとは
皆さんの知っているシーンビューを表示するためのクラスです
ドキュメント化されていない
ドキュメント化されてないです。なんでだろうな...
ぶっちゃけただのEditorWindow
SceneViewはSearchableEditorWindowを継承しただけのEditorWindowです。
SceneViewをうまく使いこなす近道
ヒエラルキービューとかプロジェクトビューを先にいじって知識を得たほうがいいと思う。ドキュメント化されてるし。
SceneViewにGUIを追加する
using UnityEngine; using UnityEditor; using System.Collections; [InitializeOnLoad] public class NewBehaviourScript { static NewBehaviourScript () { SceneView.onSceneGUIDelegate += OnSceneGUI; } static void OnSceneGUI (SceneView sceneView) { Handles.BeginGUI (); GUILayout.Window (1, new Rect (10, 30, 100, 100), Func, "Window"); Handles.EndGUI (); } static void Func (int id) { GUILayout.Button ("Hogeeeeee"); } }
SceneViewにメッシュを描画する
using UnityEngine; using UnityEditor; using System.Collections; [InitializeOnLoad] public class NewBehaviourScript { static NewBehaviourScript () { SceneView.onSceneGUIDelegate += OnSceneGUI; } static void OnSceneGUI (SceneView sceneView) { DrawMesh(); } static void DrawMesh () { Mesh mesh = new Mesh (); mesh.name = "Panel"; mesh.vertices = new Vector3{ new Vector3(-0.5f, 0.5f, 0f), new Vector3( 0.5f, 0.5f, 0f), new Vector3( 0.5f, -0.5f, 0f), new Vector3(-0.5f, -0.5f, 0f) }; mesh.triangles = new int{ 0, 1, 2, 2, 3, 0 }; mesh.uv = new Vector2[]{ new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(1f, 0f), new Vector2(0f, 0f) }; mesh.RecalculateNormals(); mesh.RecalculateBounds(); mesh.Optimize(); mesh.MarkDynamic (); Graphics.DrawMesh(mesh,Vector3.zero, Quaternion.identity, null, 0); } }
ここで重要なのが
SceneView.onSceneGUIDelegate
このデリゲートにSceneView.SceneFunc(SceneView sceneView)
さえ追加してあげればOK
この使い方は
projectWindowItemOnGUI とか hierarchyWindowItemOnGUI と同じ
シーンビューは複数表示できるのでsceneViewを確認しながら表示するかどうかを制御するのも良い。
あと別にInitializeOnLoadで呼び出さなくてもいいので使いたいように使いましょう。
でもInitializeOnLoadを使わない方法はEditor.OnSceneGUI使ったほうが良い場合がほとんどなんじゃないかな。
sceneView.LookAtあるよ!
これ使えば色々視点を切り替えられるよ。 Unity3.5時代にあってUnity4.0で亡くなったシーンギズモの真ん中押すといい具合にカメラ移動してくれた機能作れるんじゃないかな