C語言中文網 目錄

Unity 3D C#腳本基礎

Unity 5.x 支持兩種腳本語言:C# 和 JavaScript。在 Unity 3D 內編程,首選 C# 來編寫腳本。

C# 是微軟公司開發的一種面向對象編程語言。由于有強大的 .NET 類庫支持,以及由此衍生出的很多跨平臺語言。C# 逐漸成為 Unity 3D 開發者推崇的程序語言。

變量

1) 變量定義

任何一個腳本中都缺不了變量,C# 腳本也不例外。

變量主要用于存儲數據,在 Unity 3D 的腳本中,每個變量必須擁有唯一的名稱,腳本在識讀變量時采用的是字符串匹配方式,所以對變量名稱大小寫敏感。

一旦 Unity 3D 腳本掛到某個 Unity 3D 對象上,在 Unity 3D 的屬性面板中就會顯示出該腳本中的各個公共變量。開發人員也可以在屬性面板中對公共變量的值進行設置,設置后的值將會影響腳本的運行,相當于在腳本中對該變量進行了賦值。

在 Unity 3D 中,定義 C# 變量的格式如下:

數據類型 變量名稱

例如,下面定義了一個整型變量 age:
int age;

2) 變量賦值

可以通過對變量賦值來對其初始化,賦值時使用賦值運算符“=”。

賦值的格式有兩種,一種是
int age;
age=5;
另一種是以字面形式初始化,形式如下:
int age=5;

3) 變量的數據類型

變量有 6 種數據類型。

整數類型

整數類型的變量取整數數值。C# 將整數分為 8 種類型,如下表所示。使用時,根據數值的可能大小,選擇范圍最小的類型,一般常用的類型為 short、int 和 long 3 種。例如:
byte classSize=23;
ushort student=2344;
類型 說 明 取值范圍
sbyte 有符號 8 位整數 -128 ?127
byte 無符號 8 位整數 0 ?255
short 有符號 16 位整數 -32768?32767
ushort 無符號 16 位整數 0?65535
int 有符號 32 位整數 -2147489648?2147483647
uint 無符號 32 位整數 0?42994967295
long 有符號 64 位整數 -263 ?263
ulong 無符號 64 位整數 0 ?264
 

浮點類型

浮點類型變量主要用于處理含有小數的數值數據。根據小數位數不同,C# 提供了單精度浮點類型 float 和雙精度浮點類型 double,例如:
float angles=36.5f;
double rate=0.253D;
C# 的浮點類型如下表所示。

類型 說 明 取值范圍
float 32位單精度浮點類型 -2128?2128
double 64位單精度浮點類型 一21024 ?21024
 

布爾類型

布爾(bool)類型表示真或假,布爾類型變量的值只能是 true 或 false,不能將其他的值賦給布爾類型。例如:
bool b=true;
在定義全局變量時,若沒有特殊要求,不用對整數類型、浮點類型和布爾類型的變量進行初始化,整數類型和浮點類型的變量默認初始化為 0,布爾類型的變量默認初始化為 false。

字符類型

為保存單個字符,C# 支持字符(char)類型,字符類型的字面量是用單引號括起來的。一些特殊字符要用反斜線“\”后跟一個字符表示,稱為轉義字符,如下表所示。

Char x="X"

轉義字符 含義 轉義字符 含義
\' 單引號 \f 換頁
\" 雙引號 \n 換行
\\ 反斜線 \r 回車
\0 \t 水平制表符
\a 報警 \v 垂直制表符
\b 退格    

引用類型

引用類型是構建 C# 應用程序的主要數據類型,C# 的所有引用類型均派生自 System.Object。

引用類型可以派生出新的類型,也可以包含空(null)值。引用類型變量的賦值只復制對象的引用,而不復制對象本身。

枚舉類型

枚舉類型為定義一組可以賦給變量的命名整數常量提供了一種有效的方法。

編寫日期相關的應用程序時,經常需要使用年、月、日、星期等數據??梢詫⑦@些數據組織成多個不同名稱的枚舉類型。

