About 1005

Unity基礎教學:全域變數的存取

Posted by 楊凱鳴 (KM Yang ) - -

剛接觸Unity設計遊戲的人,一定會有個問題,那就是「我怎麼讓第一關的分數/生命值等等的遊戲參數,在第二關時能夠繼承/延續/存取?」。其實很簡單,那就是需要把這些參數設定為全域變數(static)。另外,由於這些參數每一關都用的到,或許可以直接使用一個腳本來控制所有的全域變數。例如:

管理這些參數的腳本命名為:GameDataManager,腳本內容如下:


static class GameData{

public static bool gameover = false;
public static int Coins = 1;
public static float Num = 0.2f;

}


另外一支用來存取的腳本命名為:TestManager,腳本內容如下:


public class TestManager : MonoBehaviour {

private bool gameover;
private int Coins;
private float Num;

void Start () {
//載入外部全域參數
gameover = GameData.gameover;
Coins = GameData.Coins;
Num = GameData.Num;
}

void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
gameover = true;
Coins += 1;
Num += 0.1f;
//將運算好的參數存回全域參數
GameData.gameover = gameover;
GameData.Coins = Coins;
GameData.Num = Num;
//偵測是否有存回
Debug.Log ("GameManager.gameover="+GameData.gameover);
Debug.Log ("GameManager.Coins="+GameData.Coins);
Debug.Log ("GameManager.Num="+GameData.Num);
}
}
}


執行結果:
當按下空白鍵時,TestManager會把載入的全域參數計算好後,存回GameDataManager。

範例檔下載:StaticVarTest(Unity 5.6.0f3)

7 Responses so far.

  1. 匿名 says:

    謝謝!!終於會了

  2. 範例黨好像不能用了,跪求阿 !!!!!!!!!!!!! 想學習如何用不同腳本控制一個數值!!!3q

  3. 抱歉,已經更新好了。

  4. 匿名 says:

    不知道能不能問...
    如果要用像訂單功能的話
    A畫面選完商品
    B畫面結帳 要有A畫面選的商品出現
    應該怎麼用比較好

  5. 簡單來說,就是點A照片(按鈕)後,隱藏A照片(按鈕),顯示B結帳畫面;或切換畫面到B結帳畫面,同時載入A照片。上述這一段基本上只是邏輯敘述,也就是程式的邏輯。但我想你應該是想問程式怎麼寫,或unity怎麼實作吧?我想你把基本的unity學好後,就會發覺這個很簡單。

  6. BBD says:

    抱歉詢問一下 A腳本裡有碰撞之後加分的效果,但是那些變數是在B腳本裡。其中有UI 的TEXT跟自己的變數,這樣在B腳本設定變數時要怎麼宣告。

  7. 有必要一定要將參數存在B裡頭嗎?如果有必要,就必須用比較複雜的方法來取的參數。將B的參數設定為Public,然後A用FindObjectOfType取得B的參數,A再去設定UI的Text。

Leave a Reply