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.rhkb.cn/news/505832.html

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

相关文章

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…

《机器学习》——支持向量机(SVM)

文章目录 什么是支持向量机&#xff1f;基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例&#xff08;1&#xff09;实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例&#xff08;2&#xff09;实例步骤导入数据…

高级软件工程-复习

高级软件工程复习 坐标国科大&#xff0c;下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚&#xff0c;Model, Controller, View各司什么职责明白BDD的User Story需要会写&#xff0c;SMART要求能…

使用 Maxwell 计算母线的电动势

三相短路事件的动力学 三相短路事件在电气系统中至关重要&#xff0c;因为三相之间的意外连接会导致电流大幅激增。如果管理不当&#xff0c;这些事件可能会造成损坏&#xff0c;因为它们会对电气元件&#xff08;尤其是母线&#xff09;产生极大的力和热效应。 短路时&#x…

Github出现复杂问题 无法合并 分支冲突太多 如何复原

目录 问题再现 解决思路 当然我所指的是在 main 分支开一个新的分支 删除本地文件夹 重新克隆 开一个新分支 切换分支 下载远程分支 文件覆盖 合并到主分支 ​​​​​​​问题再现 太复杂了 无法更改 编译器现状 全部崩溃了 无法更改 即使创建一个新的分支也无济于…

Jenkins触发器--在其他项目执行后构建

前言&#xff1a; jenkins中有多种触发器可用&#xff0c;可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释&#xff1a; Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

CI/CD 流水线

CI/CD 流水线 CI 与 CD 的边界CI 持续集成CD&#xff08;持续交付/持续部署&#xff09;自动化流程示例&#xff1a; Jenkins 引入到 CI/CD 流程在本地或服务器上安装 Jenkins。配置 Jenkins 环境流程设计CI 阶段&#xff1a;Jenkins 流水线实现CD 阶段&#xff1a;Jenkins 流水…

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

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

计算机网络之---物理层设备

什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备&#xff0c;它们主要处理数据的转换、信号的传输与接收&#xff0c;而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡&#xff08;N…

HTML实战课堂之简单的拜年程序

一、目录&#xff1a; &#xfffc;&#xfffc; 一、目录&#xff1a; 二、祝福 三&#xff1a;代码讲解 &#xff08;1&#xff09;详细解释&#xff1a; 1.HTML部分 2. CSS部分 三、运行效果&#xff08;随机截图&#xff09;&#xff1a; 四、完整代码&#xff1a; 二、祝福…

【数据库系统概论】数据库恢复技术

目录 11.1 事务的基本概念 事务的定义 事务的开始与结束 事务的ACID特性 破坏ACID特性的因素 11.2 数据库恢复概述 11.3 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 11.4 恢复的实现技术 如何建立冗余数据 数据转储 登记日志文件 11…

Ubuntu问题 -- 硬盘存储不够了, 如何挂载一个新的硬盘上去, 图文简单明了, 已操作成功

需求 我现在有一个ubuntu22.04操作系统的服务器, 但是当前硬盘不够用了, 我买了一个1T的SSD固态硬盘, 且已经安装在服务器上了, 我需要将这个硬盘挂载到当前ubuntu的某个目录上 开始 1. 确认新硬盘是否被系统识别 打开终端&#xff0c;输入以下命令查看系统识别到的硬盘&…

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念&#xff0c;我们用一张图来简单的理解一下&#xff1a; 在计算机语言当中&#xff1a; 换行符&#xff1a;\n 回车符&#xff1a;\r \r\n&#xff1a;回车换行 这时候有人可能会有疑问&#xff1a;我在学习C…

JavaSE——网络编程

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

CompletableFuture // todo

相比较所有代码都在主线程执行&#xff0c;使用Future的好处&#xff1a;利用服务器多核、并发的优势。 不足&#xff1a; 开启没有返回值的异步线程&#xff1a; 1、runAsync 使用lambda表达式&#xff1a; 开启有返回值的异步线程&#xff1a; 1、supplyAsync 异步任务中的…

RabbitMQ基本介绍及简单上手

&#xff08;一&#xff09;什么是MQ MQ&#xff08;message queue&#xff09;本质上是队列&#xff0c;满足先入先出&#xff0c;只不过队列中存放的内容是消息而已&#xff0c;那什么是消息呢&#xff1f; 消息可以是字符串&#xff0c;json也可以是一些复杂对象 我们应用场…

跟着逻辑先生学习FPGA-第六课 无源蜂鸣器发声实验

硬件平台&#xff1a;征战Pro开发板 软件平台&#xff1a;Vivado2018.3 仿真软件&#xff1a;Modelsim10.6d 文本编译器&#xff1a;Notepad 征战Pro开发板资料 链接:https://pan.baidu.com/s/1AIcnaGBpNLgFT8GG1yC-cA?pwdx3u8 提取码:x3u8 1 知识背景 1.1 蜂鸣器简介 蜂鸣…

TensorFlow Quantum快速编程(高级篇)

五、实战:量子分类器应用 5.1 数据准备 在实战构建量子分类器时,数据准备是基石环节。选用鸢尾花数据集,这一经典数据集在机器学习领域应用广泛,其涵盖了三种鸢尾花品种的样本,每个样本包含花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征。鉴于本次构建二分类量子分类…

Mysql进阶篇

一&#xff1a;存储引擎 二&#xff1a;索引 2.1 索引概述 索引&#xff08;index&#xff09;帮助mysql高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&…