Unity中Instantiate一个prefab时需要注意的问题
2016-12-08 18:01
369 查看
在调用Instantiate()方法使用prefab创建对象时,接收Instantiate()方法返回值的变量类型必须和声明prefab变量的类型一致,否则接收变量的值会为null.
比如说,我在脚本里面定义:
那么在使用这个myPrefab做Instantiate()的时候,接收返回值变量的类型也必须是GameObject,如下:
注意Instantiate()后面的as也要是GameObject。
又比如我们的prefab类型是我们自定义的UserObject,
那么在使用Instantiate()时我们需要写成:
比较容易犯的一个错误是我们声明的类型是:
在Instantiate()返回值却想要用Transform,如下:
这个时候就会出现newObject为null的问题。
这个问题看起来很诡异,也曾经给我带来了一些麻烦,后来经过搜索和自己的实验证明了以上的结论,希望看到这篇文章的朋友可以避免这个问题。
导致这个问题的具体原因还不是很清楚,也许和C#语言的某些特性有关,自己也是刚接触C#没多久,如果之后搞明白会在这篇文章的下面补充。
比如说,我在脚本里面定义:
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#没多久,如果之后搞明白会在这篇文章的下面补充。
相关文章推荐
- Unity中Instantiate一个prefab时需要注意的问题
- .net连接access数据库保存小数需要注意的一个问题
- SWT绘图需要注意的一个问题
- 请求响应/加密解密时一个需要注意的小问题
- NBMA下运行ISIS需要注意的一个问题
- insert append需要注意的一个小问题
- 对java中的String采用+=连接字符串需要注意的一个问题
- 使用DB2中需要注意的一个问题。
- moss中带有前后台的webpart需要注意的一个小问题
- 程序中有事务的时候需要注意的一个问题
- PHP的一个需要注意的POST小问题
- sql server数据库转换为access中需要注意的严重问题--access视图的一个死机‘特色’
- JavaScript Tip/Trick: 动态创建Table时,在IE中需要注意的一个问题
- 一个防御SQL注入攻击时需要注意的问题
- 调用自定义event时需要注意的一个问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- 一个使用手机时需要注意的问题
- JavaScript Tip/Trick: 动态创建Table时,在IE中需要注意的一个问题
- insert append需要注意的一个小问题
- 防御SQL注入攻击时需要注意的一个问题