首页 > 其他分享 >编辑器Scene视图扩展 - Handles.Slider2D

编辑器Scene视图扩展 - Handles.Slider2D

时间:2023-10-19 23:33:38浏览次数:38  
标签:Slider2D void Vector3 视图 Handles handleDir var new

效果

 

#if UNITY_EDITOR

using UnityEditor;
using UnityEngine;

public class TestSceneGUIWindow : EditorWindow
{
    [MenuItem("MyTools/TestSceneGUIWindow")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow<TestSceneGUIWindow>(false, "TestSceneGUIWindow", true).Show();
    }

    private Vector3 m_Position = new Vector3();

    private void OnEnable()
    {
        SceneView.onSceneGUIDelegate -= OnMySceneGUI;
        SceneView.onSceneGUIDelegate += OnMySceneGUI;
    }

    private void OnDisable()
    {
        SceneView.onSceneGUIDelegate -= OnMySceneGUI;
    }

    private void OnMySceneGUI(SceneView sceneView)
    {
        //在这边扩展Scene视图

        float handleSize = HandleUtility.GetHandleSize(m_Position);

        Handles.color = Color.yellow;
        var handleDir = new Vector3(1, 1, 1);
        //以handleDir为法线的平面, 在slider滑动平面上的投影区域, 为滑动块的可滑动区域
        ShowHelpPlane(handleDir);
        m_Position = Handles.Slider2D(m_Position, handleDir, Vector3.right, Vector3.up, handleSize, Handles.ArrowHandleCap, 0);

        ShowHelpLines();
    }

    private void ShowHelpPlane(Vector3 handleDir)
    {
        var planeGo = GameObject.Find("Plane");
        if (null != planeGo)
        {
            planeGo.transform.up = handleDir;
            planeGo.transform.position = m_Position;
        }
    }

    private void ShowHelpLines()
    {
        Handles.color = Color.cyan;
        Handles.DrawAAPolyLine(Vector3.zero, m_Position); //原点到Slider2D滑动块的连线

        Handles.color = Color.red;
        Handles.DrawAAPolyLine(Vector3.zero, new Vector3(20, 0, 0)); //x轴

        Handles.color = Color.green;
        Handles.DrawAAPolyLine(Vector3.zero, new Vector3(0, 20, 0)); //y轴

        Handles.color = Color.blue;
        Handles.DrawAAPolyLine(Vector3.zero, new Vector3(0, 0, 20)); //z轴
    }

}

#endif

 

把handleDir换成new Vector(0, 1, 0), 以handDir为法线的平面, 在slider滑动平面上的投影区域就是一条直线, 此时只能在这条直线范围上操作 

var handleDir = new Vector3(1, 0, 0);也是如此

 

这几个的投影区域都是x-y平面上的一块区域,都可以在x-y平面内无限制滑动
var handleDir = new Vector3(0, 0, 1);
var handleDir = new Vector3(1, 0, 1);
var handleDir = new Vector3(0, 1, 1);
var handleDir = new Vector3(1, 1, 1);

 

标签:Slider2D,void,Vector3,视图,Handles,handleDir,var,new
From: https://www.cnblogs.com/sailJs/p/17774327.html

相关文章

  • 编辑器扩展 - Scene视图
    扩展Scene视图的几种方式1)注册SceneView.duringSceneGui委托(Unity2018及之前版本是SceneView.onSceneGUIDelegate)#ifUNITY_EDITORusingUnityEditor;publicclassTestSceneGUIWindow:EditorWindow{[MenuItem("MyTools/TestSceneGUIWindow")]publicstatic......
  • huawei交换机基本配置,入门视图详解
    一、交换机基本配置1、交换机连接方式本地:计算机COM口/USB口-->Console线-->交换机Console口远程:Putty、SecureCRT、Xshell远程管理工具2、网络操作系统1)有四种视图模式<*> //用户视图:查看运行状态或其他参数[*] //系统视图:配置设备的系统参数[*-GigabitEthernet0/0......
  • python 处理异步物化视图同时执行导致内存溢出问题
    python处理异步物化视图同时执行导致内存溢出问题一、前提:因为物化视图过多,同时物化视图到时间同时爆发,导致CPU爆满,所以采用datax自带的调度服务来执行python命令二、直接看代码:importpymysqlimportpymssqlimportdatetimeimporttimeclassMaterialized_plan:d......
  • sortable 拖拽后数据变更但视图不变
    问题表格中某两行拖拽换序,使用sortable.js在拖拽结束后调用换序接口,再更新数据列表。问题是数据变了,但视图不变。如下图所示:分析vue无法检测数组中顺序的变化。即使采用$set,$forceUpdate(),给组件添加key属性,仍然无法解决该问题。解决办法请求数据列表前,先重置列表。......
  • Solidworks 零件重命名后,工程图视图丢失怎么办?
    SolidWorks修改零件名称后,打开工程图,发现原先标注好的图纸视图不见了,如下图所示,这是因为工程图链接的模型零件丢失,本文给大家分享解决此问题方法。解决方法:先不要直接双击打开工程图,按下面步骤操作:先打开SolidWorks,然后点击打开,选择工程图,先不要直接点下面的打开,而是先选择参......
  • 【CSS3】CSS3 3D 转换 ③ ( 3D 透视视图 | translateZ 转换分析 | 网页调试工具调试 t
    文章目录一、translateZ转换分析1、translateZ转换对应的空间分析2、网页调试工具调试translateZ属性值二、代码示例-translateZ转换分析1、代码示例-translateZ为0的参照示例2、代码示例-translateZ为200示例一、translateZ转换分析1、translateZ转换对应的......
  • UML五大视图
    树形图总结分开介绍1、用例视图--用例视图强调从系统的外部参与者(主要是用户)的角度看到的或需要的系统功能2、逻辑视图--逻辑视图从系统的静态结构和动态行为角度显示如何实现系统的功能3、进程视图--侧重于系统的运行4、开发视图(实现视图)--侧重于软件模块的组织和管理......
  • Oracle重新编译视图
    当表名、列名、列类型等底层表的信息发生改变的时候,就会使得视图无法使用,其时就需要对视图进行重新的编译。第一步,查找失效的视图。可以使用数据字典中的user_objects来查找出失效的视图名,还可以利用user_views来查找出相应视图的代码信息。基本的代码如下:----------------查......
  • Excel 中使用数据透视图进行数据可视化
     使用数据透视表(PivotTable)是在Excel中进行数据可视化的强大工具。下面将提供详细的步骤来使用数据透视表进行数据可视化。**步骤一:准备数据**首先,确保你有一个包含所需数据的Excel表格。数据应该按照一定的结构和格式组织,例如,每列是一个特定的字段,每行是一个数据记录。**步......
  • 无涯教程-ASP.NET Core - Razor视图
    在本章中,无涯教程将讨论RazorViewStart。MVC中的Razor视图引擎有一个约定,即它将查找名称为_ViewStart.cshtml的任何文件,并在该文件中执行代码。ViewStart文件中的代码无法呈现到页面的HTML输出中,但可用于从各个视图内的代码块中删除重复的代码。在示例中,如果希望每个视图......