关于prefab实例化至舞台Instantiate

不知道大家是否知道一点,将prefab(预制体)Instantiate(实例化)至舞台,程序生成的为该预制体的Clone(克隆物体)。

也就是说如果实例化dashi.prefab至舞台,则得到的是dashi(Clone),这是前提。

案例:

在该前提下,假设我编写代码Resource.load 获取到该预制体,实例化预制体至舞台 前 对预制体身上所挂载的脚本进行代码操作编辑。详细说使用代码修改其公共属性ID为20140902,那么求我 Instantiate(实例化)至舞台 后 公共属性ID是多少?!

案例解析:

当U3D使用代码将预制体实例化至舞台后生成的所有Clone物体身上所挂载的任何属性包含脚本属性均为该预制体在U3D中的预制体属性。也就是说

我在U3D中制作或者修改预制体的所有属性在 Instantiate(实例化)至舞台后就是该属性,我使用代码获得该预制体在实例化至舞台前的所有修改均不生效。无论怎么修改实体化至舞台后该预制体的属性都是之前设定好的预制体属性。

如果想修改怎么办?我需要动态赋值啊?

解决方案:

Instantiate(实例化)至舞台后再进行获取脚本或公共属性 进行修改。

FightUnit unit1 = prefab.GetComponent<FightUnit>();

unit1.UnitId =20140902;

Instantiate(prefab, .spwanPos, spawnRotation) as GameObject;

//======以上操作为不生效操作,这时候我们再输出unit1.UnitId依然为之前预制体上的ID;

GameObject p = Instantiate(prefab, .spwanPos, spawnRotation) as GameObject;

FightUnit unit = p.GetComponent<FightUnit>();

unit.UnitId = 20140902;