昨天我們介紹了PlayerPrefs來傳送變數的用法,今天..
我們來介紹其他更猛烈的傳輸方式。
有兩種方法:
我們先介紹Static variable的做法。
Static Variable,也就是靜態變數。
他會是在多個物件實體中共享的變數。
也就是說,倘若有多張相同遊戲「卡牌」,
他們有個效果是「使所有的該卡牌都減少一點費用」,
則我們可以用這種方案實作。
另外一種方法則是不摧毀遊戲物件,使用函式DontDestroyOnLoad。
舉例來說,我們建立一個遊戲物件GameController,用來放置我們的GameController程式碼。
using UnityEngine;
public class GameController : MonoBehaviour
{
public static GameController instance;
// Player data
public string playerName;
public int gold;
public string[] ownedCards;
void Awake()
{
// Singleton pattern to ensure only one instance of GameController exists
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
然後我們在其他地方就可以使用一些函式來更新「Player Data」,例如:
// Example of setting player data
GameController.instance.playerName = "John Doe";
GameController.instance.gold = 100;
GameController.instance.ownedCards = new string[] { "Card1", "Card2", "Card3" };
然後在另一個場景內,讀取前一個場景的玩家資料:
// Example of accessing player data
string playerName = GameController.instance.playerName;
int gold = GameController.instance.gold;
string[] ownedCards = GameController.instance.ownedCards;
如果是大量多種玩家資料,且頻繁需要搬移,
則不宜使用PlayerPrefs這種儲存字串來轉移的方式,
而是推薦今天介紹的DontDestroyOnLoad與該遊戲物件所儲存的各種純值或陣列變數。