资讯动态 > Unreal 4接入文档
不同版本的unreal engine有对应的visual studio版本以及windows sdk,安装virsual stido时需要安装编程语言vc++相应组件,安装过程可参考https://docs.unrealengine.com/latest/CHN/GettingStarted/index.html
当前文档支持的环境为unreal engine4.16.3,virsual studio2015,windows sdk8.1。
安装CodeWorksforAndroid,以当前开发环境为例,打开UE4.16.3的安装目录:
安装UE_4.16EngineExtrasAndroidWorksWin64CodeWorksforAndroid-1R6u1-windows.exe。选择安装路径:
安装过程参考:https://docs.unrealengine.com/latest/CHN/Platforms/Android/Reference/index.html
注意:UE4使用的是有专有的android sdk,建议删除之前配置的andorid sdk系统和用户环境变量。
安装过程参考:https://docs.unrealengine.com/latest/CHN/Platforms/Android/Reference/index.html
注意:UE4使用的是有专有的android sdk,建议删除之前配置的andorid sdk系统和用户环境变量。
导入资源
提供的demo目录结构如下
打开UE_4.16EngineBuildAndroidJava显示如下:
将demo中的libs复制到UE_4.16EngineBuildAndroidJavalibs下。
将demo 的assets复制到UE_4.16EngineBuildAndroidJava路径下。
将demo中res下文件夹下的文件复制到UE_4.16EngineBuildAndroidJavares对应的目录中。
打开UE_4.16EngineSourceProgramsUnrealBuildToolAndroid目录:
把UEDeployAndroid.cs 替换UE_4.16EngineSourceProgramsUnrealBuildToolAndroidUEDeployAndroid.cs。
导入C++文件
打开项目,项目结构如下:
复制demo中c++文件至Unreal Projectsdemo2dSourcedemo2d,右键项目添加现有项,将QuickSDK.h、QuickSDK.cpp、QuickSDKAndroid.h、QuickSDKAndroid.cpp导入vs2015中:
配置ndk环境,包含目录配置为NVPACKandroid-ndk-r12bplatformsandroid-24arch-armusrinclude:
打包配置
打开编辑>项目设置>平台>Android软件开发工具包
安装AndroidWorks的时候默认配置了用户环境变量,因而此处不需要配置,如果用户环境变量发生变化,或打包失败,请在此处配置变量,打开NVPACK目录:
Location of Android SDK选项配置为NVPACKandroid-sdk-windows
Location of Android NDK:选项配置为 NVPACKandroid-ndk-r12b
Location of Ant选项配置为NVPACKapache-ant-1.8.2
Location of JAVA选项配置为NVPACKjdk1.8.0_77
打开编辑>项目设置>平台>Android
配置包名、横竖屏
配置签名文件
配置应用图标
配置应用闪屏
打开窗口>项目启动程序
自定义启动文件
点击继续
点击继续
点击Create Profile
等待打包完成后,打开Unreal Projectsdemo2dApp1.0Android_ETC1路径
接口:void setInitNotifier(InitNotifier *notifier);
功能:设置获取到登录通知后应做的处理
案例:
class InitNotifierImpl:public InitNotifier{ void onInitSuccess(){ //初始化成功 } void onInitFailed(){ //初始化失败 } } QuickSDK::setLogoutNotifier(new setInitNotifier());
接口:void setLoginNotifier(LoginNotifier *notifier);
功能:设置获取到登录通知后应做的处理
案例:
class LoginNotifierImpl : public LoginNotifier{ void onLoginSuccess(const char* uid, const char* username, const char* token){ //登录成功,获取到用户信息userInfo //通过userInfo中的UID、token做服务器登录认证 } void LoginCancel(){ //登录取消 } Void LoginFailed(){ //登录失败 } } QuickSDK::setLogoutNotifier(new LoginNotifierImpl());
接入要求:
1)启动游戏后,在登录界面中获取到登录成功的通知,跳转到选择服务器界面;
2)游戏没有按钮来调用login的接口,获取到登录失败和登录取消的通知后,应再次调用登录的功能;
3)不同渠道可能返回相同的UID,游戏应使用渠道ID+UID作为用户的唯一标识。渠道ID通过“QuickSDK::getChannelType()”获取。
接口:void setLogoutNotifier(LogoutNotifier *notifier);
功能:设置获取到注销通知后应做的处理
案例:
class LogoutNotifierImpl :public LogoutNotifier { void onLogoutSuccess(){ //注销成功 } Void onLogoutFailed(){ //注销失败不做处理 } } QuickSDK::setLogoutNotifier(new LogoutNotifierImpl());
接入要求:获取到注销成功的通知,游戏应回到登录界面。
接口:void setSwitchAccountNotifier(SwitchAccountNotifier *notifier);
功能:设置用户切换账号结果回调通知的相关处理
案例:
class SwitchAccountNotifierImpl : public SwitchAccountNotifier{ void onSwitchAccountSuccess(const char* uid ,const char* username,const char* token){ //切换账号成功,通过userInfo中的uid、token做服务器登录认证 } Void onSwitchAccountFailed(){ //切换账号失败 } Void onSwitchAccountCancel(){ //切换账号取消 } } QuickSDK::setWitchAccountNotifier(new SwitchAccountNotifierImpl());
接入要求:在游戏界面中,获取到切换账号成功的通知,游戏使用新的用户信息,回到进入游戏的界面。(针对渠道SDK在游戏界面中通过悬浮框进行账号的切换)。
接口:void setPayNotifier(PayNotifier *notifier);
功能:设置获取到支付通知后应做的处理
案例:
class PayNotifierImpl: public PayNotifier { void onPaySuccess(const char *sdkOrderID, const char *cpOrderID, const char *extrasParams) { //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 } void onPayCancel(const char *sdkOrderID, const char *cpOrderID) { //支付取消 } void onPayFailed(const char *sdkOrderID, const char *cpOrderID) { //支付失败 } } QuickSDK::setPayNotifierImpl(new Pay PayNotifierImpl());
接口:void setExitNotifier(ExitNotifier *notifier);
功能:设置获取到退出通知后应做的处理
案例:
class ExitNotifierImpl: public ExitNotifier { public:void onExitSuccess(){ //退出成功 } void onExitFailed() { //退出失败,不做处理 } } QuickSDK::setExitNotifier(new ExitNotifierImpl());
接入要求:最后的退出(activity.finish)由QuickSDK完成,游戏只需做其他的处理。
接口:void login();
功能:调用渠道SDK登录
案例:QuickSDK::login();
接入要求:进入到登录界面时自动调用login接口。
接口:void updateRoleInfoWith(GameRoleInfo gameRoleInfo, bool createRole);
功能:向渠道SDK上传角色信息
案例:
struct GameRoleInfo gameRoleInfo; gameRoleInfo.gameRoleBalance = "6000"; gameRoleInfo.gameRoleID = "100"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "lalala"; gameRoleInfo.partyName = "Justice League"; gameRoleInfo.serverName = "ksnServer"; gameRoleInfo.serverID = "1"; gameRoleInfo.vipLevel = "11"; gameRoleInfo.roleCreateTime = "1473141432"; //UC,当乐与1881渠道必传,值为10位数时间戳 gameRoleInfo.partyId = "1100"; //360渠道参数,设置帮派id,必须为整型字符串 gameRoleInfo.gameRoleGender = "男"; //360渠道参数 gameRoleInfo.gameRolePower = "38"; //360渠道参数,设置角色战力,必须为整型字符串 gameRoleInfo.partyRoleId = "11"; //360渠道参数,设置角色在帮派中的id gameRoleInfo.partyRoleName = "帮主"; //360渠道参数,设置角色在帮派中的名称 gameRoleInfo.professionId = "38"; //360渠道参数,设置角色职业id,必须为整型字符串 gameRoleInfo.profession = "法师"; //360渠道参数,设置角色职业名称 gameRoleInfo.friendlist = "无"; //360渠道参数,设置好友关系列表
格式请参考:http://open.quicksdk.net/help/detail/aid/190
//创建角色
QuickSDK::updateRoleInfoWith(gameRoleInfo, true);//进入游戏及角色升级
QuickSDK::updateRoleInfoWith(gameRoleInfo, false);
GameRoleInfo
字段 | 类型 | 说明 |
serverID |
String |
服务器ID(数字字符串) |
serverName | String | 服务器名称 |
gameRoleName | String | 角色名称 |
gameRoleID | String | 角色ID |
gameRoleBalance | String | 角色用户余额 |
vipLevel | String | VIP等级 |
gameRoleLevel | String | 角色用户等级 |
partyName | String | 公会社团 |
roleCreateTime |
String |
角色创建时间(10位数的时间戳) |
partyId | String | 帮派id |
gameRoleGender | String | 角色性别 |
gameRolePower | String | 角色战力 |
partyRoleId | String | 角色在帮派中的id |
partyRoleName |
String |
角色在帮派中的名称 |
professionId | String | 角色职业id |
profession | String | 角色职业名称 |
friendlist | String | 好友关系列表 |
接入要求:
1)在创建游戏角色、进入游戏和角色升级3个地方调用此接口,当创建角色时createRole值为true,其他两种情况为false;
2)GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值或空字符串;
3)roleCreateTime字段,仅UC与1881渠道必须传此参数,其它渠道不用传,值为10位数的时间戳;
4) partyId,gameRoleGender,gameRolePower,partyRoleId,partyRoleName,
professionId,profession,friendlist这八个字段,仅360渠道需要传(只传游戏有的字段),其它渠道不用传;
5)关于360渠道上传角色信息的具体说明,请参考:http://open.quicksdk.net/help/detail/aid/190
接口:void pay(OrderInfo orderInfo, GameRoleInfo gameRoleInfo);
功能:调用渠道SDK支付
案例:
struct OrderInfo orderInfo; orderInfo.amount = 3; orderInfo.count = 30; orderInfo.cpOrderID = "201505131613001"; orderInfo.extrasParams = "nothing"; orderInfo.goodsID = "001"; orderInfo.goodsName = "Diamond"; struct GameRoleInfo gameRoleInfo; gameRoleInfo.gameRoleBalance = "6000"; gameRoleInfo.gameRoleID = "100"; gameRoleInfo.gameRoleLevel = "1"; gameRoleInfo.gameRoleName = "lalala"; gameRoleInfo.partyName = "Justice League"; gameRoleInfo.serverName = "ksnServer"; gameRoleInfo.serverID = "1"; gameRoleInfo.vipLevel = "11"; QuickSDK::pay(orderInfo, gameRoleInfo);
OrderInfo
字段 | 类型 | 说明 |
goodsID | String | 产品ID,用来识别购买的产品 |
goodsName | String | 产品名称 |
cpOrderID | String | 产品订单号(游戏方的订单号) |
count | int | 游戏币数量 |
amount | double | 总金额(元) |
extrasParams | String | 透传参数 |
为了兼容各个渠道商品名称能够统一显示,订单应以如下案例的形式传入:
案例1: 例2:
amount:6.0 amount:10.0
count:60 count:1
goodsName:元宝 goodsName:月卡
接入要求:
· GoodsName产品名称以“月卡”、“钻石”、“元宝”的形式传入,不带数量;
· 其中OrderInfo中Count字段表示游戏币数量。
· OrderInfo,GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值或空字符。
接口:void logout();
功能:渠道SDK注销
案例:QuickSDK::logout();
退出(必接)
接口:void exit();
功能:渠道SDK退出,游戏做退出逻辑时,先通过channelHasExitDialog接口判断渠道是否有退出框,如果渠道有退出框,直接调用QuickSDK的exit接口;如果渠道没有退出框,则调用游戏自身的退出框,退出框点击“确定”后,调用QuickSDK的exit接口。
//判断渠道是否有退出框 bool b = QuickSDK::channelHasExitDialog(); if (b) { QuickSDK::exit(); } else { //创建游戏的退出框,点击确定后,调用QuickSDK::exit(); }
判断渠道是否有退出框
bool channelHasExitDialog();
判断渠道是否支持该功能
bool isFunctionTypeSupported(FuncType funcType);
调用指定功能
bool callFunction(FuncType funcType);
获取渠道号
int getChannelType();
获取额外参数
const char* getConfigValue(const char* key);
李先生:13880511661
QQ:48157910
郭女士:18349260870
QQ:1077535763
孙女士:13551010407
QQ:1799614139
QQ群:698731538