1.参考链接
2.应用 target并设置多选编辑 添加[CanEditMultipleObjects]
cs
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();
}
}
cs
/****************************************************************************
* #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;
//led
private 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);
}
}