2017-05-04 47 views
0
public List<string> dialogueLines = new List<string>(); 
public string npcName; 

我想在檢查器中看到它們,因爲後來在腳本中爲這些變量賦值,但我不希望用戶在遊戲運行時能夠更改檢查器中的值。我不想將它們隱藏在檢查員中,只是爲了讓用戶無法更改它們。如何禁用腳本頂部的變量,並在代碼的其餘部分使用它們?

+2

呃,用戶將不會在發佈的版本中看到檢查員......您在這裏關注什麼?或者你編寫自己的檢查器來修改序列化變量? – Serlite

回答

1

您希望只能通過編輯器讀取變量。關閉你正在尋找的東西是CustomPropertyDrawer,它可以用來製作一個自定義的編輯器屬性。在Unity論壇上可以找到example

using System.Collections.Generic; 
using UnityEditor; 
using UnityEngine; 


public class ReadOnlyAttribute : PropertyAttribute 
{ 

} 

[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; 
    } 
} 

測試:

可以使用ReadOnly屬性,使之成爲只讀變量。

public class Test : MonoBehaviour 
{ 
    [ReadOnly] 
    public List<string> dialogueLines; 

    [ReadOnly] 
    public string npcName; 
} 

它運作良好。唯一的問題是使用列表/數組時,大小仍然可以更改,但List/Array中的項目/元素不能更改。

相關問題