我做了一個基本的類
public class EditorSerializaion : Editor
{
public void DrawSerializedField(string name, string title)?
{
序列化屬性property。
property = serializedObject.FindProperty(name)。
EditorGUILayout.PropertyField(property, new GUIContent(title))。
serializedObject.ApplyModifiedProperties()。
}
而我想從自定義編輯器類中呼叫它
[]
public class BaiscComponentEditor : Editor
{
EditorSerializaion editorSerializaion;
public override void OnInspectorGUI()
{
editorSerializaion.DrawSerializedField("pos", "Posotion") 。
}
但它不會作業
(在DrawSerializedField函式中,serializedObject.FindProperty(name)回傳null,但是我在自定義檢查器中用相同的名字做了這個動作,它可以作業)
uj5u.com熱心網友回復:
你可以把serializedObject作為引數傳給DrawSerializedField。而且我不認為讓 EditorSerialization 從 Editor 延伸出來對你的情況有什么好處(你不能自動訪問其他 Editor 腳本的序列化物件,正如你所看到的)。如果我是你,我會把它變成一個靜態的實用類:
public static void DrawSerializedField(SerializedObject serializedObject, string name, string title)EditorSerializaion.DrawSerializedField(serializedObject, "pos", "Position");uj5u.com熱心網友回復:
解決方案是通過第一個物件的serializedObject,它在開始時對我不起作用,因為你需要創建一個新的物件實體。
public class EditorSerializaion : Editor
{ // This has changedpublic void DrawSerializedField(SerializedObject sb, string name, string title)?
{
序列化的屬性(SerializedProperty)。
//span>這已經改變了。
property = sb.FindProperty(name)。
EditorGUILayout.PropertyField(property, new GUIContent(title))。
//這已經改變了。
sb.ApplyModifiedProperties()。
}
[CustomEditor(typeof(BasicComponentScript))/span>]
public class BaiscComponentEditor : Editor
{
EditorSerializaion editorSerializaion;
//這是新的。
private void OnEnable()
{
editorSerializaion = new EditorSerializaion()。
}
public override void OnInspectorGUI()
{ //這已經改變了。
editorSerializaion.DrawSerializedField(serializedObject,"pos", "Posotion") 。
}
- 你也可以將
DrawSerializedField函式改為靜態,然后你就不需要創建它的實體了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329092.html
標籤:
