在平時編程中,我們總是想着監控一個變量的值,當它的值到達一定條件時,我們就執行一些操作。雖然我們在Unity的Update()函數中時刻監控也能達到這樣的效果,但是太浪費效率了,因爲那樣每幀都會執行一次判斷和檢測,那有沒有什麼方法可以只在變量改變的時候才檢測它的值有沒有達到我們所設定的條件呢。
答案是有的,這就用到了c#語言的特性:get方法和set方法。
在c#中我們知道屬性是可以用get和set方法定義的,如下:
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
它的好處有很多,我們這裏只大致說一下,就是任何時刻Name有在做賦值操作時,都會執行Set{ }語句塊中的語句,也就是說,如果我們在set{ }中加入我們的方法,我們就可以做到只有在Name的值改變時才檢測Name的值是否達到我們設定的條件。代碼如下:
private int count =0;
public int Count
{
get
{
return count;
}
set
{
count = value;
if(count > 10)
{
Debug.Log("my value bigger than" + 10);
}
}
}
此時,每次在Name在做賦值操作時,都會執行set{ }中的if語句,如果Name一直都不被賦值的話,就一直不執行set{ }中的語句。這樣相比之前在Update()中執行檢測語句就效率多了。
此外,我們還可以把set{ }中的if語句中加入委託或者方法,這樣我們就可以做到只有在只有這個值改變的時候,向所有綁定委託或者事件的實例們發佈消息,讓他們執行一系列操作。