關於unity3d clone的prefab物體一起行動的問題(static要慎用)

首先,爲什麼要去一個這個名字呢,因爲對大多數新手來說遇到這樣的問題根本就不知道static的問題(就拿我來說...)而知道這個問題的基本可以自己解決了。

最近在學習Unity3d,看書和視頻學習的時候基本上也就是對於static一句話就說過去了,說他是預先編譯,優先於腳本的函數,這樣的一句話,一開始我還是很迷茫,ok,或許是我的技術還很薄弱吧,沒有細細體會到其中的奧祕,直到自己做了一個Unity的一個模仿紅綠燈的項目,我才徹底的領悟到了這一點,當然代價就是找了六個小時的bug,最終用最笨的方法一點點的執行,最後發現是因爲一個關鍵詞——static!(一開始根本就沒有想到會是static出問題...)

ok,回到我們所說的話題,瞭解Unity3d的都知道,對於一個prefab物體,我每次克隆的話,就相當於每一個獨立的個體,彼此之間是沒有聯繫的,然而我在運行我的項目(一個模擬紅綠燈的交通系統)的時候,一旦一輛車停下,所有的車都停下了,這讓我很迷茫,曾一度認爲是我的wheelCollider的庫不支持clone呢,後來也查了相關的東西,說什麼的都有,還有什麼Instantiate並不可以完全的複製還有destory並沒有完全的刪除,雖然瞭解了相關的東西,但是改來改去都沒有解決我的所有的車一起停的問題,最後查到了凌晨一點,竟然是一個static,好吧,再說一下,爲什麼我要用static因爲我要引用不同的js腳本的傳值,當時並沒有用sendmessage類似這樣的方法而是用了一個自認爲簡單的直接獲取另一個腳本的靜態變量的方法,結果就導致了這個問題...

最後查了相關的資料也算是給自己和大家的一些忠告吧:直面意思就是說這個object是在程序運行時是靜止不變的,確保不被改變,一般多用於場景中靜止的物體在unity內部會有不少操作來檢測該object是否爲static的,對於static的物體進行一些特殊處理,比如說在Occlusion culling時會對static物體進行patching,在rendering優化時也會根據是否爲static來進行不同的優化,在lightmaping時,會根據是否是static來進行光照等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章