Open LoS-Light opened 5 years ago
I also noticed the same thing when these structs and array elements contain ScriptableObjects.
Here are several tests I've done:
#LIST_ALL_ARRAYS
and #EDIT_ALL_SCRIPTABLES
are uncommented#LIST_ALL_ARRAYS
is uncommentedI've also noticed that if a ScriptableObject contains classes which contain ScriptableObjects, the classes' ScriptableObjects are not editable.
Solution I made a new PropertyAttribute called NonEditScriptableProperty and added the new header into any child ScriptableObject fields of a ScriptableObject
public class NonEditScriptableAttribute : PropertyAttribute { }
And edited this in ReorderableArrayInspector.cs starting from line 367
:
#if EDIT_ALL_SCRIPTABLES
bool makeEditable = !iterProp.HasAttribute<NonEditScriptableAttribute>();
#else
bool makeEditable = iterProp.HasAttribute<EditScriptableAttribute>();
#endif
The logic in play here is to set makeEditable to false if a field has the NonEditScriptable attribute. Add this attribute to any inner ScriptableObjects and you should notice that the lag is gone. I have not tested on large Lists of ScriptableObjects.
Example:
[SubjectNerd.Utilities.NonEditScriptable]
[Tooltip("A un-editable ScriptableObject")]
public MyScriptableObject myScriptableObject;
Hope this helps! @LoS-Light @ChemiKhazi
Thank you very much.
mages-gamedev notifications@github.com於 2019年2月20日 週三,22:48寫道:
I also noticed the same thing.
Here are several tests I've done:
- ScriptableObject containing other child ScriptableObject fields will lag if both #LIST_ALL_ARRAYS and #EDIT_ALL_SCRIPTABLES are uncommented
- ScriptableObject containing other child ScriptableObject fields will not lag if only #LIST_ALL_ARRAYS is uncommented
Solution I made a new PropertyAttribute called NonEditScriptableProperty and added the new header into any child ScriptableObject fields of a ScriptableObject
public class NonEditScriptableAttribute : PropertyAttribute { }
And edited this in ReorderableArrayInspector.cs starting from line 367:
if EDIT_ALL_SCRIPTABLES
bool makeEditable = !iterProp.HasAttribute<NonEditScriptableAttribute>();
else
bool makeEditable = iterProp.HasAttribute<EditScriptableAttribute>();
endif
Example:
[SubjectNerd.Utilities.NonEditScriptable] [Tooltip("A un-editable ScriptableObject")]public MyScriptableObject myScriptableObject;
Hope this helps! @LoS-Light https://github.com/LoS-Light @ChemiKhazi https://github.com/ChemiKhazi
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/SubjectNerd-Unity/ReorderableInspector/issues/12#issuecomment-465607590, or mute the thread https://github.com/notifications/unsubscribe-auth/AZKcNcPnf_PC89DKn25G34DntR23pclQks5vPWBIgaJpZM4Z0w74 .
Unity editor is very slow if reorder List has large struct and large array elements.