1. 程式人生 > >unity陣列或連結串列需要空間很大賦值與呼叫

unity陣列或連結串列需要空間很大賦值與呼叫

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.

執行結果