Не сохраняется значение в инспекторе 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 шт):

Автор решения: Yaroslav

[SerializeField] public int levelIndex; в Editor? Это вам не MonoBehaviour или ScriptableObject, это инструкция к отрисовке.

Никакой связи между levelIndex в RulesetTemplateEditor и levelIndex в RulesetTemplate нет.

Вы можете получить данные о поле отрисовываемого объекта через serializedObject.FindProperty();.

Почитайте хотя бы базовую документацию для начала, там не так уж много букв.

Custom Editors пример кода: C# Example (LookAtPointEditor.cs) (первый)

→ Ссылка