一、下载和安装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输出错误
Exception: JNI: Init'd AndroidJavaClass with null ptr!UnityEngine.AndroidJavaClass..ctor (IntPtr jclass) (at C:/buildslave/unity/build/Runtime/Export/AndroidJavaImpl.cs:556)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平台测试通过后再切换到正式环境)
MatchVSEngine.getInstance().init(null, MatchVSEngineConfigBuilder.getDefault().setMode(0));
五、对战-接口说明
public interface IMatchVSEngineListener;
以下为接口用于接收来自引擎功能调用后的反馈.
游戏登录/*** 登录大厅结果通知** @param ko_lobby_login_rsp_t*/void onEnterLobbyRsp(int responseCode);游戏开始通知/*** 游戏开始*/void onGameStart(long pRoundID);更换房主通知/*** 房主更换** @param userid 房主ID*/void onRoomMasterChanged(int pMasterUserID);进入房间通知/*** 进入房间* @param 进入房间结果码 小于0为失败,大于0为进入的房间ID*/void onEnterRoom(int pRet);房间成员动态变化通知/*** 当前房间动态,房间用户变化** @param pUserID 用户ID* @param pStatus**/void onRoomUsersChanged(MatchVSRoomUserState[] pMatchVSRoomUserStates);房间延迟通知/*** 当前房间延迟情况* @param pMatchVSRoomUserStates 房间每个用户的延迟*/void onRoomDelay(MatchVSRoomDelay[] pMatchVSRoomDelay);游戏结束通知/*** 游戏结束 表示游戏已经结束* @param pScore 空的数据 游戏结果以OnGameResult为准*/void onGameOver(MatchVSScore[] pScore);游戏结果通知/*** 游戏结果通知* @param pScores 所有玩家的游戏对战结果*/void onGameResult(int pResultCode, MatchVSScore[] pScores, String pMessage);接收用户数据通知/*** 接收用户数据** @param userid 发送数据的玩家UserID* @param pData 数据*/void onDataReceived(int pUserid, byte[] pData);引擎异常通知/*** 引擎所有异常和错误回调* @param pErrorCode 错误码* @param pMessage 错误信息*/void onError(int pErrorCode);退出大厅通知/*** 退出大厅成功*/void onExitLobby();
MatchVSEngine类说明
对战引擎的所提供的所有功能都通过下列方法实现.
/***获得引擎实例*@return 引擎实例*//Public static MatchVSEngine.getinstance();注册对战引擎监听/***注册对战引擎监听*@param pListener 监听对象*//Public void addMatchVSEngineListener;反注册对战引擎/***反注册对战引擎监听*@param pListener 监听对象*//Public void removeMatchVSEngineListener;初始化SDK/*** 初始化SDK** @param pApplication** @return* @throws IllegalAccessException*/public bool init(Application pApplication)进入游戏大厅/*** 用户进入大厅和登录游戏授权** @param pDevelopID* @param pUserID* @param pGameID* @param pGameVersion* @param pToken* @*/public void enterLobby(int pDevelopID, int pUserID, int pGameID, int pGameVersion, String pToken)退出大厅/*** 退出大厅** @return* @* @throws NotEntryLobbyException*/public void exitLobby()是否已经初始化/*** 是否已经初始化SDK** @return*/public bool isInit()是否已经进入大厅/*** 是否进入过大厅** @return*/public bool isEnterLobby()是否游戏中/*** 游戏是否开始* @return*/public bool isGameStart()房间成员准备状态/*** 是否其他成员已经准备** @return*/public bool isRoomOtherUserReadyed()传送数据/*** 发送数据给房间其他人** @param pRoomUser* 默认是所有人* @param pData* 数据*/public void sendData(MatchVSRoomUser pRoomUser, byte[] pData)传送可靠数据/*** 发送数据给房间其他人(可靠,无丢包)* @param pRoomUser 默认是所有人* @param pData 数据* @*/public void sendReliableData(MatchVSRoomUser pRoomUser, byte[] pData)进入房间/***进入某场次内的房间*@param pRoomID 正数为指定进入房间,0为随机进入房间*/public void enterRoom(int pRoomID)更换房间/*** 更换房间,在当前房间中重新进入另一个房间.随机匹配.*/public void changeRoom()退出房间/*** 退出房间** @param pRoomID*/public void exitRoom(int pRoomID)准备游戏/*** 游戏准备. 多人游戏中房主后准备*/public void gameReady()开始游戏/*** 游戏开始 v1.1*/public void gameStart()取消准备/*** 取消准备 v1.1*/public void gameCancel()游戏结束/*** 结束游戏.** @param pScore* 游戏得分,用于结算*/public void gameOver(MatchVSScore pScore)反初始化引擎/*** 反初始化引擎*/public void uninit();得到引擎状态/*** 得到引擎的状态** @return*/public int getEngineState()是否房主/*** 是否是房主* @return*/public bool isRoomMaster()获取房主ID/*** 获取房主用户ID* @return*/public int getRoomMasterID()得到用户对战信息/*** 获取用户对战信息** @param pCallBack* @param pUserID*/public void getUserDetail(int pUserID, MatchVSCallback<MatchVSBattleDetail> pCallBack)登录结果/***登录结果*/public void onLogin(int returnCode)
六、错误码
| 错误码 | 常量 | 说明 |
|---|---|---|
| CODE_SUCCESS | 0 | 调用方法成功 |
| ROOM_RTN_OK | 200 | 成功 |
| ROOM_RTN_FAILED | 300 | 调用方法失败 |
| CODE_TOKEN_INVALUE | 201 | token无效 |
| KO_LOBBY_ERRCODE_AUTH_FAILED | 500 | 认证失败 |
| KO_LOBBY_ERRCODE_NO_THIS_USER | 501 | 无此用户 |
| KO_LOBBY_ERRCODE_NO_USER_CACHE | 502 | 用户缓存已满 |
| KO_LOBBY_ERRCODE_NO_THIS_ROOM | 600 | 无此房间 |
| KO_ROOM_ERRCODE_NO_THIS_ROOM | 101 | 无此房间 |
| KO_ROOM_ERRCODE_FULL_USERS | 102 | 用户已满 |
| KO_ROOM_ERRCODE_ALREADY_IN | 103 | 用户已经在房间内 |
| KO_ROOM_ERRCODE_ALREADY_OUT | 104 | 用户已经离开 |
| KO_ROOM_ERRCODE_EMPTY | 105 | 房间是空的 |
| KO_ROOM_ERRCODE_NO_THIS_USER | 106 | 无此用户 |
| KO_ROOM_ERRCODE_NOT_ENOUGH | 107 | 用户钱不够或者金币太多 |
| KO_ROOM_ERRCODE_NO_THIS_FIELD | 108 | 无此场 |
| KO_ROOM_ERRCODE_FIELD_THRES_FAILED | 109 | 门槛进不去 |
| KO_ROOM_ERRCODE_FIELD_CHECK_FAILED | 110 | 场校验失败 |
| KO_ROOM_ERRCODE_FIELD_NO_THIS_GAME | 111 | 无此游戏 |
| KO_ROOM_ERRCODE_ALREADY_STATE_READY | 112 | 用户已经在准备了 |
| KO_ROOM_ERRCODE_ALREADY_STATE_PLAY | 113 | 用户已经开始了 |
| KO_ROOM_ERRCODE_ALREADY_STATE_OVER | 114 | 用户已经结束了 |
| KO_ROOM_ERRCODE_ROOM_PLAYING | 120 | 房间正在游戏中 |
| KO_ROOM_ERRCODE_ROOM_NOT_PLAYING | 121 | 房间不在游戏中 |
| KO_ROOM_ERRCODE_ROOM_OVER_NOT_EXPIRE | 130 | 房间暂时还不能进 |
| KO_ROOM_ERRCODE_USER_NOT_ENOUTH_TO_PLAY | 140 | 用户数还不够对战人数下限 |
| KO_ROOM_ERRCODE_USER_NOT_OWNER | 141 | 用户非房主 |
| KO_ROOM_ERRCODE_USER_NOT_READY | 142 | 用户没有准备 |
| KO_ROOM_ERRCODE_VERSION_NOT_SURPPORT_REAL | 161 | 当前版本不支持中途加入 |
| KO_ROOM_ERRCODE_NO_ROOM_FOR_TRAIL | 162 | 不存在中途加入的房间 |
| KO_ROOM_ERRCODE_SET_ROOM_ATTR_FAILED | 163 | 不能设置此房间属性 |
| ERRCODE_NETWORK_DISCONNECT | 1606 | 连接断开 |
| ERRCODE_ROOM_DISCONNECT | 1607 | 与房间失去连接 |
| ENTERLOBBY_RTNFAIL | -1 | 进入大厅失败 |
| EXITLOBBY_RTNFAIL | -2 | 退出大厅失败 |
| EXITGAME_RTNFAIL | -3 | 退出游戏失败 |
| ERR_ENTEROOM_BEFORE_EXITROOM | -4 | 未退出上一个房间就进入下一个房间 |
| ERR_CURRENT_ROOMID | -5 | 当前的房间ID与方法传入的房间ID不一致 |
| ERRCODE_INVALID_PARAMETER | 12 | 参数不正确 |
| ERRCODE_USER_NOT_EXIST | 13 | 用户不存在 |
| ERRCODE_AUTHRIZATION_FAILED | 15 | 授权失败 |
| ERRCODE_TOKEN_TIMEOUT | 16 | Token已过期 |
| ERRCODE_USER_NOT_BIND_THIS_THIRD_ACCOUNT | 30 | 无法绑定这个第三方账号 |
| ERRCODE_USER_HAS_BIND_THIS_THIRD_ACCOUNT | 31 | 此游客账号已经绑定第三方账号 |
| ERRCODE_THIS_THIRD_ACCOUNT_HAS_BIND | 32 | 这个第三方账号存在绑定 |
| ERRCODE_THIS_COUNTRY_IS_FORBIDDEN | 110 | 国家或地区被限制 |
| ERRCODE_UNKNOWN | 200 | 未知错误 |
| ERRCODE_USER_PRODUCT_NOT_ENOUGH | 1001 | 用户商品不足 |
| ERRCODE_USER_DIAMOND_NOT_ENOUGH | 1002 | 用户钻石不足 |
| ERRCODE_USER_GOLD_NOT_ENOUTH | 1003 | 用户金币不足 |
| ERRCODE_USER_PRODUCT_EXPIRED | 1004 | 用户商品已过期 |
| ERRCODE_USER_MONEY_NOT_PAYED | 1005 | 用户佣金未支付 |
| ERRCODE_PRODUCT_NOT_BELONGED_THIS_GAME | 1006 | 此商品不属于该游戏 |
| ERRCODE_DIAMONE_COULD_NOT_EXCHANGED | 1007 | 不可兑换成钻石 |
| ERRCODE_KEYCODE_EXPIRED | 1009 | K码已过期 |
| ERRCODE_PRODUCT_EXISTS | 2001 | 商品已存在 |
| ERRCODE_PRODUCT_NOT_EXISTS | 2002 | 商品未存在 |
| ERRCODE_PERMISSION_DENY | 3001 | 权限受限 |
| ERRCODE_ROOM_DISCONNECT | 1607 | 与房间失去连接 |
| ENTERLOBBY_RTNFAIL | -1 | 进入大厅失败 |
| EXITLOBBY_RTNFAIL | -2 | 退出大厅失败 |
| EXITGAME_RTNFAIL | -3 | 退出游戏失败 |
| ERR_ENTEROOM_BEFORE_EXITROOM | -4 | 未退出上一个房间就进入下一个房间 |
| ERR_CURRENT_ROOMID | -5 | 当前的房间ID与方法传入的房间ID不一致 |
| ERRCODE_INVALID_PARAMETER | 12 | 参数不正确 |
| ERRCODE_USER_NOT_EXIST | 13 | 用户不存在 |
| ERRCODE_AUTHRIZATION_FAILED | 15 | 授权失败 |
| ERRCODE_TOKEN_TIMEOUT | 16 | Token已过期 |
| ERRCODE_USER_NOT_BIND_THIS_THIRD_ACCOUNT | 30 | 无法绑定这个第三方账号 |
| ERRCODE_USER_HAS_BIND_THIS_THIRD_ACCOUNT | 31 | 此游客账号已经绑定第三方账号 |
| ERRCODE_THIS_THIRD_ACCOUNT_HAS_BIND | 32 | 这个第三方账号存在绑定 |
| ERRCODE_THIS_COUNTRY_IS_FORBIDDEN | 110 | 国家或地区被限制 |
| ERRCODE_UNKNOWN | 200 | 未知错误 |
| ERRCODE_USER_PRODUCT_NOT_ENOUGH | 1001 | 用户商品不足 |
| ERRCODE_USER_DIAMOND_NOT_ENOUGH | 1002 | 用户钻石不足 |
| ERRCODE_USER_GOLD_NOT_ENOUTH | 1003 | 用户金币不足 |
| ERRCODE_USER_PRODUCT_EXPIRED | 1004 | 用户商品已过期 |
| ERRCODE_USER_MONEY_NOT_PAYED | 1005 | 用户佣金未支付 |
| ERRCODE_PRODUCT_NOT_BELONGED_THIS_GAME | 1006 | 此商品不属于该游戏 |
| ERRCODE_DIAMONE_COULD_NOT_EXCHANGED | 1007 | 不可兑换成钻石 |
| ERRCODE_KEYCODE_EXPIRED | 1009 | K码已过期 |
| ERRCODE_PRODUCT_EXISTS | 2001 | 商品已存在 |
| ERRCODE_PRODUCT_NOT_EXISTS | 2002 | 商品未存在 |
| ERRCODE_PERMISSION_DENY | 3001 | 权限受限 |
本文档详述了如何使用Unity3D和MatchVS SDK开发网络对战游戏,包括下载安装、调试发布、接口调用流程及错误码说明等内容。
3237

被折叠的 条评论
为什么被折叠?



