我写了一个对象池管理组件,其中一个参数就应该配置此prefab上挂的实现reuse、unuse方法的组件,姑且称为PoolImpl
。
在组件的start方法中,初始化prefab的对象池
let pool = cc.NodePool(this.handlerName)
其中this.handlerName
在编辑器中填的就是PoolImpl
。打log出来,值也是对的。 但是实际运行会发现,不会调用到此组件的reuse/unuse方法的。
之前手写代码的时候是这样写的:
let pool = cc.NodePool(PoolImpl)
在console中查看对象,发现组件的_name
是空字符串,可能就是因为这个所以才没找到组件。
所以,我尝试在PoolImpl这里加上了类名。竟然正常工作了。。。
然后,就出现了编辑器warning
Should not specify class name PoolImpl for Component which defines in project.
补充下截图:
组件属性面板中设置prefab和对应的handler类名(就是这个类名如果不通过@ccclass("xx")
指定,就无法工作)
组件初始化对象池的代码(关键行:39)
prefab挂载的脚本(可以看到通过
@ccclass("xx")
指定了类名:FlowLine
)