unity陣列或連結串列需要空間很大賦值與呼叫
阿新 • • 發佈:2018-12-21
1 設為public方便其它指令碼呼叫。
但這時 Inspector上對應的指令碼點開,變數會全部展開。有時候直接影響工程的編寫,不小心開啟,電腦卡死等。
2 可以申請為 private變數,其它腳本里用,則寫一個函式,相互傳值。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Variables : MonoBehaviour { // Use this for initialization public GameObject[] gobs = new GameObject[100]; private GameObject[] priGobs; void Start () { priGobs = new GameObject[100]; } // Update is called once per frame void Update () { } void GiveValues(GameObject[] gob) { //do something } }
3, 像上面以物件陣列為例,如何快速賦值
指令碼如下:下面完成對 gobs物件數值的賦值。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Variables : MonoBehaviour { // Use this for initialization public GameObject[] gobs = new GameObject[20]; private GameObject[] priGobs; void Start () { priGobs = new GameObject[100]; foreach (var item in gobs) { print (item.name); } } // Update is called once per frame void Update () { } void GiveValues(GameObject[] gob) { //do something } }
3.1 賦值
A 簡單的做法是一個一個的託動賦值,20還可以接受,如果是100呢?當然可以通過指令碼來賦值,這兒指通過如何快速實現託動物件陣列賦值。
因為一次多個賦值時,物件選好時,指令碼在 Inspector不顯示,如下
B 如果選物件時,指令碼能顯示不就可以賦值了嗎?
所以即鎖定Inspector
C 選擇物件,直接託動賦值。但會發現物件陣列的空間會自動變為以前的兩倍,前面的一部分空間沒有賦值,後面的賦值了。
如下:
執行程式也會有錯誤
D 在Inspector上把陣列空間大小先修改為0,再託動賦值,OK.
執行結果