MathchVS 文档中心 > 对战引擎 > u3d/android > 接入文档

来源:互联网 发布:域名301跳转会报毒么 编辑:程序博客网 时间:2024/05/21 22:43

一、下载和安装U3D插件

1、下载SDK和运行的API demo

下载SDK解压后打开sample\MatchVSDemo-Unity3D\Assets\MatchVSDemo.unity文件(需安装Unity3D),通过Unity编辑器的菜单Edit->Play(ctrl+p)运行 如下:

可通过Conslole查看运行日志.通过浏览DEMO了解MatchVS的基本功能。

2、运行U3D MatchVS 网络对战游戏Demo(暂未推出)

3、使用MatchVS的U3D插件打开Unity.exe编辑器(新建一个U3D工程或在已有U3D工程上) 通过 Assets ->Import Package->Custom Package 导入下载的插件MatchVS-U3D.unitypackage

4、导入MatchVS-U3D.unitypackage后在U3D工程目录的/Assets/Plugins文件下会出现Android 平台的so,window平台的dll,iOS平台bundle,在Assets/MatchVS下会出现MatchVS的C#接口文件.通过这些接口开发Unity网络对战游戏。

二、调试

通过Unity编辑器调试 如果遇到consle输出错误

  1. Exception: JNI: Init'd AndroidJavaClass with null ptr!
  2. UnityEngine.AndroidJavaClass..ctor (IntPtr jclass) (at C:/buildslave/unity/build/Runtime/Export/AndroidJavaImpl.cs:556)
  3. UnityEngine.AndroidJavaObject.get_JavaLangClass () (at C:/buildslave/unity/build/Runtime/Export/AndroidJavaImpl.cs:534)

请通过Unity编辑器的菜单File->Build Settings(ctrl+shift+B)选择Switch Platfrom为PC,Mac&Linux.
因为这里使用android平台特有的JNI特性.


三、发布

  • Window
    通过Unity编辑器的菜单File->Build Settings(ctrl+shift+B)选择Switch Platfrom为PC,Mac&Linux,点击Build或者Build And Run 保存为xxxx.exe文件(xxxx应该替换成实际的项目名)

    发布成功后会出现xxxx.exe文件和 xxxx_Data目录即为发布成功

Tips : Window平台运行时报如下错误,DllnotFoundException:..\xxxx_Data\Plugins\MatchSDK.dll

请将 ..\xxxx_Data\Plugins\ 下的
libevent_core-2-0-5.dll
libevent_extra-2-0-5.dll
libevent-2-0-5.dll
pthread.dll
拷贝至..\目录下(..\代表xxxx.exe所在目录)

  • Android

    通过Unity编辑器的菜单File->Build Settings(ctrl+shift+B)选择Switch Platfrom为Android点击Build或者Build And Run
    详细配置请参考Unity Android打包官方教程

如果遇到打包后的APK运行崩溃 并出现如下LOG信息
Invalid serialized file version. File: Expected version: 5.3.3f1. Actual version: 5.3.4f1.
请保持unity3D编辑器和android打包插件(UnitySetup-Android-Support-for-Editor-xxxx.exe)的版本一致(卸载重装unity) 重新打包即可

  • tips:

默认Android是正式环境,win为测试1环境.因服务器不同,用户不能相互连接,android与win不能相互通信.
解决方法: 在C#调用初始化接口时使用如下配置 切换到正式环境.使得android与win互通.(建议在win平台测试通过后再切换到正式环境)

  1. MatchVSEngine.getInstance().init(null, MatchVSEngineConfigBuilder.getDefault().setMode(0));

四、对战-接口调用流程图

五、对战-接口说明