使用枚舉類型可以增強程序的可讀性,在 C# 中使用關鍵字 enum 類聲明枚舉類型的變量,格式如下:
enum枚舉名稱
{ 
常量1=值1;
常量2=值2;
?
常量n=值n
}

變量的聲明

聲明變量就是指定變量的名稱和類型,未經聲明的變量不能在程序中使用。

在 C# 中,聲明一個變量由一個類型和跟在后面的一個或多個變量名組成,多個變量之間用逗號分開,聲明變量以分號結束。例如:
int age=30;
float rate=20f;
string name="Tom";
在 C# 的變量聲明之前還可以添加訪問修飾符:
  • private(默認修飾符),只能在本類中訪問。
  • protected,只能在類或派生類中訪問。
  • internal,只能在本項目中訪問。
如果想讓腳本中定義的變量在 Unity 3D 中的 Inspector 面板上顯示,必須用 public 修飾。

在聲明變量時,要注意變量名的命名規則:
  • 變量名必須以字母開頭;
  • 變量名只能由字母、數字和下畫線組成,而不能包含空格、標點符號、運算符等其他符號;
  • 變量名不能與 C# 中的關鍵字名稱相同;
  • 變量名不能與 C# 中的庫函數名稱相同。

表達式和運算符

1) 表達式

表達式是由運算符和操作數組成的。

運算符設置對操作數進行什么樣的運算,例如,加、減、乘、除都是運算符。

操作數是計算機指令的組成部分,它指出了指令執行的操作所需要的數據來源。

操作數包括文本、常量、變量和表達式等。例如:
int i=256;
i=256/2+125;
int j=2;
j=j*j-2;

2) 運算符

運算符用于執行表達式運算,會針對一個以上操作數進行運算。例如 2+3,操作數是 2 和 3,而運算符是“+”。

運算符的種類很多,包括算術運算符、簡單賦值運算符、關系運算符、位邏輯運算符、位移運算符以及特殊算術運算符等,與 JavaScript 類似,在此不再贅述。

語句

C# 的常用語句有順序執行語句、選擇分支語句和循環語句 3 種。

1) 順序執行語句

當表達式中有多個運算符時,需要考慮運算符的執行順序,也就是運算符的優先級。

例如,要對一本書的信息進行記錄,書名為《程序設計語言》,價格為 36.5 元,書的編號為 243434。在代碼中定義 3 個變量 bookName、Price、bookID 分別用來保存書名、價格以及編號,并分別對這3個變量進行賦值和輸出,代碼如下:
class Program
{
    static void Main(string[]args){
        string bookName="程序設計語言";
        Console.WriteLine("書名"+bookName);
        float Price=36.5f;
        Console.WriteLine("價格"+Price);
        string bookID="243434";
        Console.WriteLine("編號"+bookID);
    }
}
在該實例中,首先定義變量,為其賦值,然后輸出變量的值,程序是自上而下地一行一行順序執行。

2) 選擇分支語句

在日常生活中,并非所有的事情都能按部就班地進行,程序也一樣。為了實現一定的目標,經常需要改變程序語句執行的順序。

在程序中,有時需要在滿足某種條件時再執行某一語句。為了達到目標而進行選擇的語句就是選擇分支語句。

if語句

一個 if 語句后可跟一個可選的 else 語句,else 語句在布爾表達式為假時執行。C# 中 if…else 語句的語法如下:

if(布爾表達式){
    如果布爾表達式為真執行的語句
}else{
    如果布爾表達式為假執行的語句
}

如果布爾表達式為 true,則執行 if 塊內的代碼;如果布爾表達式為 false,則執行 else 塊內的代碼。

一個 if 語句后可跟一個可選的 else if…else 語句,這種形式可用于測試多種條件。C# 中 if…else if…else 語句的語法如下:

if(布爾表達式1)
{當布爾表達式1為真時執行的語句}
else if(布爾表達式2)
{當布爾表達式2為真時執行的語句}
else if(布爾表達式3)
{當布爾表達式3為真時執行的語句}
else
{當上面的條件都不為真時執行的語句}

switch語句

