使用c++编写unity程序

unity C++ Scripting

这是一位国外开发者写的系列文章,我之前只看了其中c#和c++交互的部分。在我昨天搜索c++和unity的时候,发现了这位作者在github上发布的UnityNativeScripting项目,这时才发现这是用c++作为unity脚本的整套方案,个人觉得挺好的。

自己的游戏现在采用了两种开发语言,c++开发了核心底层模块,c#用来写游戏逻辑。我本来的想法是,利用c++和c#各自的优势,但是这样带来了问题:需要从c++暴露很多接口给c#,同时用c#的struct来安排内存布局,需要非常多的额外考量,受到不少限制,增加了代码量,也埋下内存管理隐患。

综合衡量之后,我决定把所有c#转成c++,正好在此时,发现了UnityNativeScripting项目,出于减少工作量的考虑,我应该尝试一下。

2020.12.5更新:
最终,并没有采用UnityNativeScripting,而是使用了它的思路。向c#暴露几个核心的c接口,然后将大量的c#接口暴露给c。粗略看了一下slua ulua之类的,也是类似思路,只不过它们又把这些接口桥接到了lua。

这样的好处是c++接口很少、很稳定。主要的逻辑都用c++来写,把需要显示的数据推送给c#,同时也把用户输入从c#端拉过来。c++这里复杂的数据(比如地形、玩家位置以及视野、寻路结果等等)不再需要做接口传递到c#,省掉很多工作。

2020.12.20更新
做双方调用接口的过程中,

  1. 最好使用反射,把绝大部分工作自动化。c#方比较好办,反射API是现成的,c++一方我则是采用了hana,我并没有直接声明函数,而是先定义函数指针类型,然后定义函数指针变量,通过反射为其赋值。
  2. 接口集中,最好集中到少数几个类里,或者一个类里。方便注册函数。

通过以上两步,现在新增一个c->c#的调用,只需要在c++定义函数指针,c#里定义静态函数实现,即可实现c到c#的调用。方便程度和调用c函数差不多,大大提高开发速度。

发表评论

邮箱地址不会被公开。 必填项已用*标注

− 1 = 9