public interface IMatchVSEngineListener;
以下为接口用于接收来自引擎功能调用后的反馈.

  1. 游戏登录
  2. /**
  3. * 登录大厅结果通知
  4. *
  5. * @param ko_lobby_login_rsp_t
  6. */
  7. void onEnterLobbyRsp(int responseCode);
  8. 游戏开始通知
  9. /**
  10. * 游戏开始
  11. */
  12. void onGameStart(long pRoundID);
  13. 更换房主通知
  14. /**
  15. * 房主更换
  16. *
  17. * @param userid 房主ID
  18. */
  19. void onRoomMasterChanged(int pMasterUserID);
  20. 进入房间通知
  21. /**
  22. * 进入房间
  23. * @param 进入房间结果码 小于0为失败,大于0为进入的房间ID
  24. */
  25. void onEnterRoom(int pRet);
  26. 房间成员动态变化通知
  27. /**
  28. * 当前房间动态,房间用户变化
  29. *
  30. * @param pUserID 用户ID
  31. * @param pStatus
  32. *
  33. */
  34. void onRoomUsersChanged(MatchVSRoomUserState[] pMatchVSRoomUserStates);
  35. 房间延迟通知
  36. /**
  37. * 当前房间延迟情况
  38. * @param pMatchVSRoomUserStates 房间每个用户的延迟
  39. */
  40. void onRoomDelay(MatchVSRoomDelay[] pMatchVSRoomDelay);
  41. 游戏结束通知
  42. /**
  43. * 游戏结束 表示游戏已经结束
  44. * @param pScore 空的数据 游戏结果以OnGameResult为准
  45. */
  46. void onGameOver(MatchVSScore[] pScore);
  47. 游戏结果通知
  48. /**
  49. * 游戏结果通知
  50. * @param pScores 所有玩家的游戏对战结果
  51. */
  52. void onGameResult(int pResultCode, MatchVSScore[] pScores, String pMessage);
  53. 接收用户数据通知
  54. /**
  55. * 接收用户数据
  56. *
  57. * @param userid 发送数据的玩家UserID
  58. * @param pData 数据
  59. */
  60. void onDataReceived(int pUserid, byte[] pData);
  61. 引擎异常通知
  62. /**
  63. * 引擎所有异常和错误回调
  64. * @param pErrorCode 错误码
  65. * @param pMessage 错误信息
  66. */
  67. void onError(int pErrorCode);
  68. 退出大厅通知
  69. /**
  70. * 退出大厅成功
  71. */
  72. void onExitLobby();

MatchVSEngine类说明
对战引擎的所提供的所有功能都通过下列方法实现.

  1. /**
  2. *获得引擎实例
  3. *@return 引擎实例
  4. *//
  5. Public static MatchVSEngine.getinstance();
  6. 注册对战引擎监听
  7. /**
  8. *注册对战引擎监听
  9. *@param pListener 监听对象
  10. *//
  11. Public void addMatchVSEngineListener;
  12. 反注册对战引擎
  13. /**
  14. *反注册对战引擎监听
  15. *@param pListener 监听对象
  16. *//
  17. Public void removeMatchVSEngineListener;
  18. 初始化SDK
  19. /**
  20. * 初始化SDK
  21. *
  22. * @param pApplication
  23. *
  24. * @return
  25. * @throws IllegalAccessException
  26. */
  27. public bool init(Application pApplication)
  28. 进入游戏大厅
  29. /**
  30. * 用户进入大厅和登录游戏授权
  31. *
  32. * @param pDevelopID
  33. * @param pUserID
  34. * @param pGameID
  35. * @param pGameVersion
  36. * @param pToken
  37. * @
  38. */
  39. public void enterLobby(int pDevelopID, int pUserID, int pGameID, int pGameVersion, String pToken)
  40. 退出大厅
  41. /**
  42. * 退出大厅
  43. *
  44. * @return
  45. * @
  46. * @throws NotEntryLobbyException
  47. */
  48. public void exitLobby()
  49. 是否已经初始化
  50. /**
  51. * 是否已经初始化SDK
  52. *
  53. * @return
  54. */
  55. public bool isInit()
  56. 是否已经进入大厅
  57. /**
  58. * 是否进入过大厅
  59. *
  60. * @return
  61. */
  62. public bool isEnterLobby()
  63. 是否游戏中
  64. /**
  65. * 游戏是否开始
  66. * @return
  67. */
  68. public bool isGameStart()
  69. 房间成员准备状态
  70. /**
  71. * 是否其他成员已经准备
  72. *
  73. * @return
  74. */
  75. public bool isRoomOtherUserReadyed()
  76. 传送数据
  77. /**
  78. * 发送数据给房间其他人
  79. *
  80. * @param pRoomUser
  81. * 默认是所有人
  82. * @param pData
  83. * 数据
  84. */
  85. public void sendData(MatchVSRoomUser pRoomUser, byte[] pData)
  86. 传送可靠数据
  87. /**
  88. * 发送数据给房间其他人(可靠,无丢包)
  89. * @param pRoomUser 默认是所有人
  90. * @param pData 数据
  91. * @
  92. */
  93. public void sendReliableData(MatchVSRoomUser pRoomUser, byte[] pData)
  94. 进入房间
  95. /**
  96. *进入某场次内的房间
  97. *@param pRoomID 正数为指定进入房间,0为随机进入房间
  98. */
  99. public void enterRoom(int pRoomID)
  100. 更换房间
  101. /**
  102. * 更换房间,在当前房间中重新进入另一个房间.随机匹配.
  103. */
  104. public void changeRoom()
  105. 退出房间
  106. /**
  107. * 退出房间
  108. *
  109. * @param pRoomID
  110. */
  111. public void exitRoom(int pRoomID)
  112. 准备游戏
  113. /**
  114. * 游戏准备. 多人游戏中房主后准备
  115. */
  116. public void gameReady()
  117. 开始游戏
  118. /**
  119. * 游戏开始 v1.1
  120. */
  121. public void gameStart()
  122. 取消准备
  123. /**
  124. * 取消准备 v1.1
  125. */
  126. public void gameCancel()
  127. 游戏结束
  128. /**
  129. * 结束游戏.
  130. *
  131. * @param pScore
  132. * 游戏得分,用于结算
  133. */
  134. public void gameOver(MatchVSScore pScore)
  135. 反初始化引擎
  136. /**
  137. * 反初始化引擎
  138. */
  139. public void uninit();
  140. 得到引擎状态
  141. /**
  142. * 得到引擎的状态
  143. *
  144. * @return
  145. */
  146. public int getEngineState()
  147. 是否房主
  148. /**
  149. * 是否是房主
  150. * @return
  151. */
  152. public bool isRoomMaster()
  153. 获取房主ID
  154. /**
  155. * 获取房主用户ID
  156. * @return
  157. */
  158. public int getRoomMasterID()
  159. 得到用户对战信息
  160. /**
  161. * 获取用户对战信息
  162. *
  163. * @param pCallBack
  164. * @param pUserID
  165. */
  166. public void getUserDetail(int pUserID, MatchVSCallback<MatchVSBattleDetail> pCallBack)
  167. 登录结果
  168. /**
  169. *登录结果
  170. */
  171. public void onLogin(int returnCode)

