Unity 3D C# 腳本基礎(chǔ)

2022-05-25 15:39 更新

在 Unity 3D 中編程首選 C# 作為編程腳本語言。

變量

  1. 變量定義。

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

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

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

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

    數(shù)據(jù)類型 變量名稱


    int age;

  1. 變量賦值。

可以通過對變量賦值來對其初始化,賦值時(shí)使用賦值運(yùn)算符“=”。

賦值的格式有兩種,一種是

    int age;
    age=5;

另一種是以字面形式初始化,形式如下:

    int age=5;

  1. 變量的數(shù)據(jù)類型。

變量有 6 種數(shù)據(jù)類型。

  • 整數(shù)類型

整數(shù)類型的變量取整數(shù)數(shù)值。C# 將整數(shù)分為 8 種類型,如下表所示。使用時(shí),根據(jù)數(shù)值的可能大小,選擇范圍最小的類型,一般常用的類型為 short、int 和 long 3 種。例如:

byte classSize=23;
ushort student=2344;
選項(xiàng) 描述 取值范圍
sbyte 有符號 8 位整數(shù) -128 ?127
byte 無符號 8 位整數(shù) 0 ?255
short 有符號 16 位整數(shù) -32768?32767
ushort 無符號 16 位整數(shù) 0?65535
int 有符號 32 位整數(shù) -2147489648?2147483647
uint 無符號 32 位整數(shù) 0?42994967295
long 有符號 64 位整數(shù) -2?3 ?2?3
ulong 無符號 64 位整數(shù) 0 ?2??

  • 浮點(diǎn)類型

浮點(diǎn)類型變量主要用于處理含有小數(shù)的數(shù)值數(shù)據(jù)。根據(jù)小數(shù)位數(shù)不同,C# 提供了單精度浮點(diǎn)類型 float 和雙精度浮點(diǎn)類型 double,例如:

float angles=36.5f;
double rate=0.253D;

C# 的浮點(diǎn)類型如下表所示。

選項(xiàng) 描述 取值范圍
float 32位單精度浮點(diǎn)類型 -212??212?
double 64位單精度浮點(diǎn)類型 -21?2??21?2?

  • 布爾類型

布爾(bool)類型表示真或假,布爾類型變量的值只能是 truefalse,不能將其他的值賦給布爾類型。例如:

bool b=true;

在定義全局變量時(shí),若沒有特殊要求,不用對整數(shù)類型、浮點(diǎn)類型和布爾類型的變量進(jìn)行初始化,整數(shù)類型和浮點(diǎn)類型的變量默認(rèn)初始化為 0,布爾類型的變量默認(rèn)初始化為 false。

  • 字符類型

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

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

  • 引用類型

引用類型是構(gòu)建 C# 應(yīng)用程序的主要數(shù)據(jù)類型,C# 的所有引用類型均派生自 System.Object。

引用類型可以派生出新的類型,也可以包含空(null)值。引用類型變量的賦值只復(fù)制對象的引用,而不復(fù)制對象本身。 枚舉類型 枚舉類型為定義一組可以賦給變量的命名整數(shù)常量提供了一種有效的方法。

編寫日期相關(guān)的應(yīng)用程序時(shí),經(jīng)常需要使用年、月、日、星期等數(shù)據(jù)。可以將這些數(shù)據(jù)組織成多個(gè)不同名稱的枚舉類型。

使用枚舉類型可以增強(qiáng)程序的可讀性,在 C# 中使用關(guān)鍵字 enum 類聲明枚舉類型的變量,格式如下:

enum枚舉名稱
{ 
常量1=值1;
常量2=值2;
...
常量n=值n
}

變量的聲明

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

C# 中,聲明一個(gè)變量由一個(gè)類型和跟在后面的一個(gè)或多個(gè)變量名組成,多個(gè)變量之間用逗號分開,聲明變量以分號結(jié)束。例如:

int age=30;
float rate=20f;
string name="Tom";

C# 的變量聲明之前還可以添加訪問修飾符:

  • private(默認(rèn)修飾符),只能在本類中訪問。

  • protected,只能在類或派生類中訪問。

  • internal,只能在本項(xiàng)目中訪問。

