Unityのシーンカメラの距離に応じてGizmoをOFFにする
Gizmoはカメラの位置に関係なく描画されます。そのため、Gizmoの量や場合によっては非常に凄まじいことになります。
例えばHandleでラベルを表現している場合、フォントのサイズ一定で常に表示されるため、少しカメラを離すとゴチャゴチャとなります。
これを解決する手っ取り早い方法は、シーンカメラを取得し距離に応じて表示の有無を決める事です。
シーンビューのカメラを取得
シーンビューのカメラは以下のコードで取得します。
#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.Distance( sceneCamera.transform.position , position);
後はcameraDistanceが60以下なら100以下なら…といった形で記述しておけば、距離に応じて挙動を変更することが出来ます。
距離に応じてフォントサイズが変化するHandle.Label
ついでに距離に応じてフォントの大きさを変化させます。Unityでシーンビューに文字を表示するにはHandleを使いますが、これは常に一定の大きさのフォントを表現します。
なので、カメラとの相対距離で大きさを調整する感じの奴を追加します。ついでに#if UNITY_EDITORとか使わなくても使えるようにします。
使う場合は以下のように記述します。
GizmoUtility.HandleLabel(座標, 文字, サイズ(m単位));