当前位置:网站首页>【Unity】编辑器扩展-02-拓展Hierarchy视图
【Unity】编辑器扩展-02-拓展Hierarchy视图
2022-07-31 07:52:00 【韩天衣】
【Unity】编辑器扩展-02-拓展Hierarchy视图
拓展菜单
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_04 : MonoBehaviour
{
//Hierarchy视图菜单本质上是窗体上的GameObject下的子菜单,只需要注意路径即可,同理之前的也是一样Project视图菜单是Asset的子菜单,如果没有已知路径就会自建新根菜单
[MenuItem("GameObject/My Create/Cube",false,0)]
static void CreatePlayer()
{
GameObject.Instantiate(Resources.Load("Prefabs/Cube"));
}
}
拓展布局
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_05
{
[InitializeOnLoadMethod]
static void InitializeOnLoadMethod()
{
EditorApplication.hierarchyWindowItemOnGUI += delegate (int instanceID,Rect selectionRect)
{
if (Selection.activeObject && instanceID == Selection.activeObject.GetInstanceID())
{
float width = 50f;
float height = 15f;
selectionRect.x += (selectionRect.width - width);
selectionRect.width = width;
selectionRect.height = height;
if (GUI.Button(selectionRect, "click"))
{
Debug.LogFormat("click:{0}",Selection.activeObject.name);
}
}
};
}
}
重写菜单
我们已经知道了可以在原有菜单的基础上进行扩展,那么我们也可以完全抛弃原有菜单,完全自定义自己的菜单。
基本原理就是判断情况并陈列自己的菜单
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_06
{
[MenuItem("Window/Test/Player")]
static void Test()
{
}
[MenuItem("Window/Test/Enemy")]
static void Test1()
{
}
[MenuItem("Window/Test/UI")]
static void Test2()
{
}
[InitializeOnLoadMethod]
static void StartInitializeOnLoadMethod()
{
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
}
static void OnHierarchyGUI(int instanceID,Rect selectionRect)
{
if (Event.current != null && selectionRect.Contains(Event.current.mousePosition) && Event.current.button == 1)
{
GameObject selectedGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
if (selectedGameObject)
{
Vector2 mousePosition = Event.current.mousePosition;
EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x,mousePosition.y,0,0),"Window/Test",null);
Event.current.Use();
}
}
}
}
覆盖菜单
我们还可以重写系统自带的菜单行为。例如,我觉得Unity创建的Image组件不好,那么可以复写他的行为。
创建Image组件时,会自动勾选RaycastTarget。如果图片不需要处理点击事件,则带来了额外开销。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
public class Script_07
{
[MenuItem("GameObject/UI/Image")]
static void CreateImage()
{
if (Selection.activeTransform)
{
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
Image image = new GameObject("Image").AddComponent<Image>();
image.raycastTarget = false;
image.transform.SetParent(Selection.activeTransform,false);
Selection.activeTransform = image.transform;
}
}
}
}
边栏推荐
- Pygame Surface对象
- [MySQL exercises] Chapter 2 Basic operations of databases and data tables
- Vulkan与OpenGL对比——Vulkan的全新渲染架构
- 【MySQL中auto_increment有什么作用?】
- SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
- [Mini Program Project Development--Jingdong Mall] Custom Search Component of uni-app (Middle)--Search Suggestions
- 【idea 报错】 无效的目标发行版:17 的解决参考
- SQL 嵌套 N 层太长太难写怎么办?
- Failure scenarios of @Transactional annotations
- SSM框架简单介绍
猜你喜欢
随机推荐
【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
[Interview: Concurrency 38: Multithreading: Thread Pool] Basic concepts of the ThreadPoolExecutor class
如何使用mysql binlog 恢复数据
[MySQL exercises] Chapter 4 · Explore operators in MySQL with kiko
The torch distributed training
MySQL table creation statement_Three commonly used MySQL table creation statements
日志导致线程Block的这些坑,你不得不防
Reimbursement Process | By Tianfang
【MySQL中auto_increment有什么作用?】
[PSQL] SQL Basic Course Reading Notes (Chapter1-4)
How to upgrade nodejs version
二维坐标工具API
MySQL 5.7详细下载安装配置教程
Ubuntu22.04安装mysql
torch分布式训练
vscode输出中文乱码问题
Read Elephant Swap in one article, why does it bring such a high premium to ePLATO?
力扣 593. 有效的正方形
【云原生与5G】微服务加持5G核心网
实用生物信息学2:多组学数据整合和挖掘