Как и заголовок, я не создал пользовательский инспектор для ScriptableObject и, по-моему, большинство ответов использует SetDirty (объект), но он не работает. Когда я изменяю любой код в проекте и Unity проведет рефакторинг кода C #, некоторые из объектов ScriptableObject будут отображаться на панели «Инспектор», не все SO отображаются, но частично отображаются Панель проекта, панель инспектора не имеет ничего;

Как вы можете видеть, MouseModuleData не отображается, который был создан в последний раз, когда я открывал Unity. MouseModuleData1 создается с этого времени, поэтому я думаю, что если есть проблема с моей структурой данных.
/// <summary>
/// Base Class of Module Data
/// </summary>
public abstract class PitchModuleBaseData : ScriptableObject, IEnumerable
{
public abstract IEnumerator GetEnumerator();
}
/// <summary>
/// Face Module Data
/// </summary>
[System.Serializable, CreateAssetMenu(fileName = "MouseModuleData", menuName = "AvatarData/MouseModuleData")]
public class MouthModuleData : PitchModuleBaseData
{
public BoneData MouthCornerLeft;
public BoneData MouthCornerRight;
public BoneData LeapUp;
public BoneData LeapMiddle;
public BoneData LeapDown;
public BoneData MouseRoot;
public MouthModuleData()
{
MouthCornerLeft = new BoneData(PitchFaceConst.Mouth_CornerL, PitchFaceConst.Mouth_CornerR);
MouthCornerRight = new BoneData(PitchFaceConst.Mouth_CornerR, PitchFaceConst.Mouth_CornerL);
LeapDown = new BoneData(PitchFaceConst.Mouth_LeapDown);
LeapMiddle = new BoneData(PitchFaceConst.Mouth_LeapMiddle);
LeapUp = new BoneData(PitchFaceConst.Mouth_LeapUp);
MouseRoot = new BoneData(PitchFaceConst.Mouth_Root);
}
public override IEnumerator GetEnumerator()
{
BoneData[] arr = new BoneData[6];
arr[0] = MouthCornerLeft;
arr[1] = MouthCornerRight;
arr[2] = LeapUp;
arr[3] = LeapDown;
arr[4] = MouseRoot;
arr[5] = LeapMiddle;
return new DataEnumerator(arr);
}
}
Итак, я сделал тест; Я создал данные, подобные приведенным выше.
public abstract class ABData : ScriptableObject, IEnumerable
{
public abstract IEnumerator GetEnumerator();
}
[System.Serializable, CreateAssetMenu(fileName = "TestData", menuName = "Create/TestData")]
public class TestData : ABData
{
public TestData()
{
data = new BoneData();
Middle = new BoneData(PitchFaceConst.Eye_Mid);
Left = new BoneData(PitchFaceConst.Eye_Left, PitchFaceConst.Eye_Right);
Right = new BoneData(PitchFaceConst.Eye_Right, PitchFaceConst.Eye_Left);
EyeLeft1 = new BoneData(PitchFaceConst.Eye_L1, PitchFaceConst.Eye_R1);
EyeLeft2 = new BoneData(PitchFaceConst.Eye_L2, PitchFaceConst.Eye_R2);
EyeLeft3 = new BoneData(PitchFaceConst.Eye_L3, PitchFaceConst.Eye_R3);
EyeLeft4 = new BoneData(PitchFaceConst.Eye_L4, PitchFaceConst.Eye_R4);
EyeRight1 = new BoneData(PitchFaceConst.Eye_R1, PitchFaceConst.Eye_L1);
EyeRight2 = new BoneData(PitchFaceConst.Eye_R2, PitchFaceConst.Eye_L2);
EyeRight3 = new BoneData(PitchFaceConst.Eye_R3, PitchFaceConst.Eye_L3);
EyeRight4 = new BoneData(PitchFaceConst.Eye_R4, PitchFaceConst.Eye_L4);
}
public BoneData data;
public BoneData Middle;
public BoneData Left;
public BoneData Right;
public BoneData EyeLeft1;
public BoneData EyeLeft2;
public BoneData EyeLeft3;
public BoneData EyeLeft4;
public BoneData EyeRight1;
public BoneData EyeRight2;
public BoneData EyeRight3;
public BoneData EyeRight4;
public override IEnumerator GetEnumerator()
{
throw new System.NotImplementedException();
}
}
Тогда позвольте мне сойти с ума, что-то случилось. TheTestData показывается как обычно Независимо от того, открыт он снова или нет, он работает так же, как обычная ОС.

Пожалуйста, помогите мне, дайте мне встать на правильный путь.