在遊戲中,避免不了要大量使用某一個物體模型,好比說,子彈,敵人這樣的模型。咱們固然不想一個一個手動複製,而是想經過程序來控制他們的產生和消滅。unity3d在這方面作的很好,它經過預製體(prefab)來達到這樣的目的,預製體,至關於一個工具套件同樣,假如咱們作好了一個帶AI的敵人,那麼咱們要大量的使用複製這樣的敵人,咱們就須要把它封裝成預製體(prefab),而後在程序中使用Instantiate函數來克隆物體,若是敵人的生命值耗盡,讓它消失,只要調用gameobject.destroy就能夠了。很是簡單的使用邏輯,然而,有一些須要注意的地方,若是使用不當,可能會形成一些麻煩。舉個栗子:函數
咱們要設置4秒鐘出現一個敵人(敵人的AI腳本已經寫好,是自動靠近玩家主動攻擊的基本腳本),若是咱們把prefab直接拿來作複製,那麼,後果就是,第一次4秒到了,調用Instantiate,咱們看到了第一個敵人,然而,第二次也就是8秒鐘的時候,調用Instantiate,新出來了兩個敵人,而不是一會兒出來一個,第三次也就是12秒的時候調用Instantiate,一會兒新出來了4個敵人,那麼形成這個的緣由,簡單來說,就是不能直接把instantiate腳本綁到prefab上,由於若是一旦調用這個腳本,那麼產生的克隆物體將做爲prefab的子物體,那麼下一次調用的時候,上一次的子物體一塊兒被克隆,就出來了2個,同理,再次調用,把前面克隆的子物體都包括進來,就是新出來了4個了。工具
那麼如何規避這樣的問題呢?其實業界一個解決方案就是,設置空物體,用空物體綁定克隆腳本,而後克隆的腳本上關聯prefab對象。那麼這樣就會達到一次複製一個的效果了。3d