網頁

2018年5月25日 星期五

[Unity] 在不同的script之間傳遞全域變數

這個問題解起來,說來簡單,但對於不熟悉Unity架構的人,
仍然需要花點時間思考遊戲物件、script、變數之間的關係,
才能存取到你要的變數。

目標
我需要對一個全域變數myClickNumber,
讓不同遊戲物件裏頭的script可以隨意對他做運算與存取。

步驟
1. 首先,在Unity中,script無法獨立存在,script是component,必須依賴在GameObject底下。







2. 在script裡面,變數宣告時以public宣告,該變數就會成為全域變數。



3. 另一個script執行時,要如何使用bt_right.cs的myClickNumber變數呢?
    由於script無法獨立存在,所以先把另一個script (bt_left) 新增給另一個GameObejct (buttonLeft)






4. 因為等等另一個script (bt_left) 要取用buttonRight這個GameObject裏頭的script,
    所以設定一個全域GameObject myA去接buttonRight。



























5. 在bt_left.cs 的script裏頭,撰寫程式碼
   
     myA.GetComponent<bt_right>().myClickNumber
    這段程式碼就可以對myClickNumber做存取運算




6. 執行程式時,可以一邊看myClickNumber有沒有隨之變化。



附註:
1. GameObject與component之間的關係屬階層關係,
    GameObject可以有好幾個component,
    script是一類的component,
    所以GameObject可以有好幾個script。

2. 這段說明是關鍵,多讀幾次就可以懂了。

    [A程式碼"code_a.cs"]
    public bool a;

    [B程式碼"code_b.cs"]
    public GameObject A;     //連結A物件
    ...
    A.GetComponent<code_a>().a = true;
 


參考資源 [連結]

沒有留言:

張貼留言