求助:有没有开发c++扩展并导出到ts、可供creator使用的例子?

需求:
想把自己开发的一套ui库集成到cocos引擎中,最终表现形式为能在creator里提供一个新的节点类型,创建该节点时,会创建对应的c++类例实例,然后可以接收鼠标键盘消息(也就是参与cocos的事件分发机制),最后是渲染,这个ui库里已经有现成的opengl/metal渲染代码,要怎样嵌入cocos的渲染流程?一般有两种方式,一是随着场景的渲染,该类节点即时调用自己的渲染函数,但这会导致每帧都要跑很多gl调用,实际上ui画面可能在不操作的时候一直稳定不变,所以更好的方式是能提前渲染到纹理,在有变化时才更新,其它时候只画一个带此纹理的矩形。两种形式下,肯定都需要与cocos的graphics层api协作,才能得到正确的环境以执行既有的opengl/metal渲染代码。

已经浅作的尝试:
1、搜了文档和论坛,大部份关于扩展的贴子,可能重点在制作编辑器扩展面板,或是ts层面的扩展,没有看到有开发c++层扩展(且要处理消息、执行渲染等一整套操作)的例子
2、看了引擎代码,发现有ts和c++两层代码,原以为ts层只是对c++类的导出绑定,但实则不然,ts里竟然还有操作顶点数据这样的底层操作,一时间难以全窥cocos设计原理,想开发扩展不知从何入手。

期望:
1、官方能否提供一个简单的demo来作为此类扩展的入门模板,功能可以简单到就在c++里用opengl画一个三角形,鼠标点击时打印坐标,在creator里能拖出来摆放,设置一个颜色属性然后反映到渲染结果上。
2、其实就类似于ndk里的native_activity sample,那个例子很好地说明了怎么在一套java体系里,嵌入一个c++ opengl模块。

最后,诚心表示期望与感谢~ 每个人的时间都有限,浪费cocos开发者的时间来减少我自己摸索走弯路的时间,实在是惭愧。不过考虑到如果这个demo有了,也不只为我一个人服务,相信对所有使用cocos、特别是希望做深度扩展的人都有启发作用,因此还是提出了这个不情之请。 :handshake:

:hear_no_evil: :hear_no_evil: :hear_no_evil: :hear_no_evil: :hear_no_evil:

挺难的。
1.cocos 同时两套底层,针对逻辑的上层都是ts没错,但是底层实现是ts和c++两套。ts底层支持web/各种小游戏。c++底层支持原生windows/android/ios。(所以你会看到ts有底层操作)
如果你的UI库只有C++实现,那是不兼容web和各种小游戏平台,除非你ts上也做一套类似的控件(基于cocos的ts底层)。
2.cocos编辑器闭源,而且是electron的应用程序,其插件基本上也都是以web技术为基础的,目前是没有直接用c++做的插件。原生引擎层确实是可以插入你的UI库渲染,在编辑器上的插件,就不是那么容易了。

我以前项目也有一套自己的UI库,需要转换到cocos,后来综合下来成本最低的方式是做一个转换器,将自己UI库输出的界面文件(例如xml),(以文本形式)转换成Cocos Creator 的Prefab文件,并在ts上实现部分原UI库控件的特有功能来适配。

了解。
不过现在也只打算做原生实现,不考虑小游戏平台。
至于编辑器插件,用ts包装一下应该不难。
难的就是千头万绪,自己摸黑效率太低,想先一边干别的一边等官方出demo :joy:

:rofl:官方哪有时间出Demo

其实官方出不了这个demo,编辑器没法支持,哈哈。

如果希望出现更多高质量扩展的话,官方也需要做点努力,降低入手难度啊。何况这种demo不重内容,只重形式,说明流程就够了。

不应该啊,编辑器也是用原生引擎渲染的,只要插件加载进去了,就能创建一个扩展对象渲染出来啊

编辑器是基于electron的ts实现嘛。用的是ts那套底层。和原生引擎层应该没有关系的。

原生扩展文档真的简陋,还在摸索cmake中

每个人都觉得某个点很重要 :roll_eyes:

这个需求很合理,已加入到工作列表中, 但什么时候能出还不一定,目前需要楼主自己先研究并解决。
如果楼主能够贡献一个DEMO和文档初稿,就更不错啦!
感谢楼主反馈,希望楼主项目一切顺利。

第二种方法为什么需要复杂的耦合?

:raised_hand_with_fingers_splayed:

1赞

结果反客为主 楼主自己先出Demo :grinning: