码迷,mamicode.com
首页 > 其他好文 > 详细

在Editor模式下编辑贝塞尔曲线

时间:2016-05-07 08:57:45      阅读:798      评论:0      收藏:0      [点我收藏+]

标签:

贝塞尔曲线的原理以及具体实现方式在网上随处可见,这里不再赘述。实际上,在Unity的Editor模式下,系统已经提供了现成的接口,只需要简单的几行代码,便能实现可自由拖曳的贝塞尔曲线。

首先,创建一个Bezier.cs文件,具体代码如下:

//将代码添加至任意GameObject即可

using UnityEngine;
using System.Collections;

public class Bezier : MonoBehaviour
{
    //起始于startPosition,走向于startTangent,并从endTangent来到终点endPosition
    public Vector3 startPosition = Vector3.zero;
    public Vector3 startTangent = Vector3.zero;
    public Vector3 endPosition = Vector3.zero;
    public Vector3 endTangent = Vector3.zero;
}

其次,创建一个BezierEditor.cs文件,具体代码如下:

using UnityEngine;
using UnityEditor;


//CustomEditor即将该编辑代码附加在Bezier.cs上
//当Bezier.cs绑定物体被选中时
//该代码会运行
[CustomEditor(typeof(Bezier))]
public class BezierEditor : Editor
{
    private static Bezier bezier;


    //每次激活时会运行
    void OnEnable()
    {
        //target表示目前inspector内显示物体
        bezier = target as Bezier;
    }


    void OnSceneGUI()
    {
        //创建一个可自由拖曳的点
        bezier.startPosition = Handles.PositionHandle(bezier.startPosition, Quaternion.identity);
        //创建一个可自由拖曳的控制轴,这里可以把其当成Tangent,即切线
        bezier.startTangent = Handles.FreeMoveHandle(bezier.startTangent, Quaternion.identity, 1F, Vector3.zero, Handles.SphereCap);
        //这里画条线是为了更加直观表示
        Handles.DrawLine(bezier.startPosition, bezier.startTangent);
        bezier.endPosition = Handles.PositionHandle(bezier.endPosition, Quaternion.identity);
        bezier.endTangent = Handles.FreeMoveHandle(bezier.endTangent, Quaternion.identity, 1F, Vector3.zero, Handles.SphereCap);
        Handles.DrawLine(bezier.endPosition, bezier.endTangent);


        Handles.DrawBezier(bezier.startPosition, bezier.endPosition, bezier.startTangent, bezier.endTangent, Color.green, null, 10F);
    }


}


具体结果如下图:

技术分享

如此,就可以自由操作一条贝塞尔曲线啦,很方便吧。


在Editor模式下编辑贝塞尔曲线

标签:

原文地址:http://blog.csdn.net/mlkmx/article/details/51332063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!