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

2022-05-25 15:39 更新

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

變量

  1. 變量定義。

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

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

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

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

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


    int age;

  1. 變量賦值。

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

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

    int age;
    age=5;

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

    int age=5;

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

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

  • 整數(shù)類型

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

byte classSize=23;
ushort student=2344;
選項 描述 取值范圍
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??

  • 浮點類型

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

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

C# 的浮點類型如下表所示。

選項 描述 取值范圍
float 32位單精度浮點類型 -212??212?
double 64位單精度浮點類型 -21?2??21?2?

  • 布爾類型

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

bool b=true;

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

  • 字符類型

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

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

  • 引用類型

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

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

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

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

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

變量的聲明

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

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

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

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

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

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

  • internal,只能在本項目中訪問。

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

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

表達式和運算符

  1. 表達式。

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

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

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

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

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

  1. 運算符。

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

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

語句

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

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

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

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

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

  1. 選擇分支語句。

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

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

  • if語句。

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

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

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

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

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

  • switch語句。

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

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

switch 后面的值取某一值時,就執(zhí)行相應(yīng) case 后面的語句。例如,當值是值 1 時,執(zhí)行語句 1;當值是值 2 時,執(zhí)行語句 2……當值是 n 時,執(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(條件);

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

  • while 循環(huán)。

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

        while(條件)
        {語句}

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

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

  • for 循環(huán)。

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

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

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

函數(shù)

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

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

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

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

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

  1. Update()

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

  1. LateUpdate()

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

  1. FixedUpdate()

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

  1. Awake()

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

  1. Start()

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

  1. OnDestroy()

當前腳本銷毀時調(diào)用。

  1. OnGUI()

繪制游戲界面的函數(shù),因為每一幀要執(zhí)行多次,所以一些時間相關(guān)的函數(shù)要盡量避免直接在該函數(shù)內(nèi)部使用。

  1. OnCollisionEnter()

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

  1. OnMouseDown()

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

  1. OnMouseOver()

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

  1. OnMouseEnter()

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

  1. OnMouseExit()

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

  1. OnMouseUp()

當鼠標釋放時執(zhí)行該函數(shù)。

  1. OnMouseDrag()

按住鼠標拖動對象時執(zhí)行該函數(shù)。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號