Unity 显示MeshRenderer的渲染层级

Unity 显示MeshRenderer的渲染层级

  • 前言
  • 源码
    • MeshRendererInspector
    • SkinnedMeshRendererInspector
  • 参考

前言

Mesh RendererSkinned Mesh Renderer组件默认不显示Order,找了个工具显示一下。
Skinned Mesh Renderer
Mesh Renderer

源码

下面两个代码放入Editor文件夹中

MeshRendererInspector

MeshRendererInspector.cs


using UnityEngine;
using UnityEditor;
using System.Reflection;
using System;
using UnityEditorInternal;[CustomEditor(typeof(MeshRenderer)), CanEditMultipleObjects]
public class MeshRendererInspector : Editor
{//Armazena Sorting Layer criadas no unityprivate string[] sortingLayerNames;//Orderprivate int sortingOrder;//Layerprivate int sortingLayer;//Objetos selecionadosprivate MeshRenderer[] renderer;//Se todos os objetos selecionado possuem os mesmos valoresprivate bool sortingLayerEqual;private bool sortingOrderEqual;void OnEnable(){//Cache de Sorting Layer criadas.sortingLayerNames = GetSortingLayerNames();//Recupera objetos selecionadosSystem.Object[] objects = serializedObject.targetObjects;//Armazena valores iniciaisMeshRenderer first = objects[0] as MeshRenderer;sortingOrder = first.sortingOrder;string layerName = first.sortingLayerName;sortingLayer = Mathf.Max(System.Array.IndexOf(sortingLayerNames, layerName), 0);//Castrenderer = new MeshRenderer[objects.Length];//Igualdade entre multiobjectssortingLayerEqual = true;sortingOrderEqual = true;for (int i = 0; i < objects.Length; i++){//Castrenderer[i] = objects[i] as MeshRenderer;//Verifica se todos os objetos possuem o mesmo valorif (renderer[i].sortingOrder != sortingOrder) sortingOrderEqual = false;if (renderer[i].sortingLayerName != layerName) sortingLayerEqual = false;}}public override void OnInspectorGUI(){base.OnInspectorGUI();EditorGUILayout.Space();/*** SORTING Layer**/EditorGUI.BeginChangeCheck();//UIEditorGUI.showMixedValue = !sortingLayerEqual;sortingLayer = EditorGUILayout.Popup(sortingLayer, sortingLayerNames);//Aplicar modificacoes e igualar valoresif (EditorGUI.EndChangeCheck()){foreach (MeshRenderer r in renderer){r.sortingLayerName = sortingLayerNames[sortingLayer];EditorUtility.SetDirty(r);}sortingLayerEqual = true;}/*** SORTING ORDER**/EditorGUI.BeginChangeCheck();//UIEditorGUI.showMixedValue = !sortingOrderEqual;sortingOrder = EditorGUILayout.IntField("Order in Layer", sortingOrder);//Aplicar modificacoes e igualar valoresif (EditorGUI.EndChangeCheck()){foreach (MeshRenderer r in renderer){r.sortingOrder = sortingOrder;EditorUtility.SetDirty(r);}sortingOrderEqual = true;}}public string[] GetSortingLayerNames(){Type t = typeof(InternalEditorUtility);PropertyInfo prop = t.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);return (string[])prop.GetValue(null, null);}}

SkinnedMeshRendererInspector

SkinnedMeshRendererInspector.cs

using UnityEngine;
using UnityEditor;
using System.Reflection;
using System;
using UnityEditorInternal;[CustomEditor(typeof(SkinnedMeshRenderer)), CanEditMultipleObjects]
public class SkinnedMeshRendererInspector : Editor
{//存储 Sorting Layerprivate string[] sortingLayerNames;//Orderprivate int sortingOrder;//Layerprivate int sortingLayer;//选中的对象private SkinnedMeshRenderer[] renderer;//所有选中对象是否具有相同的值private bool sortingLayerEqual;private bool sortingOrderEqual;void OnEnable(){//获取 Sorting LayersortingLayerNames = GetSortingLayerNames();//获取选中的对象System.Object[] objects = serializedObject.targetObjects;//存储初始值SkinnedMeshRenderer first = objects[0] as SkinnedMeshRenderer;sortingOrder = first.sortingOrder;string layerName = first.sortingLayerName;sortingLayer = Mathf.Max(System.Array.IndexOf(sortingLayerNames, layerName), 0);//转换renderer = new SkinnedMeshRenderer[objects.Length];//是否所有对象具有相同的值sortingLayerEqual = true;sortingOrderEqual = true;for (int i = 0; i < objects.Length; i++){//转换renderer[i] = objects[i] as SkinnedMeshRenderer;//检查所有对象是否具有相同的值if (renderer[i].sortingOrder != sortingOrder) sortingOrderEqual = false;if (renderer[i].sortingLayerName != layerName) sortingLayerEqual = false;}}public override void OnInspectorGUI(){base.OnInspectorGUI();EditorGUILayout.Space();/*** SORTING Layer**/EditorGUI.BeginChangeCheck();//UIEditorGUI.showMixedValue = !sortingLayerEqual;sortingLayer = EditorGUILayout.Popup(sortingLayer, sortingLayerNames);//应用修改和同步值if (EditorGUI.EndChangeCheck()){foreach (SkinnedMeshRenderer r in renderer){r.sortingLayerName = sortingLayerNames[sortingLayer];EditorUtility.SetDirty(r);}sortingLayerEqual = true;}/*** SORTING ORDER**/EditorGUI.BeginChangeCheck();//UIEditorGUI.showMixedValue = !sortingOrderEqual;sortingOrder = EditorGUILayout.IntField("Order in Layer", sortingOrder);//应用修改和同步值if (EditorGUI.EndChangeCheck()){foreach (SkinnedMeshRenderer r in renderer){r.sortingOrder = sortingOrder;EditorUtility.SetDirty(r);}sortingOrderEqual = true;}}public string[] GetSortingLayerNames(){Type t = typeof(InternalEditorUtility);PropertyInfo prop = t.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);return (string[])prop.GetValue(null, null);}
}

参考

Unity 3d : Expose the rendering order of MeshRenderer in the Unity3D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue的导入

import { onMounted, onUpdated, onUnmounted } from ‘vue’; 单一导出&#xff08;不使用 {}&#xff09;&#xff1a;通常用于导入vue组件 当一个模块只导出一个内容时&#xff0c;可以直接导入&#xff0c;无需使用 {}。多个导出&#xff08;使用 {}&#xff09;&#xff…

代码随想录day34 Java版

416. 分割等和子集 我们的目标是尝试从这些数字中选取一部分数字&#xff0c;使得它们的和恰好等于数组总和的一半。这相当于在背包容量为总和的一半的情况下&#xff0c;尝试装入物品&#xff0c;看是否能够恰好装满背包。 class Solution {public boolean canPartition(int…

Linux无分区表

前言 最近我在研究pve bcache &#xff0c;发现了bcache默认创建的分区bcache0默认的分区是MBR 也就是说&#xff0c;这个分区最大只能存2T数据&#xff0c;我硬盘是6T的&#xff0c;浪费了很多空间 解决 rootpve:~# fdisk /dev/bcache0 Welcome to fdisk (util-linux 2.38…

C++Qt学习——不用UI文件编程

在创建文件的时候不要选中Generate form这块 创建的文件如下图所示&#xff0c;比起之前的没有了form这一快 1、在mainwindow.h里面声明按钮对象 2、在mainwindow.cpp里实例化按钮 2.1、方法一 pushButton new QPushButton();pushButton->show(); 但是发现显示是分离的 2…

【spring】-多模块构建二-问题整理

1、bean注入问题 The injection point has the following annotations: - org.springframework.beans.factory.annotation.Autowired(requiredtrue) 解决1&#xff1a; 由于引入的bean类 不属于启动类的子模块下&#xff0c;需要在启动类手动声明扫描的类 也适用于公共子模…

【图文详解】Maven Helper插件解决Maven冲突

文章目录 插件问题解决过程 在面试中解决问题的能力和思路是考察的重点&#xff0c;面试官问会问我们有没有解决过maven冲突。以下造了一个maven冲突&#xff0c;手把手教学如何解决Maven冲突。 插件 插件在idea插件中搜索Maven Helper 问题 解决过程 根据上面日志知道是log…

触发器

触发器的用途1 利用触发器检查输入数据的合理性 利用触发器维护冗余数据查看触发器 一、为什么使用触发器 触发器&#xff08;TRIGGER&#xff09;是MySQL的与表的insert&#xff0c;delete&#xff0c;update语句相关的数据库对象之一&#xff0c;当表上出现特定事件时&#…

2024 遗传编程实战(一)基因实战

2024 遗传编程实战&#xff08;一&#xff09;基因实战 文章目录 2024 遗传编程实战&#xff08;一&#xff09;基因实战一、遗传编程实战介绍1、遗传编程简介2、遗传编程和进化论的关系3、遗传编程过程解释 二、基于遗传编程的例子1、实战题目介绍2、遗传算法的伪代码3、遗传实…

Vue中吸顶导航的实现

目录 1 前言 2 具体步骤 2.1 安装VueUse 2.2 吸顶导航组件中导入useScroll 2.3 在style中定义吸顶导航的两种状态 2.4 template中设置吸顶导航出现的时机 1 前言 本处使用VueUse更便捷的实现吸顶导航&#xff0c;具体内容及更多操作请看官网文档&#xff0c;如下&#x…

从键盘输入两个数,求它们的和并输出 从键盘输入三个数到a,b,c中,按公式值输出

别急别急&#xff0c;先看完 (从初学者出发&#xff0c;大佬勿喷&#xff0c;I am 小小蒟蒻&#xff09; 从键盘输入两个数&#xff0c;求它们的和并输出 作者 陈春晖 单位 浙江大学 本题目要求读入2个整数A和B&#xff0c;然后输出它们的和。 输入格式: 在一行中给出一…

微信小程序开发系列(三十)·小程序本地存储API·同步和异步的区别

目录 1. 同步API 1.1 getStorageSync存储API 1.2 removeStorageSync获取数据API 1.3 removeStorageSync删除 1.4 clearStorageSync清空 2. 异步API 2.1 setStorage存储API 2.2 getStorage获取数据API 2.3 removeStorage删除API 2.4 clearStorage清空 3. …

每天学习一个Linux命令之ifconfig

每天学习一个Linux命令之ifconfig 在Linux操作系统中&#xff0c;ifconfig命令是一个用来配置和显示网络接口的工具。它可以用来查看和修改网络接口的状态、IP地址、网关、子网掩码等信息。在本文中&#xff0c;我们将详细介绍ifconfig命令的使用方法和常用选项。 1. 命令语法…

Zookeeper搭建

目录 前言 初了解Zookeeper 搭建 准备 配置Zookeeper 前言 今天来介绍Zookeeper的搭建&#xff0c;其实Zookeeper的搭建很简单&#xff0c;但是为什么还要单独整一节呢&#xff0c;这就不得不先了解Zookeeper有什么功能了&#xff01;而且现在很火的框架也离不开Zookeepe…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

C语言入门学习 --- 6.指针

文章目录 第六章指针1.指针是什么&#xff1f;这里我们总结一下&#xff1a;问题&#xff1a;省流版&#xff1a; 2.指针和指针类型2.1指针-整数2.2指针的解引用 3.野指针3.1野指针成因3.2如何规避野指针 4.指针运算4.1指针-整数4.2指针-指针4.3指针的关系运算标准规定&#xf…

剑指offer面试题34 丑数

考察点 空间换时间提效知识点 题目 分析 这里面其实用到了一点点的数学知识&#xff0c;丑数的定义是只包含2&#xff0c;3&#xff0c;5因子的数。现在要求第1500个丑数&#xff0c;最简单的办法就是从数字1开始遍历&#xff0c;依次判断每个数字是不是丑数&#xff0c;如果…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)

摘要&#xff1a;开发高效的木材表面缺陷检测系统对于提升木材加工行业的质量控制和生产效率至关重要。本篇博客详细介绍了如何运用深度学习技术构建一个木材表面缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统采用了强大的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6…

升级Windows 11 专业版升级密钥永久使用

Windows 11 专业版是 Windows 11 的商业版本&#xff0c;专为中小型企业和组织设计。它提供了一些家庭版和专业版所没有的功能&#xff0c;例如&#xff1a; 安全性: 设备加密&#xff1a;使用 BitLocker 或 BitLocker 设备加密保护您的设备和数据。身份验证&#xff1a;使用…

VUE_nuxt启动只能通过localhost访问,ip访问不到:问题解决

修改项目根目录下的 package.json "config": {"nuxt": {"host": "0.0.0.0","port": "3000"} } 这样项目启动后就可以通过ip进行访问了

保研复习数据结构记(7)--散列查找(哈希表)

哈希表有什么特点&#xff1f;数据元素的关键字与其存储地址直接相关&#xff08;通过哈希函数相关&#xff09;&#xff0c;典型的用空间换时间的算法处理冲突的方法&#xff1f;拉链法&#xff08;链地址法&#xff09;&#xff0c;开放定址法&#xff0c;再散列法什么是查找…