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


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

}

具体结果如下图:

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

时间: 2024-08-08 15:29:08

在Editor模式下编辑贝塞尔曲线的相关文章

win32下的贝塞尔曲线

简单的利用windows api来实现的贝赛尔曲线.两个端点是固定的,垂直方向的位置为显示区域高度的一半,水平方向则分别位于显示宽度的1/4和3/4处. 两个控点可以改变,按住鼠标左键并拖动鼠标可以改变第一个控点,按住右键并拖动鼠标可以改变第二个控点. 如图: 代码如下: #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstanc

【Unity3D】用继承EditorUpdater类来实现Editor模式下的后台处理

EditorWindow类的OnGUI函数只会在窗口焦点处于Editor窗口上的时候才会运行.如果希望焦点不在Editor窗口上的时候,它也能实时更新,可以实现以下方法: OnDestroy OnDestroy is called when the EditorWindow is closed. OnFocus Called when the window gets keyboard focus. OnGUI Implement your own editor GUI here. OnHiera

Unity3D Editor模式下批量修改prefab

最经遇到一个需要批量修改已经做好的prefab的问题,查了一些资料最终实现了但是还是不够完美,通过学习也发现unity的编辑器功能还是非常强大的.废话不多说直接上代码: 1 [ExecuteInEditMode] 2 [MenuItem("Tools/RecordPoint Add Flame")] 3 private static void RecordPointAddFlame() 4 { 5 GameObject twoSphere = AssetDatabase.LoadAss

在editor模式下遍历unity3d builtsetting中的场景

foreach (UnityEditor.EditorBuildSettingsScene S in UnityEditor.EditorBuildSettings.scenes) { //在built setting中是否已经开启 if(S.enabled) { //得到场景的名称 string name = S.path; //打开这个场景 EditorApplication.OpenScene(name); //遍历场景中的GameObject foreach (GameObject ob

二、Unity Editor模式下,操作选中对象

使用Unity提供的工具类 UnityEditor.Selection public static GameObject activeGameObject public static UnityEngine.Object activeObject 原文地址:https://www.cnblogs.com/hjshen/p/10219266.html

深度掌握SVG路径path的贝塞尔曲线指令

一.数字.公式.函数.变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是完全不能承受富有创意的创作的,至少得有我当年追我老婆的脸皮厚才行. 然而,瞅瞅维基百科上的释义,或者其他一些相关的技术文章,总是离不开各种公式,一大堆变量……例如下面维基截图缩略图: 完全是数学爱好者的菜啊!我想,要是让UI设计师们去学习这些东西,估计还不如一刀来个痛快的! 这就是爱好领域与能力掌握的

贝塞尔曲线开发的艺术

贝塞尔曲线开发的艺术 一句话概括贝塞尔曲线:将任意一条曲线转化为精确的数学公式. 很多绘图工具中的钢笔工具,就是典型的贝塞尔曲线的应用,这里的一个网站可以在线模拟钢笔工具的使用: http://bezier.method.ac/ 贝塞尔曲线中有一些比较关键的名词,解释如下: 数据点:通常指一条路径的起始点和终止点 控制点:控制点决定了一条路径的弯曲轨迹,根据控制点的个数,贝塞尔曲线被分为一阶贝塞尔曲线(0个控制点).二阶贝塞尔曲线(1个控制点).三阶贝塞尔曲线(2个控制点)等等. 要想对贝塞尔曲

改进Vim体验:在插入模式下移动光标,我不要用方向键!alt快捷键使用技巧!

改进Vim体验:在插入模式下移动光标,我不要用方向键!alt快捷键使用技巧! 大家都知道,我们在插入模式下编辑代码的时候 若想写完这一部分后,移动到邻近的一部分,如下一个单词的后面,是很复杂的 '\eea'?还是'方向键*n'?虽然这也没什么复杂的,特别是参照我前面一篇文档,\e(esc)只需要按下alt-; 但有没有更方便的方法呢?我要告诉大家,有,插入模式下的alt快捷键重映射! 如下设置按键码 ;设置按键码判断时间;这个时间和组合键判断时间不同哟!只需要设置一次 :set ttimeout

百度编辑器UEditor源码模式下过滤div/style等html标签

UEditor在html代码模式下,当输入带有<div style="">.<iframe>这类带有html标签的内容时,切换为编辑器模式后,会发现输入的内容被删除,自动过滤掉了.提供两种解决方案: 1."白名单法",此即网上找的很多配置黑白名单,不过都适用于老版本:新版本的文件名做了很大改变,找不到那些方法中描述的原样文件.但是,一套程序的原理总是不变的,通过几天的研究.试了多种方法,发现,最新的版本(1.4.3)也有个所谓"白名