BETA

Unityでオフセット値などを3Dカーソルで調整したい

投稿日:2019-03-21
最終更新:2019-03-21
※この記事は外部サイト(https://qiita.com/shiena/items/b72c5731da3...)からのクロス投稿です

はじめに

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  

参考リンク

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@shienaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!