• 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#没多久,如果之后搞明白会在这篇文章的下面补充。

  • 相关阅读:
    pyVmomi入门
    一个简单的web框架实现
    H3C交换配置PBR最佳实践
    jQuery入门第三
    jQuery入门第二
    JS笔记 入门第四
    JS笔记 入门第三
    JS笔记 入门第二
    day16
    python之路-DAY10
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6145911.html
Copyright © 2020-2023  润新知