記一個坑了我三天的知識點----用拖拽的方式給指令碼中Public變數賦值
阿新 • • 發佈:2019-02-06
做實驗室專案的時候,想要修改人物的顏色。於是我定義了一個Public Gameobject變數,想著用拖拽的方式給變數賦值,然後在腳本里修改顏色。拖拽的時候,我也沒管拖的是Prefab預製體還是Prefab例項化出來的普通的Gameobject。覺著都一樣,後來出現了很多的問題才發現原來這兩個是不一樣的,百度上也沒找到相關的部落格,所以我來總結一下。
1.Prefab上掛載的指令碼的Public變數只能由Prefab來賦值
如果你想用場景中普通Gameobject給Prefab上的變數賦值,會發現賦不了
2.普通Gameobject上掛載的指令碼的Public變數既可以拖拽Prefab來賦值,也可以拖拽普通Gameobject來賦值
但是,如果你拖拽Prefab來賦值,你在指令碼中所做的修改將只會對Prefab產生影響,而不會對場景中Prefab例項化出來的物體有影響
這麼說可能有點難以理解,下面來看一個例子:
Capsule和Cylinder是普通物體,而Cube和Sphere是和預製體相關聯的物體
有一個指令碼ChangePosition,我掛載在攝像機上
程式碼如下:
public GameObject ob1;
public GameObject ob2;
void Start ()
{
ob1.transform.position = new Vector3(0 , 100, 0);
ob2.transform.position = new Vector3(0, 100, 0);
}
然後我拖拽Cube的預製體和Cylinder普通物體到兩個Public槽裡。這時,兩個物體的初始位置都為(0,0,0)。
執行後結果:
可以看到,Cylinder的position改變了
但場景中Cube的position卻沒有變化,這與我們的預期不符,根據上面的結論,應該是Cube預製體的position被更改了
果然如此!
順便一提,寫部落格的時候用MarkDown比CSDN的自帶網頁編輯器要舒服太多了~強烈推薦