當程序做條件判斷時,可以用 if…else 語句,但是當條件很多時,如果還用 if…else 語句是很麻煩的。為了解決這個問題,C# 設置了分支語句 switch。其語法格式如下:

switch(值)
{
case值1:語句1;
break;
case值2:語句2;
break;
····
case值n:語句n;
break;
}

當 switch 后面的值取某一值時,就執行相應 case 后面的語句。例如,當值是值 1 時,執行語句 1;當值是值 2 時,執行語句 2……當值是 n 時,執行語句 n。

3) 循環語句

do…while 循環

do…while 循環是在循環的尾部檢查條件。do…while 循環與 while 循環類似,但是 do…while 循環至少會確保一次循環。

C# 中的 do…while 循環語法如下:

do{
語句
}while(條件);

注意,條件表達式出現在循環的尾部,所以循環中的語句會在條件被測試之前至少執行一次。如果條件為真,控制流會轉回上面的 do,重新執行循環中的語句。這個過程會不斷重復,直到給定條件變為假為止。

while循環

在 C# 中 while 循環是常用的一種循環語句,while 循環的特點是直到條件為假時才跳出循環。C# 中的 while 循環的語法如下:

while(條件)
{語句}

在這里,語句可以是一個語句,也可以是幾個語句組成的代碼塊。條件可以是任意的表達式,當為任意非零值時都為真。當條件為真時執行循環;當條件為假時,程序流將繼續執行緊接著循環的下一條語句。

while 循環的關鍵點是循環可能一次都不會執行。當條件測試的結果為假時,會跳過循環主體,直接執行 while 循環的下一條語句。

for 循環

for 循環適合指定循環次數的應用,在使用時,需初始化一個作為計數器的變量值。例如:
for(int i=1;i<=10;i++){
    Console.WriteLine("{0}, i");
}
上面的 for 語句聲明了計數器變量后,使用分號分開,接著給出條件判斷的表達式 i2=10,再使用分號分開,最后給出對計算器變量的操作 i++。如果把 i++ 放在循環體內也是可以的。

函數

在 Unity 3D 中,C# 腳本需要預先載入類庫,代碼示例如下:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript:MonoBehaviour{
}
其中,NewBehaviourScript 是腳本的名稱,它必須和腳本文件的名稱一致(如果不同,腳本無法在物體上被執行)。

所有游戲執行語句都包含在這個繼承自 MonoBehaviour 類的自創腳本中。

Unity 3D腳本中的常用函數如下:

1) Update()

正常更新,創建 JavaScript 腳本時默認添加這個方法,每一幀都會由系統調用一次該方法。

2) LateUpdate()

推遲更新,此方法在 Update() 方法執行完后調用,每一幀都調用一次。

3) FixedUpdate()

置于這個函數中的代碼每隔一定時間執行一次。

4) Awake()

腳本喚醒,用于腳本的初始化,在腳本生命周期中執行一次。

5) Start()

在 Update() 之前、Awake() 之后執行。Start() 函數和 Awake() 函數的不同點在于 Start() 函數僅在腳本啟用時執行。

6) OnDestroy()

當前腳本銷毀時調用。

7) OnGUI()

繪制游戲界面的函數,因為每一幀要執行多次,所以一些時間相關的函數要盡量避免直接在該函數內部使用。

8) OnCollisionEnter()

當一個游戲對象與另外的游戲對象碰撞時執行這個函數。

9) OnMouseDown()

當鼠標在一個載有 GUI 元素(GUI Element)或碰撞器(Collider)的游戲對象上按下時執行該函數。

10) OnMouseOver()

當鼠標在一個載有 GUI 元素或碰撞器的游戲對象上經過時執行該函數。

11) OnMouseEnter()

鼠標進入物體范圍時執行該函數。和 OnMouseOver() 不同,OnMouseEnter() 函數只執行一次。

12) OnMouseExit()

鼠標離開物體范圍時執行該函數。

13) OnMouseUp()

當鼠標釋放時執行該函數。

14) OnMouseDrag()

按住鼠標拖動對象時執行該函數。

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo