还有,unity所说的它自带raknet,经过证实,MasterServer的底层是用raknet实现的,可以用C++ raknet开一个服务器,用MasterServer连接是能收到正确回应的,但MasterServer的底层用的raknet,它只封装提供给我瘊几个简单的接口,然后呢,想使用raknet办法还是有的,那就需要自己修改。
首先了解一下swig是什么,swig是一个代码生成工具,我们需要按照swig格式配置数据就可以生成我们想要的语言代码。
第一步,首先用raknet官网的方法生成C#代码,这个代码就是在windows 下unity直接可用的。可以确信的是raknet C# 所有的接口都是通过RakNet_wrap.cpp暴露出来。然后所有C#对raknet的调用,全部通过RakNetPINVOKE.cs来调用。可以查看RakNet_wrap文件,里面都是按照一种标准封装起来给外面调用,我们可以说这个标准就是swig的标准。对于这个标准,我们不需要知道它是什么,我们只要会按照这个标准修改RakNet_wrap里面的代码就可以。既然有了源代码,所有问题都好说了,unity ios下调用C++的最简单的一种配置方法就是把C++源码直接拷到Plugins\IOS下,剩下的工作就是unity会生成xcode项目文件,然后我们在编译项目文件就可生成程序。
需要注意,我们要修改RakNet_wrap文件跟对应的RakNetPINVOKE.cs文件,所以用源码作插件的方式更利于我们修改。修改的时候我们直接在xocde上编译,xcode会有相应错误提示,然后我们修正提示,在编译。
直接指出,IOSC# 调用动态库与其它有所不同,必须改成 [DllImport("__Internal", EntryPoint="funname")],而安卓MAC需要 [DllImport("RakNet", EntryPoint="funname")],还有EntryPoint的名称必须要跟直接引用的名称相同,不然也会不能正常调用。
还有一个对unity工具的要求,unity必须是正版,或者破解正版,试用版是不支持插件的,所以也会有问题。
主要问题就这些,接下来我们可以根据提示,修改小小的问题。下面附上代码地址。
https://git.oschina.net/no_this/client
//注意,这个问题本人花了好多时间研究解决,国内外都没有这样的解决方案,转载请注明出处。
//by 王小帅