2016年9月28日 星期三

Unity 插件開發 (二) - Property Attribute

我們已經知道,若把一個 C# Script 綁在目標的物件上並在場景中點擊該物件,會在 Inspector 視窗看到 Script 中被標為 Public 的變數。所以我們可以藉由將變數設為 Public,方便我們在場景中直接設定變數的數值。但我們不能保證設定的數值可以讓遊戲順利執行。舉個例子:假設設計場景的設計師把要生成的怪物數量設為 -1 怎麼辦?這有可能造成程是邏輯上的錯誤啊。那我們接下來要介紹的 Property Attribute 可以有效的解決這個問題。



什麼是 Property Attribute?
Attributes 是一種可以讓變數方法附加額外行為的功能,而 Property Attribute 顧名思義,指的就是為變數附加額外行為。詳細的 Attributes 功能可以參考 MSDN 上的說明或上網找 C# Attributes 的相關介紹。這篇要說的其實很簡單,我們要在設定為 Public 的變數之前加上一個標籤,來改變它在 Inspector 上畫出來的樣子。而這個標籤的寫法,會用一個中括號包起來。
using UnityEngine;
using UnityEngine;
using System.Collections;

public class GameCamera : MonoBehaviour
{
    public float Speed;
    public float DistanceSpeedModifier;

    [Space( 10 )]
    public float MaximumHeight;
    public float MinimumHeight;

    [Header( "Safe Frame" )]
    [Range( 0f, 1f )]
    public float SafeFrameTop;

    [Range( 0f, 1f )]
    public float SafeFrameBottom;

    GameObject m_FollowTarget;

    // ...
}

在上面這段程式碼中,Public 變數前面所加帶有中括號敘述的就是所謂的 Property Attribute。如果把這些 Property Attribute 拿掉,那麼在 Inspector 視窗中看到的就會是預設的輸入值欄位。但加上上述的 Attribute 後,會發現 Inspector 中的某些欄位長的不太一樣了。

常用的 Property Attribute
接下來會介紹幾個常用的 Property Attribute
  • [Space(10)]
    在 Inspector 中,和前一個變數保持一段空白的距離,參數為空白的高度
  • [Header("Health Settings")]
    在 Inspector 中,在欄位前加入一個文字標題,參數為文字標題字串
  • [Range(0f, 1f)]
    讓 float 或 int 變數有一個範圍上的限制,參數為限制數值的下限與上限。在 Inspector 中,該欄位會變成一個可控制的滑桿(Slider)
  • [Tooltip("Health value between 0 and 100.")]
    讓滑鼠游標移動到該變數欄位上時,顯示提示文字。參數為文字提示字串

  • [HideInInspector]
    讓該變數在 Inspector 中隱藏,即使被宣告為 Public 也看不到它
  • [SerializeField]
    讓該變數在 Inspector 中顯示,即使被宣告為 Private 也看得到它

  • [Multiline(5)]
    讓該字串變數在 Inspector 中顯示為可輸入多行的文字區塊,參數為文字區塊的最大行數
  • [TextArea(0, 10)]
    讓該字串變數在 Inspector 中顯示為可輸入多行、帶有滑桿的文字區塊,參數為文字區塊的最小和最大行數


參考資料

沒有留言:

張貼留言