let nodeA = instantiate(A.prefab);//印象中2.x版本可这么用
接着nodeA.getComponent(componentName) 纠错提示说类型 Prefab | null 的对象不包含getComponent方法,也就是与类型Node | null 不完全重合。//大概这么个意思
请问各位,3.0中该怎么改动,望各位赐教,谢谢
let nodeA = instantiate(A.prefab);//印象中2.x版本可这么用
接着nodeA.getComponent(componentName) 纠错提示说类型 Prefab | null 的对象不包含getComponent方法,也就是与类型Node | null 不完全重合。//大概这么个意思
请问各位,3.0中该怎么改动,望各位赐教,谢谢
已自己找到办法了
我试出来的办法是在prefab类型变量后紧跟“!”号。
let nodeA = instantiate(prefabA!);
因为引擎提供了大概两个不同的instantiate方法,需要指定传入参数的类型为Prefab才能保证返回值的是一个Node类型,而另一个方法用了泛型,返回值类型与传入参数类型相同,所以才会出现类型不匹配的冲突。
let nodeA = instantiate(prefabA!);
意思你的 prefabA
是 Prefab | null
吗?
是,外部拖动绑定的,3.0还是需要养成这种习惯吧?
这一点其实在那个帖子里面也有提,说了好几种解决办法。
你声明的时候这样就好了:
@property(Prefab)
prefabA!: Prefab;
这样一来 prefabA
就是 Prefab
而不用是 Prefab | null
这种写法对于纠错有什么弊端吗?
有,就是你忘记拖的时候这里也不会提示,而是会在运行时报一个 Unable to read property of undefined/null
之类的报错。
所以感觉!号加在哪也是个小技巧,需要自己斟酌利弊。谢谢你的回复
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。