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

来源:互联网 发布:vb安装包 拆分 编辑:程序博客网 时间:2024/05/17 01:00

贝塞尔曲线的原理以及具体实现方式在网上随处可见,这里不再赘述。实际上,在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);    }}


具体结果如下图:


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


0 0
原创粉丝点击