Я не верю, что вы можете скрыть переменную, унаследованную от базового класса, любым простым способом. Если вы действительно хотите, чтобы свойство отображалось только в базовом инспекторе, но было скрыто в унаследованном инспекторе классов, вам, вероятно, нужно написать собственный инспектор. Я позволил себе написать сценарий редактора, который позволяет скрывать свойства в инспекторе по имени.
Чтобы применить его к своей собственной панели инспектора, вы можете использовать созданный мной вспомогательный класс.
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System;
public static class EditorHelper
{
public static List<SerializedProperty> GetExposedProperties(SerializedObject so, IEnumerable<string> namesToHide = null)
{
if (namesToHide == null) namesToHide = new string[] { };
IEnumerable<FieldInfo> componentFields = so.targetObject.GetType().GetFields();
List<SerializedProperty> exposedFields = new List<SerializedProperty>();
foreach (FieldInfo info in componentFields)
{
bool displayInInspector = info.IsPublic && !Attribute.IsDefined(info, typeof(HideInInspector));
displayInInspector = displayInInspector || (info.IsPrivate && Attribute.IsDefined(info, typeof(SerializeField)));
displayInInspector = displayInInspector && !namesToHide.Contains(info.Name);
if (displayInInspector){
SerializedProperty prop = so.FindProperty(info.Name);
if(prop != null)
exposedFields.Add(prop);
}
}
return exposedFields;
}
}
Затем в вашем проекте Unity создайте папку с именем «Editor» и поместите в нее этот скрипт. Единственные изменения, которые вам нужно сделать, - это изменить «MyCustomScript» на имя вашего класса. Затем в методе OnEnable измените список скрытых свойств, включив в него имена всех свойств, которые вы хотите скрыть.
using UnityEditor;
using System.Collections.Generic;
[CustomEditor(typeof(MyCustomScript))]
public class MyCustomScriptEditor : Editor
{
private List<SerializedProperty> properties;
private void OnEnable()
{
string[] hiddenProperties = new string[]{"SomeString2"}; //fields you do not want to show go here
properties = EditorHelper.GetExposedProperties(this.serializedObject,hiddenProperties);
}
public override void OnInspectorGUI()
{
//base.OnInspectorGUI(); - (standard way to draw base inspector)
//We draw only the properties we want to display here
foreach (SerializedProperty property in properties)
{
EditorGUILayout.PropertyField(property,true);
}
serializedObject.ApplyModifiedProperties();
}
}
Надеюсь, это поможет.