# Unity3D教你制作Bezier和Spine曲线编辑器一

1.创建自定义的编辑器

2.在Scene View窗口中绘制

3.可以在Scene View窗口中编辑

4.利用数学公式创建Bezier曲线

5.可以绘制曲线的移动方向

6.通过组合曲线构建Bezier和Spine曲线

7.支持镜像控制点

8.支持循环样条曲线

9.可以在曲线放置和移动物体

# 线的绘制

using UnityEngine;

public class Line : MonoBehaviour {

public Vector3 p0, p1;
}

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Line))]
public class LineInspector : Editor {
}

	private void OnSceneGUI () {
Line line = target as Line;

Handles.color = Color.white;
Handles.DrawLine(line.p0, line.p1);
}

	private void OnSceneGUI () {
Line line = target as Line;
Transform handleTransform = line.transform;
Vector3 p0 = handleTransform.TransformPoint(line.p0);
Vector3 p1 = handleTransform.TransformPoint(line.p1);

Handles.color = Color.white;
Handles.DrawLine(p0, p1);
}

private void OnSceneGUI () {
Line line = target as Line;
Transform handleTransform = line.transform;
Quaternion handleRotation = handleTransform.rotation;
Vector3 p0 = handleTransform.TransformPoint(line.p0);
Vector3 p1 = handleTransform.TransformPoint(line.p1);

Handles.color = Color.white;
Handles.DrawLine(p0, p1);
Handles.DoPositionHandle(p0, handleRotation);
Handles.DoPositionHandle(p1, handleRotation);
}

Quaternion handleRotation = Tools.pivotRotation == PivotRotation.Local ?
handleTransform.rotation : Quaternion.identity;

注意，由于句柄值在世界空间中，因此我们需要使用InverseTransformPoint方法将其转换回本地空间。 另外，当点改变时，我们只需要这样做， 我们可以使用EditorGUI.BeginChangeCheck和EditorGUI.EndChangeCheck。

		EditorGUI.BeginChangeCheck();
p0 = Handles.DoPositionHandle(p0, handleRotation);
if (EditorGUI.EndChangeCheck()) {
line.p0 = handleTransform.InverseTransformPoint(p0);
}
EditorGUI.BeginChangeCheck();
p1 = Handles.DoPositionHandle(p1, handleRotation);
if (EditorGUI.EndChangeCheck()) {
line.p1 = handleTransform.InverseTransformPoint(p1);
}

		EditorGUI.BeginChangeCheck();
p0 = Handles.DoPositionHandle(p0, handleRotation);
if (EditorGUI.EndChangeCheck()) {
Undo.RecordObject(line, "Move Point");
EditorUtility.SetDirty(line);
line.p0 = handleTransform.InverseTransformPoint(p0);
}
EditorGUI.BeginChangeCheck();
p1 = Handles.DoPositionHandle(p1, handleRotation);
if (EditorGUI.EndChangeCheck()) {
Undo.RecordObject(line, "Move Point");
EditorUtility.SetDirty(line);
line.p1 = handleTransform.InverseTransformPoint(p1);
}

• 本文已收录于以下专栏：

## Unity 曲线编辑器说明

• akof1314
• 2016年06月30日 09:26
• 5069

## Unity3D教你制作Bezier和Spine曲线编辑器三

• jxw167
• 2017年09月04日 13:56
• 1097

## Unity教程之-Unity3d游戏中自定义贝塞尔曲线编辑器

• andyhebear
• 2016年01月08日 12:00
• 1891

## Unity 贝塞尔曲线编辑器

• 2017年08月14日 00:16
• 68KB
• 下载

## unity3d自定义路径—曲线编辑器

• 2010年10月25日 11:26
• 7KB
• 下载

## unity 贝塞尔曲线的制作

• qq_37240033
• 2017年09月12日 15:20
• 111

## Unity3D教你制作Bezier和Spine曲线编辑器一

• jxw167
• 2017年08月30日 16:41
• 2648

## Unity3D教你制作Bezier和Spine曲线编辑器总结

• jxw167
• 2017年09月06日 09:31
• 565

## Unity3D教你制作Bezier和Spine曲线编辑器二

• jxw167
• 2017年08月31日 11:17
• 670

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

• mlkmx
• 2016年05月06日 15:31
• 1081

举报原因： 您举报文章：Unity3D教你制作Bezier和Spine曲线编辑器一 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)