Не сохраняется значение в инспекторе EditorGUILayout.IntField
У меня есть ScriptableObject для создания уровней с кастомными полями и есть скрипт Editor где задаются кастомные поля в ассетах созданных через ScriptableObject.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
[CustomEditor(typeof(RulesetTemplate))]
public partial class RulesetTemplateEditor : Editor
{
[SerializeField] public int levelIndex;
public override void OnInspectorGUI()
{
GemsRules();
EditorGUILayout.Space();
MainRules();
EditorGUILayout.Space();
BonusRules();
levelIndex = EditorGUILayout.IntField("Level Index", levelIndex);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[CreateAssetMenu(menuName = "3Match/Ruleset")]
public class RulesetTemplate : ScriptableObject {
public Character player;
public List<Character> enemies;
public int levelIndex;
Проблема заключается в том, что мне нужно присвоить значение levelIndex в инспекторе, но значение сбрасывается на 0 как только я переключаюсь на другой объект или на другое поле. Что я делаю не так?

Ответы (1 шт):
[SerializeField] public int levelIndex; в Editor? Это вам не MonoBehaviour или ScriptableObject, это инструкция к отрисовке.
Никакой связи между levelIndex в RulesetTemplateEditor и levelIndex в RulesetTemplate нет.
Вы можете получить данные о поле отрисовываемого объекта через serializedObject.FindProperty();.
Почитайте хотя бы базовую документацию для начала, там не так уж много букв.
Custom Editors пример кода: C# Example (LookAtPointEditor.cs) (первый)