当前位置:网站首页>【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;
}
}
}
}
边栏推荐
猜你喜欢

MySQL installation to the last step in the write the configuration file failed?And after the installation steps

LED flashing on CY7C68013A

SSM框架简单介绍

【黄啊码】MySQL入门—3、我用select ,老板直接赶我坐火车回家去,买的还是站票

SQL 嵌套 N 层太长太难写怎么办?

sqlmap使用教程大全命令大全(图文)

"The C language games" mine clearance

深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。

How on one machine (Windows) to install two MYSQL database

Vulkan与OpenGL对比——Vulkan的全新渲染架构
随机推荐
mysql insert new field method
PowerCLi 通过自建PXE Server一键esxi7下批量部署常规New-VM
免安装版的Mysql安装与配置——详细教程
The first part of the R language
日志导致线程Block的这些坑,你不得不防
深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。
二维坐标工具API
[MySQL exercises] Chapter 2 Basic operations of databases and data tables
Visual Studio新功能出炉:低优先级构建
云服务器部署 Web 项目
ros little turtle drawing
Navicat new database
【C#】判断字符串中是否包含指定字符或字符串(Contains/IndexOf)
"C language" frog jumping steps recursion problem
奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!
MySQL 5.7详细下载安装配置教程
会话技术之Coookie && Session详解
Machine Learning - Notes and Implementation of Linear Regression, Logistic Regression Problems
关于yum源的配置及更新
Calculation example of matlab program iEEE9 node system for power flow calculation of AC-DC hybrid system based on alternate iteration method