ゲスト 12人 と メンバー0人 がオンラインです

■サンプル(MonoBehaviour側)

public class Hoge : MonoBehaviour,IMeshModifier
{
    [SerializeField]
    private Vector3[] m_points;
}

■サンプル(Editor側)

[CustomEditor(typeof(Hoge))]
public class HogeEditor : Editor {

    private SerializedProperty m_points;

    private void OnEnable()
    {
        m_points = serializedObject.FindProperty("m_points");
    }

    private void OnSceneGUI()
    {
        // 内部キャッシュから最新のデータを取得
        serializedObject.Update();

        // Begin~, End~
        //  GUI グループ内のGUI要素でなんらかの変更がなされたときにアクションを起こすために使用する
        EditorGUI.BeginChangeCheck();

        var pointsForDrawLine = new List<Vector3>();
        var prevPoint = Vector3.zero;
        for(int i=0; i<m_points.arraySize; i++)
        {
            var prop = m_points.GetArrayElementAtIndex(i);

            // TransformPoint : local to world
            prop.vector3Value = Handles.DoPositionHandle(
                self.transform.TransformPoint(prop.vector3Value), 
                (target as BSplineRenderer).transform.rotation);
            pointsForDrawLine.Add(prop.vector3Value);

            // 線引かないとつなぎ順がわかりにくいので線を引く
            if (i > 0)
                Handles.DrawLine(pointsForDrawLine[i - 1], pointsForDrawLine[i]);
            

            // InverseTransformPoint: world to local
            prop.vector3Value = self.transform.InverseTransformPoint(prop.vector3Value);            
        }

        if (EditorGUI.EndChangeCheck())
        {
            // 内部キャッシュに変更点を適用する
            serializedObject.ApplyModifiedProperties();
        }
    }
}