0
public List<string> dialogueLines = new List<string>();
public string npcName;
我想在檢查器中看到它們,因爲後來在腳本中爲這些變量賦值,但我不希望用戶在遊戲運行時能夠更改檢查器中的值。我不想將它們隱藏在檢查員中,只是爲了讓用戶無法更改它們。如何禁用腳本頂部的變量,並在代碼的其餘部分使用它們?
public List<string> dialogueLines = new List<string>();
public string npcName;
我想在檢查器中看到它們,因爲後來在腳本中爲這些變量賦值,但我不希望用戶在遊戲運行時能夠更改檢查器中的值。我不想將它們隱藏在檢查員中,只是爲了讓用戶無法更改它們。如何禁用腳本頂部的變量,並在代碼的其餘部分使用它們?
您希望只能通過編輯器讀取變量。關閉你正在尋找的東西是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中的項目/元素不能更改。
呃,用戶將不會在發佈的版本中看到檢查員......您在這裏關注什麼?或者你編寫自己的檢查器來修改序列化變量? – Serlite