17.EditorGUIUtility区域鼠标指针

17.EditorGUIUtility-指定区域使用对应鼠标指针


17.1 知识点

指定区域使用对应鼠标指针

AddCursorRect(Rect position, MouseCursor mouse);

MouseCursor鼠标光标类型枚举
Arrow 普通指针箭头
Text 文本文本光标
ResizeVertical 调整大小垂直调整大小箭头
ResizeHorizontal 调整大小水平调整大小箭头
Link 带有链接徽章的链接箭头
SlideArrow 滑动箭头带有小箭头的箭头,用于指示在数字字段处滑动
ResizeUpRight 调整大小向上向右调整窗口边缘的大小
ResizeUpLeft 窗口边缘为左
MoveArrow 带有移动符号的箭头旁边用于场景视图
RotateArrow 旁边有用于场景视图的旋转符号
ScaleArrow 旁边有用于场景视图的缩放符号
ArrowPlus 旁边带有加号的箭头
ArrowMinus 旁边带有减号的箭头
Pan 用拖动的手拖动光标进行平移
Orbit 用眼睛观察轨道的光标
Zoom 使用放大镜进行缩放的光标
FPS 带眼睛的光标和用于FPS导航的样式化箭头键
CustomCursor 当前用户定义的光标
SplitResizeUpDown 向上-向下调整窗口拆分器的大小箭头
SplitResizeLeftRight窗口拆分器的左-右调整大小箭头

private void OnGUI()
{
    EditorGUI.DrawRect(new Rect(0, 180, 100, 100), Color.green);
    EditorGUIUtility.AddCursorRect(new Rect(0, 180, 100, 100), MouseCursor.FPS);
}

鼠标移动到绿色区域会变指针样式


17.2 知识点代码

Lesson17_EditorGUIUtility_指定区域使用对应鼠标指针

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson17_EditorGUIUtility_指定区域使用对应鼠标指针 : MonoBehaviour
{
    void Start()
    {
        #region 知识点 指定区域使用对应鼠标指针

        //  AddCursorRect(Rect position, MouseCursor mouse);

        //  MouseCursor鼠标光标类型枚举
        //  Arrow	            普通指针箭头
        //  Text                文本文本光标
        //  ResizeVertical      调整大小垂直调整大小箭头
        //  ResizeHorizontal    调整大小水平调整大小箭头
        //  Link                带有链接徽章的链接箭头
        //  SlideArrow          滑动箭头带有小箭头的箭头,用于指示在数字字段处滑动
        //  ResizeUpRight       调整大小向上向右调整窗口边缘的大小
        //  ResizeUpLeft        窗口边缘为左
        //  MoveArrow           带有移动符号的箭头旁边用于场景视图
        //  RotateArrow         旁边有用于场景视图的旋转符号
        //  ScaleArrow          旁边有用于场景视图的缩放符号
        //  ArrowPlus           旁边带有加号的箭头
        //  ArrowMinus          旁边带有减号的箭头
        //  Pan                 用拖动的手拖动光标进行平移
        //  Orbit               用眼睛观察轨道的光标
        //  Zoom                使用放大镜进行缩放的光标
        //  FPS                 带眼睛的光标和用于FPS导航的样式化箭头键
        //  CustomCursor        当前用户定义的光标
        //  SplitResizeUpDown   向上-向下调整窗口拆分器的大小箭头
        //  SplitResizeLeftRight窗口拆分器的左-右调整大小箭头

        #endregion
    }
}

MyEditorGUIUtilityLearnWindow

using System;
using UnityEditor;
using UnityEngine;

public class MyEditorGUIUtilityLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorGUIUtilityLearnWindow")]
    private static void OpenMyEditorGUIUtilityLearnWindow()
    {
        MyEditorGUIUtilityLearnWindow win =
            EditorWindow.GetWindow<MyEditorGUIUtilityLearnWindow>("EditorGUIUtility学习面板");
        //win.titleContent = new GUIContent("EditorGUIUtility学习面板");
        win.Show();
    }

    #region Lesson14_EditorGUIUtility_资源加载

    private Texture img;
    private Texture img2;

    #endregion

    #region Lesson15_EditorGUIUtility_搜索框查询对象选中提示

    private Texture img3;

    #endregion

    private void OnGUI()
    {
        #region Lesson14_EditorGUIUtility_资源加载

        //加载资源(如果资源不存在返回null)
        if (GUILayout.Button("加载编辑器图片资源"))
            img = EditorGUIUtility.Load("head.png") as Texture;
        if (img != null)
            GUI.DrawTexture(new Rect(0, 50, 160, 90), img);

        //加载资源(如果资源不存在会直接报错)
        if (GUILayout.Button("加载编辑器图片资源(如果资源不存在会直接报错)"))
            img2 = EditorGUIUtility.LoadRequired("head.png") as Texture;
        if (img2 != null)
            GUI.DrawTexture(new Rect(0, 150, 160, 90), img2);

        #endregion

        #region Lesson15_EditorGUIUtility_搜索框查询对象选中提示

        //搜索框查询
        if (GUILayout.Button("打开搜索框查询窗口"))
        {
            EditorGUIUtility.ShowObjectPicker<Texture>(null, true, "head", 0);
        }

        if (Event.current.commandName == "ObjectSelectorUpdated")
        {
            img3 = EditorGUIUtility.GetObjectPickerObject() as Texture;
            if (img3 != null)
                Debug.Log(img3.name);
        }
        else if (Event.current.commandName == "ObjectSelectorClosed")
        {
            img3 = EditorGUIUtility.GetObjectPickerObject() as Texture;
            if (img3 != null)
                Debug.Log("窗口关闭 - " + img3.name);
        }


        //对象选中提示提示
        if (GUILayout.Button("高亮选中对象"))
        {
            if (img3 != null)
                EditorGUIUtility.PingObject(img3);
        }

        #endregion

        #region Lesson16_EditorGUIUtility_窗口事件传递坐标转换

        //窗口事件传递
        if (GUILayout.Button("传递事件"))
        {
            //声明事件
            Event e = EditorGUIUtility.CommandEvent("韬老狮的事件");
            MyEditorGUILearnWindow win = EditorWindow.GetWindow<MyEditorGUILearnWindow>();
            win.SendEvent(e);
        }

        //坐标转换
        if (GUILayout.Button("坐标转换测试"))
        {
            Vector2 v = new Vector2(10, 10);

            Vector2 screenPos = EditorGUIUtility.GUIToScreenPoint(v);

            GUI.BeginGroup(new Rect(10, 10, 100, 100));
            //转换函数 如果包裹在布局相关函数中 那么位置要加上布局的偏移 再进行转换
            Vector2 screenPos2 = EditorGUIUtility.GUIToScreenPoint(v);
            GUI.EndGroup();

            Debug.Log("GUI:" + v + "Screen:" + screenPos + "布局内坐标:" + screenPos2);
        }

        #endregion

        #region Lesson17_EditorGUIUtility_指定区域使用对应鼠标指针

        EditorGUI.DrawRect(new Rect(0, 180, 100, 100), Color.green);
        EditorGUIUtility.AddCursorRect(new Rect(0, 180, 100, 100), MouseCursor.FPS);

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