标签:
贝塞尔曲线的原理以及具体实现方式在网上随处可见,这里不再赘述。实际上,在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; }
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); } }
具体结果如下图:
如此,就可以自由操作一条贝塞尔曲线啦,很方便吧。
标签:
原文地址:http://blog.csdn.net/mlkmx/article/details/51332063