Unity中Instantiate一個prefab時需要注意的問題


在調用Instantiate()方法使用prefab創建對象時,接收Instantiate()方法返回值的變量類型必須和聲明prefab變量的類型一致,否則接收變量的值會為null.
 
比如說,我在腳本里面定義:
public GameObject myPrefab;
那么在使用這個myPrefab做Instantiate()的時候,接收返回值變量的類型也必須是GameObject,如下:
GameObject newObject = Instantiate(myPrefab) as GameObject;

注意Instantiate()后面的as也要是GameObject。

又比如我們的prefab類型是我們自定義的UserObject,

public UserObject prefab;

那么在使用Instantiate()時我們需要寫成:

UserObject newObject = Instantiate(myPrefab) as UserObject;

比較容易犯的一個錯誤是我們聲明的類型是:

public GameObject myPrefab;

在Instantiate()返回值卻想要用Transform,如下:

Transform newObject = Instantiate(myPrefab) as Transform;

這個時候就會出現newObject為null的問題。

這個問題看起來很詭異,也曾經給我帶來了一些麻煩,后來經過搜索和自己的實驗證明了以上的結論,希望看到這篇文章的朋友可以避免這個問題。

導致這個問題的具體原因還不是很清楚,也許和C#語言的某些特性有關,自己也是剛接觸C#沒多久,如果之后搞明白會在這篇文章的下面補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM