2017-05-31 5 views
0

だから、ここにコードがあることはできません。ここでユニティEditorGUI.PropertyFieldは完全に無効に配列またはList

// ReadOnlyAttribyte,cs 
public class ReadOnlyAttribute : PropertyAttribute 
{ 

} 

// ReadOnlyDrawer.cs 
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))] 
public class ReadOnlyDrawer : PropertyDrawer 
{ 
public override float GetPropertyHeight(SerializedProperty property, 
             GUIContent label) 
{ 
    return EditorGUI.GetPropertyHeight(property, label, true); 
} 

public override void OnGUI(Rect position, 
          SerializedProperty property, 
          GUIContent label) 
{ 
    GUI.enabled = false; 
    EditorGUI.PropertyField(position, property, label, true); 
    GUI.enabled = true; 
} 
} 

// test 
[System.Serializable] 
public class GridObjectData : ScriptableObject 
{ 
    [ReadOnly] 
    public int ID; 

[ReadOnly] 
public List<GridCell> Grid; 
} 

は、私たちは([読み取り専用]によって、すべてのマークを無効にすることができ、簡単なカスタム属性と属性の引き出しです)フィールドをGUIで無効にすることができます。リストの要素は無効になっていますが、リストのサイズはGUIではまだ有効です。どうすればそれを修正できますか?

ありがとうございます。

更新: それインスペクタでlooks

答えて

0

問題は、あなたの財産の引き出しがで各要素(プロパティ)をレンダリングするために使用されていることですリスト全体ではなく、リスト自体ではありません。

などです。すべてのプロパティは読み込み専用になりますが、リストオブジェクト自体は同じようにレンダリングされ、Unityが表示する方法は「サイズ」プロパティを表示することです。

+0

あなたの答えをありがとう!しかし、何ができるだろうか?何とかリスト全体を描くことを禁じることはできますか? – PaveL

+0

List または配列を使用していないが、それをラップする別のカスタムタイプを使用する以外は、何かできることに慣れていません。 –

+0

ありがとうございました!私は正しい答えとしてそれを取るよ! – PaveL

0

はこれを試してみてくださいどのように見てみてください。

public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) 
{ 
    bool previousEnableState = GUI.enabled; 
    GUI.enabled = false; 
    EditorGUI.PropertyField(position, property, label, true); 
    GUI.enabled = previousEnableState; 
} 
+0

これは機能しません。あなたは質問のポイントを逃したかもしれませんか?上記の説明写真を追加しました。見てください。 – PaveL

関連する問題