如果想讓腳本中定義的變量在 Unity 3D 中的 Inspector 面板上顯示,必須用 public 修飾。

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

表達(dá)式和運(yùn)算符

  1. 表達(dá)式。

表達(dá)式是由運(yùn)算符和操作數(shù)組成的。

運(yùn)算符設(shè)置對操作數(shù)進(jìn)行什么樣的運(yùn)算,例如,加、減、乘、除都是運(yùn)算符。

操作數(shù)是計(jì)算機(jī)指令的組成部分,它指出了指令執(zhí)行的操作所需要的數(shù)據(jù)來源。

操作數(shù)包括文本、常量、變量和表達(dá)式等。例如:

    int i=256;
    i=256/2+125;
    int j=2;
    j=j*j-2;

  1. 運(yùn)算符。

運(yùn)算符用于執(zhí)行表達(dá)式運(yùn)算,會針對一個(gè)以上操作數(shù)進(jìn)行運(yùn)算。例如 2+3,操作數(shù)是 2 和 3,而運(yùn)算符是+。

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

語句

  1. 順序執(zhí)行語句。

當(dāng)表達(dá)式中有多個(gè)運(yùn)算符時(shí),需要考慮運(yùn)算符的執(zhí)行順序,也就是運(yùn)算符的優(yōu)先級。

例如,要對一本書的信息進(jìn)行記錄,書名為《程序設(shè)計(jì)語言》,價(jià)格為 36.5 元,書的編號為 243434。在代碼中定義 3 個(gè)變量 bookName、PricebookID 分別用來保存書名、價(jià)格以及編號,并分別對這3個(gè)變量進(jìn)行賦值和輸出,代碼如下:

    class Program
    {
        static void Main(string[]args){
            string bookName="程序設(shè)計(jì)語言";
            Console.WriteLine("書名"+bookName);
            float Price=36.5f;
            Console.WriteLine("價(jià)格"+Price);
            string bookID="243434";
            Console.WriteLine("編號"+bookID);
        }
    }

在該實(shí)例中,首先定義變量,為其賦值,然后輸出變量的值,程序是自上而下地一行一行順序執(zhí)行。

  1. 選擇分支語句。

在日常生活中,并非所有的事情都能按部就班地進(jìn)行,程序也一樣。為了實(shí)現(xiàn)一定的目標(biāo),經(jīng)常需要改變程序語句執(zhí)行的順序。

在程序中,有時(shí)需要在滿足某種條件時(shí)再執(zhí)行某一語句。為了達(dá)到目標(biāo)而進(jìn)行選擇的語句就是選擇分支語句。

  • if語句。

一個(gè) if 語句后可跟一個(gè)可選的 else 語句,else 語句在布爾表達(dá)式為假時(shí)執(zhí)行。C#if…else 語句的語法如下:

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

如果布爾表達(dá)式為 true,則執(zhí)行 if 塊內(nèi)的代碼;如果布爾表達(dá)式為 false,則執(zhí)行 else 塊內(nèi)的代碼。

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

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

  • switch語句。

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

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

當(dāng) switch 后面的值取某一值時(shí),就執(zhí)行相應(yīng) case 后面的語句。例如,當(dāng)值是值 1 時(shí),執(zhí)行語句 1;當(dāng)值是值 2 時(shí),執(zhí)行語句 2……當(dāng)值是 n 時(shí),執(zhí)行語句 n。

  1. 循環(huán)語句。

  • do…while 循環(huán)。

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

C# 中的 do…while 循環(huán)語法如下:

        do{
        語句
        }while(條件);

條件表達(dá)式出現(xiàn)在循環(huán)的尾部,所以循環(huán)中的語句會在條件被測試之前至少執(zhí)行一次。如果條件為真,控制流會轉(zhuǎn)回上面的 do,重新執(zhí)行循環(huán)中的語句。這個(gè)過程會不斷重復(fù),直到給定條件變?yōu)榧贋橹埂?/p>

  • while 循環(huán)。

C#while 循環(huán)是常用的一種循環(huán)語句,while 循環(huán)的特點(diǎn)是直到條件為假時(shí)才跳出循環(huán)。C# 中的 while 循環(huán)的語法如下:

        while(條件)
        {語句}

