はじめに
UnityでGameObjectの配置場所をオフセットでずらしたい時にフィールドを用意しておくとInspectorから調整できます。しかしVector3を斜めにずらしたい時など、数値だけでは調整が難しい場合もあります。そんな時にエディター拡張入門でGizmoとHandleを作る方法を見付けて、簡単なエディター拡張を作るとすごく便利でした。
エディター拡張の作り方
以下のようなクラスがありoffset
を3Dカーソルで調整したいとします。
using UnityEngine;
public class Body : MonoBehaviour
{
/// <summary>
/// 3Dカーソルを作りたいフィールド
/// </summary>
public Vector3 offset;
}
以下のようなエディター拡張を作ると3DカーソルとギズモをScene Viewに作ることができます。
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
/// <summary>
/// 操作したいクラスをCustomEditorAttributeのtypeofで指定する
/// </summary>
[CustomEditor(typeof(Body))]
public class BodyEditor : Editor
{
/// <summary>
/// 3Dカーソルを作る
/// </summary>
private void OnSceneGUI()
{
var component = target as Body;
var offset = component.offset;
var transform = component.transform;
offset = Handles.PositionHandle(transform.TransformPoint(offset), transform.rotation);
component.offset = transform.InverseTransformPoint(offset);
}
/// <summary>
/// ギズモを作る
/// </summary>
/// <param name="body"></param>
/// <param name="gizmoType"></param>
[DrawGizmo(GizmoType.NonSelected | GizmoType.Active)]
private static void DrawEyeTargetGizmos(Body body, GizmoType gizmoType)
{
var transform = body.transform;
Gizmos.color = Color.gray;
Gizmos.DrawSphere(transform.TransformPoint(body.offset), 0.05f);
}
}
#endif
Top comments (0)