2016年7月25日 星期一

【Unity官方教學分享】變數與函式

網頁連結


這次的內容是變數(Variables)函式(Functions)
變數可以看成用來裝資料的箱子,不同類型的資料,需要不同類型的箱子來裝,以下是宣告變數的例子。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int myInt, newInt;

    float myFloat = 5.0f;
}
首先看到 int myInt, newInt; 那一行。
(1) int代表此變數的型別,意思是接下來宣告的變數將會是整數(Integer)。
(2) myInt是此變數的名稱用來辨認此變數的名稱。
(3) 如果要同時宣告多個相同型別的變數,用逗點 , 將各個變數隔開,如myInt, newInt。
(4) 最後以分號 ; 做結尾,名為myInt及newInt的變數就宣告完成。
接著看到下一行的 float myFloat = 5.0f; ,如果依上述的規則,就是一個名為myFloat的浮點數(float),但多了= 5.0f是?
(5) = 5.0f 表示在宣告myFloat的同時,給它一個5.0的浮點數數值,後續如果呼叫myFloat時,它就會是5.0,以下面程式碼為例
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    float myFloat = 5.0f;

    void Start() {
        Debug.Log(myFloat);
    }
}
Start函式會在遊戲專案運行最初,執行一次函式裡的內容,
這裡為 Debug.Log(myFloat); ,會在Console視窗顯示myFloat的數值,結果如下。
變數與函式 Variables and Functions

可以從上圖看到,Console視窗在執行後,印出了myFloat的數值5,這裡我們針對程式碼再做一些變化。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    float myFloat = 5.0f;

    void Start() {
        myFloat = 55.0f;
        Debug.Log(myFloat * 2);
    }
}
印出myFloat之前,把myFloat數值改為55.0,接著在印出myFloat時,將myFloat乘2的數值顯示,可以推測數值為55.0 * 2 = 110.0,實際結果如下。
變數與函式 Variables and Functions
可以看到結果與推測的數值相同,代表變數的數值除了在宣告時,也可以在其他執行階段帶入。
另外在顯示數值的地方,下列兩個情況想拿出來提一下。

myFloat = 55.0f;
Debug.Log(myFloat * 2);

myFloat = 55.0f * 2;
Debug.Log(myFloat);

當然兩個顯示結果都是110,但第一個是在Debug.Log中,把myFloat數值乘上2的結果顯示出來,數值並沒有任何的更動,所以myFloat的數值還是55.0。
而第二種情況是將55.0f * 2的數值帶入myFloat中,myFloat的數值就是110.0。

接下來是函式的說明,當開發者想針對某個功能做更複雜的撰寫時,會需要使用函式首先來看以下的程式碼。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int  myInt = 5;

    void Start() {
       Debug.Log(myInt);
    }

    int MultiplyByTwo(int number) {
        return number * 2;
    }
}
這裡我們可以看到兩個函式,名稱為Start的Unity預設函式,以及MultiplyByTwo函式。
(1) 宣告時與變數相同,需要一個型別以上面為例,就是函式名稱前面的voidint
(2) 接下來是函式名稱StartMultiplyByTwo就是函式名稱。
(3) 在括號()中的是參數列,括號內如同變數宣告是型別加上名稱 ,可宣告一個變數,像MultiplyByTwo中的number,或宣告多個變數以逗號 , 隔開,也可以像Start一樣不宣告任何參數,要注意的是,宣告的參數只能在該函數中使用。
(4) 函式的程式碼撰寫在 { } 之間,例如Start中的Debug.Log(myInt);,MultiplyByTwo中的return number * 2;
(5) 最後在函式在執行結束時,需要回傳(return)一個與型別相同的數值,舉例來說,MultiplyByTwo是以int宣告的函式,所以函式需要回傳一個整數,這裡我們將number乘2的結果回傳,也就是return number * 2;,回傳的結果會在下面的內容提到。

當我們撰寫好一個函式時,需要呼叫函式才可以運作,以下面程式為例。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int  myInt = 5;

    void Start() {
        MultiplyByTwo(myInt);////(1)
        ////(4)do something...
    }

    int MultiplyByTwo(int number) {////(2)
        return number * 2;////(3)
    }
}
(1)在這裡呼叫MultiplyByTwo,代表程式碼會跳到int MultiplyByTwo(int number)執行。
因為MultiplyByTwo有number這個參數,在呼叫時要再給它一個整數,這裡傳入myInt。
(2)在被呼叫時傳入了myInt,所以number數值為myInt的數值。
(3)到這裡將number * 2的數值return,MultiplyByTwo函式就執行結束。
(4)函式執行結束後,會回到呼叫它的地方再繼續執行程式碼,而呼叫函式的MultiplyByTwo(myInt);這行程式會得到return的數值,舉例來說。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int  myInt = 5;

    void Start() {
        Debug.Log(MultiplyByTwo(myInt));
    }

    int MultiplyByTwo(int number) {
        return number * 2;
    }
}
將MultiplyByTwo(myInt)印出來得到以下結果。
變數與函式 Variables and Functions
可以看到印出了回傳值return number * 2;,也就是10。
另外也可以做為數值帶入變數中,例如說。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int  myInt = 5;

    void Start() {
        myInt = MultiplyByTwo(myInt);
        Debug.Log(myInt);
    }

    int MultiplyByTwo(int number) {
        return number * 2;
    }
}
將myInt印出,結果如下。
變數與函式 Variables and Functions

最後要提的一點是,傳入的數值在函式中,不論做了任何運算,原本的數值不會被修改,例如說。
using UnityEngine;
using System.Collections;

public class ScriptTest : MonoBehaviour {
    int  myInt = 5;

    void Start() {
        MultiplyByTwo(myInt);
        Debug.Log(myInt);
    }

    int MultiplyByTwo(int number) {
        return number * 2;
    }
}
這裡我們呼叫了MultiplyByTwo(myInt);,並在下一行印出myInt,結果如下。
變數與函式 Variables and Functions
出現了傳入前的數值5,這就是數值沒有被更動的結果。

以上是變數與函式的說明,意外的比想像中還長啊。
這次就到這裡。

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...