Unity自定义编辑器:基于枚举类型动态显示属性


1.参考链接

2.应用 target并设置多选编辑 添加[CanEditMultipleObjects]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;[CustomEditor(typeof(LightsState))]
[CanEditMultipleObjects]
public class TestInspector : Editor
{private SerializedObject obj;private LightsState lightsState;private SerializedProperty equipMentId_;private SerializedProperty powerType_;private SerializedProperty material;void OnEnable(){obj = new SerializedObject(target);material = obj.FindProperty("materialReplace");equipMentId_= obj.FindProperty("equipMentId");powerType_= obj.FindProperty("powerType");}public override void OnInspectorGUI(){obj.Update();EditorGUILayout.PropertyField(equipMentId_);EditorGUILayout.PropertyField(powerType_);lightsState = (LightsState)target;lightsState.lightType = (LightType)EditorGUILayout.EnumPopup("信号灯类型切换-", lightsState.lightType);if (lightsState.lightType == LightType.柜体指示灯){EditorGUILayout.PropertyField(material);}// 保存更改  obj.ApplyModifiedProperties();}
}
/*****************************************************************************  #SMARTDEVELOPERS#*  项目名称:#PROJECTNAME#*  描述: xxxxxxxxxxxxx*  版本: V1.00*  创建人: *****  创建时间: #CREATETIME#*  程序修改记录(最新的放在最前面):* <版本号> <修改日期>, <修改人员>: <修改功能概述>* **************************************************************************/
using Custom;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LightsState : MonoBehaviour
{[Header("设备id")]public string equipMentId;[Header("指示灯类型")]public LightType lightType;[Header("电源四个孔判断")]public ButtonPosition powerType;public Material materialReplace;//ledprivate Image image_light;private Color colorDefaultLed;//柜体private MeshRenderer meshrenderer;private Material materialdefault;private void Awake(){Init();}void Init(){switch (lightType){case LightType.页面Led信号灯:image_light = GetComponent<Image>();colorDefaultLed = image_light.color;break;case LightType.柜体指示灯:meshrenderer = GetComponent<MeshRenderer>();materialdefault = meshrenderer.material;break;default:break;}}private void OnEnable(){MessageCenter.Instance.RegisterListener((Enum)(MessageFanType.SignalState), InvokeMessage);MessageCenter.Instance.RegisterListener((Enum)(MessageFanType.Totalpower), InvokeMessageTotalpower);UpdateState();}void InvokeMessage(Message message){switch (powerType){case ButtonPosition.ShallowHoleOne:case ButtonPosition.CenterOne:if (PowerManagement.LeftPower == 1){//左侧总电源//---------------------SingleStateData singleStateData = (SingleStateData)message.Body;if (singleStateData.equipmentid == equipMentId){switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(singleStateData.state);break;case LightType.柜体指示灯:ExturedMaterialLight(singleStateData.state);break;default:break;}}}else{}break;case ButtonPosition.ShallowHoleTwo:case ButtonPosition.CenterTwo:if (PowerManagement.RightPower == 1){//右侧总电源//---------------------SingleStateData singleStateData = (SingleStateData)message.Body;if (singleStateData.equipmentid == equipMentId){switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(singleStateData.state);break;case LightType.柜体指示灯:ExturedMaterialLight(singleStateData.state);break;default:break;}}}else{}break;default:break;}}void InvokeMessageTotalpower(Message message){UpdateState();}/// <summary>/// 手动更新 /// </summary>public void UpdateState(){if (string.IsNullOrEmpty(equipMentId)){Debug.LogWarning("设备id未赋值:" + transform.name);return;}if (SystemDataSet.AllData_YX.ContainsKey(equipMentId)){switch (powerType){case ButtonPosition.ShallowHoleOne:case ButtonPosition.CenterOne:if(PowerManagement.LeftPower == 1){switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(SystemDataSet.AllData_YX[equipMentId].pointStatus);break;case LightType.柜体指示灯:ExturedMaterialLight(SystemDataSet.AllData_YX[equipMentId].pointStatus);break;default:break;}}else{//只做信号灯更新 不做改值switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(0);break;case LightType.柜体指示灯:ExturedMaterialLight(0);break;default:break;}}break;case ButtonPosition.ShallowHoleTwo:case ButtonPosition.CenterTwo:if (PowerManagement.RightPower == 1){switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(SystemDataSet.AllData_YX[equipMentId].pointStatus);break;case LightType.柜体指示灯:ExturedMaterialLight(SystemDataSet.AllData_YX[equipMentId].pointStatus);break;default:break;}}else{//只做信号灯更新 不做改值switch (lightType){case LightType.页面Led信号灯:ExturedLedLight(0);break;case LightType.柜体指示灯:ExturedMaterialLight(0);break;default:break;}}break;default:break;}}}/// <summary>/// led 灯/// </summary>void ExturedLedLight(int state){if (state==0){image_light.color = Color.cyan;}else{image_light.color = colorDefaultLed;}}/// <summary>/// 柜体灯/// </summary>void ExturedMaterialLight(int state){if (state == 0){meshrenderer.material = materialdefault;}else{if (materialReplace == null){Debug.LogError("信号灯替换材质未赋值!!!" + transform.name);}else{meshrenderer.material = materialReplace;}}}private void OnDisable(){MessageCenter.Instance.RemoveListener(MessageFanType.SignalState, InvokeMessage);MessageCenter.Instance.RemoveListener(MessageFanType.Totalpower, InvokeMessageTotalpower);}
}

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

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

相关文章

利用 Python 脚本批量创建空白 Markdown 笔记

文章目录 利用 Python 脚本批量创建空白 Markdown 笔记1 背景介绍2 需求描述3 明确思路4 具体实现4.1. 遍历 toc.md 文件&#xff0c;收集文件名和对应的文件内容4.2. 实现文件批量生成逻辑4.3. 补全缺失的工具函数4.4. 进一步补全工具函数中的工具函数 5 脚本运行6 注意事项 利…

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

2024-2029年中国毛绒玩具行业市场分析及发展前景预测报告

引言&#xff1a;重要性及市场增长趋势 在快节奏的现代生活中&#xff0c;毛绒玩具以其柔软触感和温馨陪伴&#xff0c;成为了许多人心灵的慰藉。它们不仅是儿童的忠实玩伴&#xff0c;更是成人世界里不可或缺的情感寄托。近年来&#xff0c;随着消费者情感需求的日益增长和个…

安装vue脚手架出现的一系列问题

安装vue脚手架出现的一系列问题 前言使用 npm 安装 vue/cli2.权限问题及解决方法一&#xff1a;可以使用管理员权限进行安装。方法二&#xff1a;更改npm全局安装路径 前言 由于已有较长时间未进行 vue 项目开发&#xff0c;今日着手准备开发一个新的 vue 项目时&#xff0c;在…

YARN WebUI 服务

一、WebUI 使用 与HDFS一样&#xff0c;YARN也提供了一个WebUI服务&#xff0c;可以使用YARN Web用户界面监视群集、队列、应用程序、服务、流活动和节点信息。还可以查看集群详细配置的信息&#xff0c;检查各种应用程序和服务的日志。 1.1 首页 浏览器输入http://node2.itc…

JavaSE——网络编程

一、InetAddress类 InetAddress是Java中用于封装IP地址的类。 获取本机的InetAddress对象&#xff1a; InetAddress localHost InetAddress.getLocalHost();根据指定的主机名获取InetAddress对象&#xff08;比如说域名&#xff09; InetAddress host InetAddress.getByNa…

互联网全景消息(10)之Kafka深度剖析(中)

一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…

Elastic-Job相关

文档参考视频&#xff1a;09_SpringBoot案例演示_哔哩哔哩_bilibili 一、Elastic-Job介绍 Elastic-Job 是一个轻量级、分布式的任务调度框架&#xff0c;旨在解决分布式环境下的定时任务调度问题。 1.1. Elastic-Job 的核心组件 Elastic-Job 是由多个核心组件构成的&#x…

【Linux】设备驱动中的ioctl详解

在Linux设备驱动开发中&#xff0c;ioctl&#xff08;输入输出控制&#xff09;是一个非常重要的接口&#xff0c;用于用户空间应用程序与内核空间设备驱动之间进行通信。通过ioctl&#xff0c;应用程序可以发送命令给设备驱动&#xff0c;控制设备的行为或获取设备的状态信息。…

再次梳理ISP的大致流程

前言&#xff1a; 随着智能手机的普及&#xff0c;相机与我们的生活越来越紧密相关。在日常生活中&#xff0c;我们只需要轻轻按下手机上的拍照按钮&#xff0c;就能记录下美好时刻。那么问题来了&#xff1a;从我们指尖按下拍照按钮到一张色彩丰富的照片呈现在我们面前&#x…

基于R语言森林生态系统的结构、功能与稳定性

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

nacos学习笔记(一)

1.前言 何为nacos&#xff0c;nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。可以说集注册中心&#xff0c;配置中心&#xff0c;服务管理于一起的平台。注册中心&#xff1a;相当于我们可以把服务注册到注册中心上&#xff0c;我们以后可以通过服…

logback日志

一、使用两个以上spring环境变量做三目操作 <springProperty name"application_name" scope"context" source"spring.application.name"/><springProperty name"trace_app_name" scope"context" source"sprin…

mysql和redis的最大连接数

平时我们要评估mysql和redis的最大连接数&#xff0c;可以选择好环境&#xff08;比如4核8G&#xff09;,定好压测方法&#xff08;没有索引的mysql单表&#xff0c;redis单key&#xff09;进行压测&#xff0c;评估其最大并发量。 也可以查看各大云厂商的规格进行评估。 mys…

QEMU通过OVS实现联网

这篇笔记也是记录了一下自己的辛酸历程&#xff0c;仅供有需要的人参考。 首先关于qemu虚拟机的搭建&#xff0c;这不多赘述了&#xff0c;大家应该都会&#xff0c;这里可以给大家提供一个链接和一些命令。 QEMU搭建X86_64 Ubuntu虚拟系统环境https://blog.csdn.net/m0_531…

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…

(五)ROS通信编程——参数服务器

前言 参数服务器在ROS中主要用于实现不同节点之间的数据共享&#xff08;P2P&#xff09;。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据&#xff0c;关…

攻防靶场(34):隐蔽的计划任务提权 Funbox1

目录 1. 侦查 1.1 收集目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址段 1.3 搜索目标网站 2. 初始访问 2.1 有效账户&#xff1a;默认账户 2.2 利用面向公众的应用 2.3 有效账户&#xff1a;默认账户 3. 权限提升 3.1 计划任务/作业&#xff1a;Cron 靶场…