經過對上一章的學習,讀者應該瞭解到了,遊戲對象上的屬性與腳本中的變量,創建聯繫的方式就是將腳本賦予遊戲對象。上一章只是簡單的介紹了腳本中的變量,讀者必定不過癮,如今好了,做者將使用一整章的篇幅介紹變量與屬性。編程
在Unity中,遊戲場景中游戲對象的屬性,能夠在Inspector視圖裏查看,想看哪一個遊戲對象的屬性,就使用鼠標選中哪一個遊戲對象便可。例如,要查看遊戲場景中Main Camera對象的屬性,只需在Hierarchy視圖裏選中Main Camera,而後Inspector視圖就會顯示出它的全部屬性,如圖3-1所示。學習
圖3-1 在Inspector視圖裏查看Main Camera對象的屬性spa
經過上一章節的學習,讀者應該瞭解到,屬性是顯示在組件之下的,組件的本質是類,而屬性的本質就是變量,只不過使用者是沒法查看Unity這些內置組件類的代碼的。所以,下面以本身編寫的腳原本說明組件之於腳本中定義的類,屬性之於腳本中的變量,它們之間的對應關係。orm
(1)在Project視圖裏,單擊Create|C# Script命令,建立腳本並命名爲MyScript,使用鼠標雙擊打開腳本,並在腳本中添加下面代碼:對象
01 using UnityEngine;教程
02 using System.Collections;遊戲
03 ip
04 public class MyScript : MonoBehaviour遊戲開發
05 {開發
06 public int iValue;
07 public string strValue;
08 public float fValue;
09 }
提示:新建立的腳本,裏面有不少Unity自動添加的代碼,對於沒有實際意義的代碼,讀者能夠將其刪除。
(2)將MyScript腳本拖動到Main Camera對象上,再次使用Inspector視圖查看Main Camera對象的屬性,如圖3-2所示,會發現腳本也變成了組件,成爲了Main Camera對象的一部分,而且這個組件下顯示的屬性,就是腳本中的變量。
圖3-2 腳本之於組件,變量之於屬性
既然遊戲對象屬性的本質就是變量,那麼腳本中的變量又是什麼?在上一章曾向讀者說明過,變量實際上就是一個存儲數據的單元,而讀者在腳本中所看到的「變量」,準確的說應該是「變量名」。「變量名」顧名思義就是指變量的名稱,它的做用是指代變量,或者說是指代變量中的數據。就上一節的示例而言,腳本中的變量名是iValue、strValue和fValue,如圖3-3所示。
圖3-3 腳本中的變量名
腳本中的變量名,看起來就是一串字母,但它是有本身的命名規則的,這個規則是被C#語法所規定的,即:變量名只能由字母、數字和下劃線組成,且只能以字母或者下劃線開頭。對這個規則的解釋以下:
q 同一字母的大小寫,對於變量名是不一樣的。例如,iValue和IValue是不一樣的變量名;
q 不能以數字開頭。例如,iValue和_Value是合法的,可是1Value是不合法的;
「規則」是必須遵照的,有強制性,不遵照的話就會出現語法上的錯誤。而「約定」則是要看意願的,讀者能夠不遵照約定,也不會犯任何語法上的錯誤。雖然它沒有強制性,可是讀者也最好了解一下,由於遵照約定,利於代碼的閱讀,以及遊戲編程人員協同工做。
1.選擇有意義的名稱
最好爲變量選擇有意義的名稱,不然讀者會在很長一段時間之後,忘記當初爲何要命這樣一個變量名,以及這個變量名想要指代一個什麼樣的數據。下面以一個例子來講明:
public bool theBearMakesBigPottyInTheWoods = true;
這個變量名可真長!但它確實清楚的描述了本身,所以即時讀者在10年後看到這個變量,仍然能從它的名字上了解到當初什麼要命這樣一個變量名,以及這個變量名想要指代一個什麼樣的數據。如今給這個變量換另外一個簡單點的名字:
public bool potty = true;
這個名字確實簡潔多了!畢竟缺乏了好多描述性的信息。也許讀者在爲變量命名的時候,還記得它的做用,可是過幾周以後就不必定了。到時候,讀者將不得不閱讀更多的代碼,來推測這個變量名的做用。
2.小寫字母開頭
使用小寫字母做爲變量名的首字母,是爲了讓變量名與類名區別開來,從而使得代碼閱讀者能夠輕鬆地從名稱上,得知名稱是變量名仍是類名。由於類名一般是使用大些字母開頭的,所以最好讓變量名以小寫字母開頭。例如:
Transform; //類名
transform; //變量名
若是嚴格的遵照了命名的約定的話,就能夠很容易的得知,第一個是類名,第二個是變量名。
提示:在本書後面的章節,讀者會看到類的命名約定,那個時候做者會告訴你類名最好以大寫字母開頭。讀者也可使用其它的命名約定,可是不管使用何種命名約定,目的都是一致的,就是爲了提升代碼的可讀性,便於多名遊戲編程人員的協做。
經過本章第一節的學習,讀者已經瞭解到,遊戲對象上屬性的本質就是變量,而屬性名與變量名也是一致的。可是細心的讀者可能發現了,屬性名與變量名並不是徹底一致,至少首字母的大小寫就不一樣,如圖3-4所示。
圖3-4 變量名與屬性名不徹底一致
其實一樣的問題,也發生在了腳本名(類名)與組件名的不一致上。例如,MyScript(腳本名、類名)的組件名是My Script。這或許是微不足道的,但它卻體現出了Unity的體貼、周到,讀者難道不以爲,Unity所作的這些變更,使得變量名在變成了屬性名之後,更加的易讀了嗎?事實就是如此。
讀者千萬不要認爲,只要腳本中有變量,就會在腳本成爲組件之後,出如今組件下的屬性列表中。這種想法是錯誤的,由於決定變量是否會出如今組件下,成爲屬性的因素是,修飾變量的是public,仍是private。本章前面部分演示的示例,變量前面都有public修飾,因此纔會顯示在組件下的屬性中,如圖3-5所示。
圖3-5 變量前的修飾部分——public
若是將strValue前的修飾public,換成private,在保存對腳本代碼的修改之後,再次查看組件下的屬性,就會發現名爲Str Value的屬性不見了,如圖3-6所示。
圖3-6 被private修飾的屬性不見了
注意:腳本中能夠省略對變量的修飾,也就是說不書寫public和private也不會有語法上的錯誤。此時,Unity會默認變量是被private修飾的,所以此變量一樣不會以屬性的形式顯示在組件下,如圖3-7所示。
圖3-7 省略了修飾的變量
C#語法規定,被public修飾的變量,能夠被外界訪問和修改,也就是說變量存儲的數據,容許在腳本外被修改。所以開發者才能夠在Unity中,經過屬性修改腳本中變量存儲的數據。被private修飾的變量與public恰好相反,拒絕被外界訪問和修改。所以變量中的數據沒法被外界修改,Unity也就不會將此類變量做爲屬性顯示在Inspector視圖中。這麼看來,這是一個很明智的決策!
屬性就是變量,它們兩者只是同一事物在不一樣場景下的不一樣稱呼而已。在Unity中,應該說屬性有不一樣的數據類型,可是若是在腳本中,就只能說變量有不一樣的數據類型了。數據類型是什麼?讀者實際上已經在腳本中見過的,如圖3-8所示。
圖3-8 腳本中的3種數據類型
計算機能夠存儲各類各樣的數據,而計算機對於不一樣類型的數據的存儲和處理方式是不一樣的。所以,爲了讓計算機更好的處理指定的數據,最好爲數據指定類型。C#中的數據類型能夠分爲圖3-9所示的幾大類。
圖3-9 數據類型的分類
在Unity中經常使用的數據類型是簡單值類型,如表3.1所示。
表3.1 簡單值類型
爲變量或者說屬性設置類型的依據是,看看數據處於哪個範圍。例如,262只能使用long類型存儲,可是對於50,可使用全部的整型類型存儲,這時就要看哪一個類型最合適了。
對於屬性而言,不一樣數據類型的屬性能夠存儲的數據種類不一樣,所以它在Inspector裏的數據輸入形式就會不一樣,如圖3-10所示。
圖3-10 Inspector視圖裏,不一樣種類的屬性
q int、float、double類型的數據都是數值,所以在未指定iValue、fValue和dValue所指代數據的具體值時,Unity會自動爲屬性賦值0;
q string類型的數據是字符,所以在未指定strValue所指代數據的具體值時,Unity會自動爲屬性賦值「空字符」;
q bool類型的值只多是true或者false,所以Unity使用了一個複選框表示bValue所指代的數據,且默認設置其爲false,當複選框被複選時,表示值爲true;
本文選自:C#遊戲開發快速入門大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!