当前位置: 首页 > news >正文

Unity工具—Inspector面板增加Rect Transform组件上下左右移动的工具

以下内容是根据Unity 2020.1.0f1版本进行编写的

Unity工具—Inspector面板增加Rect Transform组件上下左右移动的工具

  • 1、目的
  • 2、实现
  • 3、效果


1、目的

日常使用UGUI时,经常有需要把某个GameObject往上/下/左/右移动一个像素或10个像素的需求,每次改都要一个个选中然后改Pos的值,因此想写个小工具方便处理。

2、实现

本质上是写一个RectTransform类的Editor类,并继承自RectTransformEditor,难点在于RectTransformEditor是内部类,不能继承,需要用反射拿出来。
这个问题其实问AI就可以了,AI给出的答案也比较简单和清晰。

直接上完整代码:

using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;[CanEditMultipleObjects]
[CustomEditor(typeof(RectTransform),true)]
public class RectTransformExtend : Editor
{private Editor defaultEditor;  // 存储默认编辑器实例public RectTransformExtend (){}private void OnEnable(){// 通过反射创建默认RectTransformEditor实例Type rectTransformEditorType = Type.GetType("UnityEditor.RectTransformEditor, UnityEditor");if (rectTransformEditorType != null){defaultEditor = Editor.CreateEditor(targets, rectTransformEditorType);}}public override void OnInspectorGUI(){// 绘制默认的RectTransform界面if (defaultEditor != null){MethodInfo onInspectorGUI = defaultEditor.GetType().GetMethod("OnInspectorGUI", BindingFlags.Public | BindingFlags.Instance);onInspectorGUI?.Invoke(defaultEditor, null);}GUILayout.BeginVertical();GUILayout.BeginHorizontal();if (GUILayout.Button("↑10")){MovePos(new Vector3(0, 10, 0));}if (GUILayout.Button ("↑")){MovePos(new Vector3(0, 1, 0));}if (GUILayout.Button("↑20")){MovePos(new Vector3(0, 20, 0));}GUILayout.EndHorizontal ();GUILayout.BeginHorizontal ();if (GUILayout.Button("←10")){MovePos(new Vector3(-10, 0, 0));}if (GUILayout.Button ("←")){MovePos(new Vector3(-1, 0, 0));}if (GUILayout.Button ("→")){MovePos(new Vector3(1, 0, 0));}if (GUILayout.Button("→10")){MovePos(new Vector3(10, 0, 0));}GUILayout.EndHorizontal ();GUILayout.BeginHorizontal();if (GUILayout.Button("↓10")){MovePos(new Vector3(0, -10, 0));}if (GUILayout.Button ("↓")){MovePos(new Vector3(0, -1, 0));}if (GUILayout.Button("↓20")){MovePos(new Vector3(0, -20, 0));}GUILayout.EndHorizontal();GUILayout.EndVertical ();}public void MovePos(Vector3 vertor){foreach (var obj in targets){RectTransform rectTrans = (RectTransform)obj;rectTrans.localPosition = rectTrans.localPosition + vertor;Undo.RecordObject(obj, "move RectTransform 1px");EditorUtility.SetDirty(obj);}}
}

和上面说的一样,就是用反射获取到RectTransformEditor这个类,然后在OnInspectorGUI方法中添加所需的按钮和对应方法即可。我这里还支持了多选操作和撤销

3、效果

在这里插入图片描述

http://www.dtcms.com/a/318026.html

相关文章:

  • linux IO介绍
  • Android系统性能分析利器:深入解析Tracing框架
  • Dify+Nginx反向代理:80端口冲突的优雅解决方案
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • Mysql如何迁移数据库数据
  • mysql数据库基础操作
  • 每日任务day0806:小小勇者成长记之收获日
  • 在 Visual Studio Code 中免费使用 Gemini 2.5 Pro API
  • 滴滴招java开发
  • 利用DeepSeek改写并增强测试Duckdb和sqlite的不同插入方法性能
  • 虚幻GAS底层原理解剖四 (TAG)
  • Boosting 知识点整理:调参技巧、可解释性工具与实战案例
  • [Oracle] NVL()函数
  • 【概念学习】深度学习有何不同
  • 220降5V,30mA电流,墙壁开关和调光器应用场景WD5201
  • 【秋招笔试】2025.08.02-OPPO秋招第二套-第一题
  • Win10还未停更,对标iPad的教育版Win11也宣布停更了
  • Python爬虫 urllib 模块详细教程:零基础小白的入门指南
  • Pytest项目_day05(requests加入headers)
  • 项目中MySQL遇到的索引失效的问题
  • Conditional Modeling Based Automatic Video Summarization
  • Ubuntu20.04 离线安装 FFmpeg 静态编译包
  • 深度学习G5周:Pix2Pix理论与实战
  • Transformer模型及深度学习技术应用
  • 什么是 Kafka 中的消息?它由哪些部分组成
  • 高频面试点:深入理解 TCP 三次握手与四次挥手
  • mysql优化策略
  • qt qml实现电话簿 通讯录
  • [FBCTF2019]RCEService
  • apache-tomcat-11.0.9安装及环境变量配置