小白求助,instantiate 为什么返回的是Prefab,而不是Node

  • Creator 版本:3.0

  • 目标平台: Chrome 浏览器

  • 重现方式:
    我有个预制体变量,blockPrefab,想用instantiate基于它创建一个节点,语句如下:
    let blockNode = instantiate(this.blockPrefab);
    然后提示blockNode 的类型是Prefab,而不是预期的Node 类型,请问是咋回事?

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

image

image

image

我通过在this.blockPrefab 后面加个感叹号解决了

1赞

为啥要加感叹号 :joy: :joy: :joy: :joy: 你的 this.blockPrefab 确定是预制体的话 instantiate出来不可能不是node 啊, 和 感叹号没关系, 有可能是代码其它的问题或者什么吧, 最好你仔细研究一下, 加感叹号才能是node是真没见过

你在声明属性的是否说明了blockprefab有可能是空 你在用instantiate要做下非空判断就可以了

@property(Prefab)

    bullet:Prefab = null!;

let node = instantiate(this.bullet);
***.addChild(node);

要加是因为引擎里是这么声明 instantiate 的(多个签名):

// Prefab 类型实例化出来是 Node
function instantiate(prefab: Prefab): Node;

// 其他类型实例化出来是该类型本身
function instantiate<T>(t: T): T;

Prefab | null 满足下面那个签名,所以返回的是 Prefab | null

1赞

…万万没想到,是我见识少了

没有留意到这个。。。