在這里,語句可以是一個(gè)語句,也可以是幾個(gè)語句組成的代碼塊。條件可以是任意的表達(dá)式,當(dāng)為任意非零值時(shí)都為真。當(dāng)條件為真時(shí)執(zhí)行循環(huán);當(dāng)條件為假時(shí),程序流將繼續(xù)執(zhí)行緊接著循環(huán)的下一條語句。

while 循環(huán)的關(guān)鍵點(diǎn)是循環(huán)可能一次都不會執(zhí)行。當(dāng)條件測試的結(jié)果為假時(shí),會跳過循環(huán)主體,直接執(zhí)行 while 循環(huán)的下一條語句。

  • for 循環(huán)。

for 循環(huán)適合指定循環(huán)次數(shù)的應(yīng)用,在使用時(shí),需初始化一個(gè)作為計(jì)數(shù)器的變量值。例如:

        for(int i=1;i<=10;i++){
            Console.WriteLine("{0}, i");
        }

上面的 for 語句聲明了計(jì)數(shù)器變量后,使用分號分開,接著給出條件判斷的表達(dá)式 i2=10,再使用分號分開,最后給出對計(jì)算器變量的操作 i++。如果把 i++ 放在循環(huán)體內(nèi)也是可以的。

函數(shù)

在 Unity 3D 中,C# 腳本需要預(yù)先載入類庫,代碼示例如下:

using UnityEngine;
using System.Collections;
public class NewBehaviourScript:MonoBehaviour{
}

其中,NewBehaviourScript 是腳本的名稱,它必須和腳本文件的名稱一致(如果不同,腳本無法在物體上被執(zhí)行)。

所有游戲執(zhí)行語句都包含在這個(gè)繼承自 MonoBehaviour 類的自創(chuàng)腳本中。

Unity 3D 腳本中的常用函數(shù)如下:

  1. Update()

正常更新,創(chuàng)建 JavaScript 腳本時(shí)默認(rèn)添加這個(gè)方法,每一幀都會由系統(tǒng)調(diào)用一次該方法。

  1. LateUpdate()

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

  1. FixedUpdate()

置于這個(gè)函數(shù)中的代碼每隔一定時(shí)間執(zhí)行一次。

  1. Awake()

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

  1. Start()

Update() 之前、Awake() 之后執(zhí)行。Start() 函數(shù)和 Awake() 函數(shù)的不同點(diǎn)在于 Start() 函數(shù)僅在腳本啟用時(shí)執(zhí)行。

  1. OnDestroy()

當(dāng)前腳本銷毀時(shí)調(diào)用。

  1. OnGUI()

繪制游戲界面的函數(shù),因?yàn)槊恳粠獔?zhí)行多次,所以一些時(shí)間相關(guān)的函數(shù)要盡量避免直接在該函數(shù)內(nèi)部使用。

  1. OnCollisionEnter()

當(dāng)一個(gè)游戲?qū)ο笈c另外的游戲?qū)ο笈鲎矔r(shí)執(zhí)行這個(gè)函數(shù)。

  1. OnMouseDown()

當(dāng)鼠標(biāo)在一個(gè)載有 GUI 元素(GUI Element)或碰撞器(Collider)的游戲?qū)ο笊习聪聲r(shí)執(zhí)行該函數(shù)。

  1. OnMouseOver()

當(dāng)鼠標(biāo)在一個(gè)載有 GUI 元素或碰撞器的游戲?qū)ο笊辖?jīng)過時(shí)執(zhí)行該函數(shù)。

  1. OnMouseEnter()

鼠標(biāo)進(jìn)入物體范圍時(shí)執(zhí)行該函數(shù)。和 OnMouseOver() 不同,OnMouseEnter() 函數(shù)只執(zhí)行一次。

  1. OnMouseExit()

鼠標(biāo)離開物體范圍時(shí)執(zhí)行該函數(shù)。

  1. OnMouseUp()

當(dāng)鼠標(biāo)釋放時(shí)執(zhí)行該函數(shù)。

  1. OnMouseDrag()

按住鼠標(biāo)拖動(dòng)對象時(shí)執(zhí)行該函數(shù)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號