テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityのシーンカメラの距離に応じてGizmoをOFFにする

Gizmoはカメラの位置に関係なく描画されます。そのため、Gizmoの量や場合によっては非常に凄まじいことになります。

例えばHandleでラベルを表現している場合、フォントのサイズ一定で常に表示されるため、少しカメラを離すとゴチャゴチャとなります。

これを解決する手っ取り早い方法は、シーンカメラを取得し距離に応じて表示の有無を決める事です。

f:id:tsubaki_t1:20150114103802g:plain

シーンビューのカメラを取得

シーンビューのカメラは以下のコードで取得します。

#if UNITY_EDITOR
        var sceneCamera =     UnityEditor.SceneView.currentDrawingSceneView.camera;
        // 何かのコード
#endif

 UnityEditorネームスペース以下のコードを使用するので、

#if UNITY_EDITOR 〜 #endif

で隔離する必要があります。

後はシーンビューカメラとGizmoを出してるオブジェクトとの距離をVector3.Distanceとかで確認し、距離が離れていればGizmoをOFFにする…等すればOKです。

 例えば距離を取りたければ、以下の様なコード。

        var sceneCamera =     UnityEditor.SceneView.currentDrawingSceneView.camera;
        var cameraDistance =  Vector3.DistancesceneCamera.transform.position , position);

後はcameraDistanceが60以下なら100以下なら…といった形で記述しておけば、距離に応じて挙動を変更することが出来ます。

f:id:tsubaki_t1:20150114103104p:plain

距離に応じてフォントサイズが変化するHandle.Label

ついでに距離に応じてフォントの大きさを変化させます。Unityでシーンビューに文字を表示するにはHandleを使いますが、これは常に一定の大きさのフォントを表現します。

なので、カメラとの相対距離で大きさを調整する感じの奴を追加します。ついでに#if UNITY_EDITORとか使わなくても使えるようにします。


Gizmo Utility

使う場合は以下のように記述します。

GizmoUtility.HandleLabel(座標, 文字, サイズ(m単位));

 

f:id:tsubaki_t1:20150115000050g:plain