六、错误码

错误码常量说明CODE_SUCCESS0调用方法成功ROOM_RTN_OK200成功ROOM_RTN_FAILED300调用方法失败CODE_TOKEN_INVALUE201token无效KO_LOBBY_ERRCODE_AUTH_FAILED500认证失败KO_LOBBY_ERRCODE_NO_THIS_USER501无此用户KO_LOBBY_ERRCODE_NO_USER_CACHE502用户缓存已满KO_LOBBY_ERRCODE_NO_THIS_ROOM600无此房间KO_ROOM_ERRCODE_NO_THIS_ROOM101无此房间KO_ROOM_ERRCODE_FULL_USERS102用户已满KO_ROOM_ERRCODE_ALREADY_IN103用户已经在房间内KO_ROOM_ERRCODE_ALREADY_OUT104用户已经离开KO_ROOM_ERRCODE_EMPTY105房间是空的KO_ROOM_ERRCODE_NO_THIS_USER106无此用户KO_ROOM_ERRCODE_NOT_ENOUGH107用户钱不够或者金币太多KO_ROOM_ERRCODE_NO_THIS_FIELD108无此场KO_ROOM_ERRCODE_FIELD_THRES_FAILED109门槛进不去KO_ROOM_ERRCODE_FIELD_CHECK_FAILED110场校验失败KO_ROOM_ERRCODE_FIELD_NO_THIS_GAME111无此游戏KO_ROOM_ERRCODE_ALREADY_STATE_READY112用户已经在准备了KO_ROOM_ERRCODE_ALREADY_STATE_PLAY113用户已经开始了KO_ROOM_ERRCODE_ALREADY_STATE_OVER114用户已经结束了KO_ROOM_ERRCODE_ROOM_PLAYING120房间正在游戏中KO_ROOM_ERRCODE_ROOM_NOT_PLAYING121房间不在游戏中KO_ROOM_ERRCODE_ROOM_OVER_NOT_EXPIRE130房间暂时还不能进KO_ROOM_ERRCODE_USER_NOT_ENOUTH_TO_PLAY140用户数还不够对战人数下限KO_ROOM_ERRCODE_USER_NOT_OWNER141用户非房主KO_ROOM_ERRCODE_USER_NOT_READY142用户没有准备KO_ROOM_ERRCODE_VERSION_NOT_SURPPORT_REAL161当前版本不支持中途加入KO_ROOM_ERRCODE_NO_ROOM_FOR_TRAIL162不存在中途加入的房间KO_ROOM_ERRCODE_SET_ROOM_ATTR_FAILED163不能设置此房间属性ERRCODE_NETWORK_DISCONNECT1606连接断开ERRCODE_ROOM_DISCONNECT1607与房间失去连接ENTERLOBBY_RTNFAIL-1进入大厅失败EXITLOBBY_RTNFAIL-2退出大厅失败EXITGAME_RTNFAIL-3退出游戏失败ERR_ENTEROOM_BEFORE_EXITROOM-4未退出上一个房间就进入下一个房间ERR_CURRENT_ROOMID-5当前的房间ID与方法传入的房间ID不一致ERRCODE_INVALID_PARAMETER12参数不正确ERRCODE_USER_NOT_EXIST13用户不存在ERRCODE_AUTHRIZATION_FAILED15授权失败ERRCODE_TOKEN_TIMEOUT16Token已过期ERRCODE_USER_NOT_BIND_THIS_THIRD_ACCOUNT30无法绑定这个第三方账号ERRCODE_USER_HAS_BIND_THIS_THIRD_ACCOUNT31此游客账号已经绑定第三方账号ERRCODE_THIS_THIRD_ACCOUNT_HAS_BIND32这个第三方账号存在绑定ERRCODE_THIS_COUNTRY_IS_FORBIDDEN110国家或地区被限制ERRCODE_UNKNOWN200未知错误ERRCODE_USER_PRODUCT_NOT_ENOUGH1001用户商品不足ERRCODE_USER_DIAMOND_NOT_ENOUGH1002用户钻石不足ERRCODE_USER_GOLD_NOT_ENOUTH1003用户金币不足ERRCODE_USER_PRODUCT_EXPIRED1004用户商品已过期ERRCODE_USER_MONEY_NOT_PAYED1005用户佣金未支付ERRCODE_PRODUCT_NOT_BELONGED_THIS_GAME1006此商品不属于该游戏ERRCODE_DIAMONE_COULD_NOT_EXCHANGED1007不可兑换成钻石ERRCODE_KEYCODE_EXPIRED1009K码已过期ERRCODE_PRODUCT_EXISTS2001商品已存在ERRCODE_PRODUCT_NOT_EXISTS2002商品未存在ERRCODE_PERMISSION_DENY3001权限受限ERRCODE_ROOM_DISCONNECT1607与房间失去连接ENTERLOBBY_RTNFAIL-1进入大厅失败EXITLOBBY_RTNFAIL-2退出大厅失败EXITGAME_RTNFAIL-3退出游戏失败ERR_ENTEROOM_BEFORE_EXITROOM-4未退出上一个房间就进入下一个房间ERR_CURRENT_ROOMID-5当前的房间ID与方法传入的房间ID不一致ERRCODE_INVALID_PARAMETER12参数不正确ERRCODE_USER_NOT_EXIST13用户不存在ERRCODE_AUTHRIZATION_FAILED15授权失败ERRCODE_TOKEN_TIMEOUT16Token已过期ERRCODE_USER_NOT_BIND_THIS_THIRD_ACCOUNT30无法绑定这个第三方账号ERRCODE_USER_HAS_BIND_THIS_THIRD_ACCOUNT31此游客账号已经绑定第三方账号ERRCODE_THIS_THIRD_ACCOUNT_HAS_BIND32这个第三方账号存在绑定ERRCODE_THIS_COUNTRY_IS_FORBIDDEN110国家或地区被限制ERRCODE_UNKNOWN200未知错误ERRCODE_USER_PRODUCT_NOT_ENOUGH1001用户商品不足ERRCODE_USER_DIAMOND_NOT_ENOUGH1002用户钻石不足ERRCODE_USER_GOLD_NOT_ENOUTH1003用户金币不足ERRCODE_USER_PRODUCT_EXPIRED1004用户商品已过期ERRCODE_USER_MONEY_NOT_PAYED1005用户佣金未支付ERRCODE_PRODUCT_NOT_BELONGED_THIS_GAME1006此商品不属于该游戏ERRCODE_DIAMONE_COULD_NOT_EXCHANGED1007不可兑换成钻石ERRCODE_KEYCODE_EXPIRED1009K码已过期ERRCODE_PRODUCT_EXISTS2001商品已存在ERRCODE_PRODUCT_NOT_EXISTS2002商品未存在ERRCODE_PERMISSION_DENY3001权限受限
0 0
原创粉丝点击