C# 无法保存编辑器脚本的变量
大家好,我正试图保存一个自定义编辑器值的字段,它被设置在一个组合框中,我从互联网上获得了一个代码,但我意识到组合框中所做的更改根本不会保存,我尝试使用“保存”按钮,我尝试创建serializedfield,但我对C#和unity是新手。谢谢你的来访,祝你度过愉快的一天C# 无法保存编辑器脚本的变量,c#,unity3d,C#,Unity3d,大家好,我正试图保存一个自定义编辑器值的字段,它被设置在一个组合框中,我从互联网上获得了一个代码,但我意识到组合框中所做的更改根本不会保存,我尝试使用“保存”按钮,我尝试创建serializedfield,但我对C#和unity是新手。谢谢你的来访,祝你度过愉快的一天 using UnityEditor; using UnityEngine; [CustomEditor(typeof(DoorScript))] [System.Serializable]
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(DoorScript))]
[System.Serializable]
public class ButtonDropDownMenu : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
DoorScript script = (DoorScript)target;
GUIContent arrayLabel = new GUIContent("Color");
script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
/*serializedObject.FindProperty("index").intValue = script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
var properlyToSave = serializedObject.FindProperty("Index");
EditorGUILayout.PropertyField(properlyToSave);
serializedObject.ApplyModifiedProperties();¨*/
}
}
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;
public class DoorScript : MonoBehaviour
{
private SpriteRenderer myColor;
public Light2D doorLight;
public Light2D doorPLight;
[HideInInspector][SerializeField]
public int index = 0;
[HideInInspector][SerializeField]
public string[] options = new string[]
{
"White",
"Red",
"Blue",
"Cyan"
};
private void Awake()
{
myColor = GetComponent<SpriteRenderer>();
ColorChanger();
}
void Start()
{
}
private void ColorChanger()
{
if (index <= 0)
{
DoorsLights(Color.grey);
}
else if (index == 1)
{
DoorsLights(Color.red);
}
else if (index == 2)
{
DoorsLights(Color.blue);
}
else if (index >= 3)
{
DoorsLights(Color.green);
}
}
private void DoorsLights(Color color)
{
myColor.color = color;
doorLight.color = color;
doorPLight.color = color;
}
}
我曾经
index.intValue = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
如果要从自定义编辑器更新属性,则需要使用
SerializedProperty
。像这样:
[CustomEditor(typeof(DoorScript))]
public class ButtonDropDownMenu : Editor
{
SerializedProperty index;
void OnEnable()
{
index = serializedObject.FindProperty("index");
}
...
然后确保您正在调用serializedObject.ApplyModifiedProperties()代码>完成后:
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
...
index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
...
serializedObject.ApplyModifiedProperties();
}
希望这有帮助!如果这不起作用,请告诉我当您取消对serializedObject.ApplyModifiedProperties()的注释时,它是否仍然没有保存代码>。。。这一行应该是必要的。我会再试一次,做一分钟的编辑:雪人工作得不好吗?我做了一个更改,而不是'code'index=EditorGUILayout.Popup(arrayLabel,script.index,script.options);'代码'很高兴!顺便说一句,你可以使用`来正确格式化'代码',我的符号按钮在键盘左上角
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
...
index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
...
serializedObject.ApplyModifiedProperties();
}