剛接觸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)
Unity基礎教學:全域變數的存取
Posted by 楊凱鳴 (KM Yang )
-
-
謝謝!!終於會了
範例黨好像不能用了,跪求阿 !!!!!!!!!!!!! 想學習如何用不同腳本控制一個數值!!!3q
抱歉,已經更新好了。
不知道能不能問...
如果要用像訂單功能的話
A畫面選完商品
B畫面結帳 要有A畫面選的商品出現
應該怎麼用比較好
簡單來說,就是點A照片(按鈕)後,隱藏A照片(按鈕),顯示B結帳畫面;或切換畫面到B結帳畫面,同時載入A照片。上述這一段基本上只是邏輯敘述,也就是程式的邏輯。但我想你應該是想問程式怎麼寫,或unity怎麼實作吧?我想你把基本的unity學好後,就會發覺這個很簡單。
抱歉詢問一下 A腳本裡有碰撞之後加分的效果,但是那些變數是在B腳本裡。其中有UI 的TEXT跟自己的變數,這樣在B腳本設定變數時要怎麼宣告。
有必要一定要將參數存在B裡頭嗎?如果有必要,就必須用比較複雜的方法來取的參數。將B的參數設定為Public,然後A用FindObjectOfType取得B的參數,A再去設定UI的Text。