C#開發Unity遊戲教程之遊戲物件的屬性變數
C#開發Unity遊戲教程之遊戲物件的屬性變數
Unity遊戲物件的屬性——變數
透過對上一章的學習,讀者應該瞭解到了,遊戲物件上的屬性與指令碼中的變數,建立聯絡的方式就是將指令碼賦予遊戲物件。上一章只是簡單的介紹了指令碼中的變數,讀者一定不過癮,現在好了,作者將使用一整章的篇幅介紹變數與屬性。
Unity遊戲物件的屬性
在Unity中,遊戲場景中游戲物件的屬性,可以在Inspector檢視裡檢視,想看哪個遊戲物件的屬性,就使用滑鼠選中哪個遊戲物件即可。例如,要檢視遊戲場景中Main Camera物件的屬性,只需在Hierarchy檢視裡選中Main Camera,然後Inspector檢視就會顯示出它的所有屬性,如圖3-1所示。
圖3-1 在Inspector檢視裡檢視Main Camera物件的屬性
透過上一章節的學習,讀者應該瞭解到,屬性是顯示在元件之下的,元件的本質是類,而屬性的本質就是變數,只不過使用者是無法檢視Unity這些內建元件類的程式碼的。因此,下面以自己編寫的指令碼來說明元件之於指令碼中定義的類,屬性之於指令碼中的變數,它們之間的對應關係。
(1)在Project檢視裡,單擊Create|C# Script命令,建立指令碼並命名為MyScript,使用滑鼠雙擊開啟指令碼,並在指令碼中新增下面程式碼:
- 01 using UnityEngine;
- 02 using System.Collections;
- 03
- 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 指令碼之於元件,變數之於屬性
Unity中指代資料的名稱
既然遊戲物件屬性的本質就是變數,那麼指令碼中的變數又是什麼?在上一章曾向讀者說明過,變數實際上就是一個儲存資料的單元,而讀者在指令碼中所看到的“變數”,準確的說應該是“變數名”。“變數名”顧名思義就是指變數的名稱,它的作用是指代變數,或者說是指代變數中的資料。就上一節的示例而言,指令碼中的變數名是iValue、strValue和fValue,如圖3-3所示。
圖3-3 指令碼中的變數名
Unity變數命名規則
指令碼中的變數名,看起來就是一串字母,但它是有自己的命名規則的,這個規則是被C#語法所規定的,即:變數名只能由字母、數字和下劃線組成,且只能以字母或者下劃線開頭。對這個規則的解釋如下:
- q 同一字母的大小寫,對於變數名是不同的。例如,iValue和IValue是不同的變數名;
- q 不能以數字開頭。例如,iValue和_Value是合法的,但是1Value是不合法的;
Unity變數命名約定
“規則”是必須遵守的,有強制性,不遵守的話就會出現語法上的錯誤。而“約定”則是要看意願的,讀者可以不遵守約定,也不會犯任何語法上的錯誤。雖然它沒有強制性,但是讀者也最好了解一下,因為遵守約定,利於程式碼的閱讀,以及遊戲程式設計人員協同工作。
1.選擇有意義的名稱
最好為變數選擇有意義的名稱,否則讀者會在很長一段時間以後,忘記當初為什麼要命這樣一個變數名,以及這個變數名想要指代一個什麼樣的資料。下面以一個例子來說明:
- public bool theBearMakesBigPottyInTheWoods = true;
這個變數名可真長!但它確實清楚的描述了自己,因此即時讀者在10年後看到這個變數,仍然能從它的名字上了解到當初什麼要命這樣一個變數名,以及這個變數名想要指代一個什麼樣的資料。現在給這個變數換另一個簡單點的名字:
- public bool potty = true;
這個名字確實簡潔多了!畢竟缺少了好多描述性的資訊。也許讀者在為變數命名的時候,還記得它的作用,但是過幾周之後就不一定了。到時候,讀者將不得不閱讀更多的程式碼,來推測這個變數名的作用。
2.小寫字母開頭
使用小寫字母作為變數名的首字母,是為了讓變數名與類名區別開來,從而使得程式碼閱讀者可以輕鬆地從名稱上,得知名稱是變數名還是類名。因為類名通常是使用大些字母開頭的,因此最好讓變數名以小寫字母開頭。例如:
- Transform; //類名
- transform; //變數名
如果嚴格的遵守了命名的約定的話,就可以很容易的得知,第一個是類名,第二個是變數名。
提示:在本書後面的章節,讀者會看到類的命名約定,那個時候作者會告訴你類名最好以大寫字母開頭。讀者也可以使用其它的命名約定,但是無論使用何種命名約定,目的都是一致的,就是為了提高程式碼的可讀性,便於多名遊戲程式設計人員的協作。
Unity變數名與屬性名的些許不同
透過本章第一節的學習,讀者已經瞭解到,遊戲物件上屬性的本質就是變數,而屬性名與變數名也是一致的。但是細心的讀者可能發現了,屬性名與變數名並非完全一致,至少首字母的大小寫就不同,如圖3-4所示。
圖3-4 變數名與屬性名不完全一致
其實同樣的問題,也發生在了指令碼名(類名)與元件名的不一致上。例如,MyScript(指令碼名、類名)的元件名是My Script。這或許是微不足道的,但它卻體現出了Unity的體貼、周到,讀者難道不覺得,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設定屬性的資料型別
屬性就是變數,它們二者只是同一事物在不同場景下的不同稱呼而已。在Unity中,應該說屬性有不同的資料型別,但是如果在指令碼中,就只能說變數有不同的資料型別了。資料型別是什麼?讀者實際上已經在指令碼中見過的,如圖3-8所示。
圖3-8 指令碼中的3種資料型別
Unity中的資料型別
計算機可以儲存各種各樣的資料,而計算機對於不同型別的資料的儲存和處理方式是不同的。因此,為了讓計算機更好的處理指定的資料,最好為資料指定型別。C#中的資料型別可以分為圖3-9所示的幾大類。
圖3-9 資料型別的分類
在Unity中常用的資料型別是簡單值型別,如表3.1所示。
表3.1 簡單值型別
為變數或者說屬性設定型別的依據是,看看資料處於哪一個範圍。例如,262只能使用long型別儲存,但是對於50,可以使用所有的整型型別儲存,這時就要看哪個型別最合適了。
Unity屬性資料型別的體現形式
對於屬性而言,不同資料型別的屬性可以儲存的資料種類不同,因此它在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人!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1725616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#開發Unity遊戲教程之使用指令碼變數C#Unity遊戲指令碼變數
- C#開發Unity遊戲教程之Unity中方法的引數C#Unity遊戲
- C#開發Unity遊戲教程之遊戲物件的行為邏輯方法C#Unity遊戲物件
- C#開發Unity遊戲教程之判斷語句C#Unity遊戲
- C#開發Unity遊戲教程之Scene檢視與指令碼的使用C#Unity遊戲指令碼
- C#遊戲開發快速入門2.2改變遊戲物件的狀態C#遊戲開發物件
- 直接操作遊戲物件C#遊戲開發物件C#遊戲開發
- C#開發Unity遊戲教程迴圈遍歷做出判斷及Unity遊戲示例C#Unity遊戲
- 物件屬性值賦給變數物件變數
- Unity遍歷物件serialized的屬性Unity物件Zed
- 【Unity3D開發小遊戲】《戰棋小遊戲》Unity開發教程Unity3D遊戲
- Unity遊戲示例來了,用Unity開源遊戲資源做遊戲,遊戲開發不再難!Unity遊戲開發
- .Net(C#)關於變數的命名和屬性C#變數
- C#遊戲開發快速入門教程Unity5.5教程C#遊戲開發Unity
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- 喵的Unity遊戲開發之路 - 推球:遊戲中的物理Unity遊戲開發
- 前端進階課程之物件屬性特性詳解前端物件
- javascript 將變數值作為物件屬性 獲取物件對應的值JavaScript變數物件
- 數字作為物件的屬性物件
- 讀《Unity 3D遊戲開發》Unity3D遊戲開發
- unity3d開發的大型網路遊戲Unity3D遊戲
- Jmeter屬性和變數JMeter變數
- C#獲取某個物件的屬性值C#物件
- C#訪問或修改私有類、函式、變數、屬性C#函式變數
- 《Unity移動遊戲開發》讀後感Unity遊戲開發
- 17款Unity開發遊戲可以用到的外掛Unity開發遊戲
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- CSS 自定義屬性(變數)CSS變數
- Unity中國全面支援OpenHarmony遊戲開發,多款遊戲率先完成適配Unity遊戲開發
- 如何獲取 C# 類中發生資料變化的屬性資訊C#
- 【Unity 框架】 QFramework v1.0 使用指南 工具篇: 16. LiveCodingKit 寫程式碼不用停止執行的利器 | Unity 遊戲框架 | Unity 遊戲開發 | Unity 獨立遊戲Unity框架Framework遊戲開發
- unity 區域網遊戲開發知識點Unity遊戲開發
- Unity3d遊戲開發注意事項Unity3D遊戲開發
- 喵的Unity遊戲開發之路 - 軌道攝像機Unity遊戲開發
- node 全域性物件和全域性變數物件變數
- GObject的物件屬性GoObject物件
- Object物件的屬性Object物件
- 從遊戲開發到應用開發的轉變遊戲開發