返回顶部
首页 > 资讯 > 后端开发 > Python >Unity3D 接入IOS SDK
  • 322
分享到

Unity3D 接入IOS SDK

Unity3DIOSSDK 2023-01-31 06:01:51 322人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Unity3D 开发游戏需要接入平台方的SDK才能够正式发布,本文记录iOS SDK接入的流程。Unity与IOS的互调要实现游戏SDK的接入,首先要解决的是Unity3D与原生ioS代码之间的相互调用问题。Unity使用C#作为开发语言,

Unity3D 开发游戏需要接入平台方的SDK才能够正式发布,本文记录iOS SDK接入的流程。


Unity与IOS的互调


要实现游戏SDK的接入,首先要解决的是Unity3D与原生ioS代码之间的相互调用问题。Unity使用C#作为开发语言,而IOS采用Objective-C作为开发语言,如何让C#调用OC代码,或者让OC调用C#代码。所幸OC和C#都支持直接嵌入C/C++代码,这里使用C作为两者之间的桥梁。


为了简化两者之间的接口调用和数据传递,在设计Unity与IOS SDK之间的接口时,Unity调用SDK只有一个接口,而SDK调用Unity也只有一个接口。由于平台方的SDK差异性较大,如何保证一个接口可以解决问题?这里我们开发了一个通用SDK层,游戏只会与通用SDK层交互,而由通用SDK层再与具体的平台SDK对接。


Unity中调用SDK层的功能:

using System.Runtime.InteropServices;
using Cross;
using UnityEngine;

namespace MuGame
{
    public class IOSPlatfORMSDK : IPlotformSDK
    {
        //!--IOS插件声明,所有unity调用ios SDK插件走这里
        [DllImport("__Internal")]
        public static extern void CallSDKFunc(string type, string JSONpara);

unity中所有的调用都转化为CallSDKFunc,该函数由通用SDK提供,参数type表示功能分类,jsonpara是以json字串表示的一系列参数。


通用SDK调用返回结果给Unity

//!---------------------------外部接口声明--------------------------------------------
#if defined(__cplusplus)
extern "C"{
#endif
    extern void UnitySendMessage(const char*, const char*, const char*);
#if defined(__cplusplus)
}
#endif

这里使用unityengine.dll提供的C接口UnitySendMessage,这里第1个char* 表示接受该消息的GameObject的name, 第2个表示该GameObject的脚本中接受消息的函数名,第3个表示传递的数据,这里我们还是使用json来传递,同时附带消息类型。


SDK暴露的C接口的声明与定义

#if defined(__cplusplus)
extern "C" {
#endif    
    //游戏层访问SDK的接口
    void CallSDKFunc(char *type, char * jsonpara)
    {
        if(connector == NULL)
        {
            connector = [SDKConnector sharedInstance];
        }
        [connector _CallSDKFunc :CreateNSString(type) :CreateNSString(jsonpara)];
    }
    
#if defined(__cplusplus)
}
#endif

这里CallSDKFunc即上述Unity调用SDK的接口,在OC层,直接由SDKConnector类接收,并分发处理。


通用SDK

SDKConnector负责消息的分发

- (void)_CallSDKFunc :(NSString*)type :(NSString*)jsonpara
{
    NSLog(@"[SDK] Recevie cmd = %@   jsonpara = %@\n",type,jsonpara);
    if ([type isEqualToString:@"login"])
    {//登录
        [LanPlatform login:[SDKListener sharedInstance]];
    }
    else if ([type isEqualToString:@"loginout"])
    {//登出
        [LanPlatform loGout:[SDKListener sharedInstance]];
    }
    else if ([type isEqualToString:@"switchAccount"])
    {//切换账号
        [LanPlatform switchAccount:[SDKListener sharedInstance]];
    }
    else if ([type isEqualToString:@"pay"])
    {//充值
        [LanPlatform pay:[SDKListener sharedInstance]];
    }

这里根据type类型将消息分发到通用SDK层对应的处理模块,再由通用SDK层去调用平台SDK的api进行具体的处理,注意这里传入了一个实例SDKListener,SDKListener负责接送平台SDK的回应,并将数据发送至Unity侧。


通用SDK层的功能

目前包含以下常见的模块:登录,登出,切换账号,充值,用户中心,用户论坛,用户反馈,防沉迷,实名认证。以及各项游戏数据的上报:选服,进入游戏,创建角色,升级等等。


应用生命周期SDK

SDK中比较特殊的一类,基本上也是所有SDK都需要接入的API是生命周期API,本文处理项对比较特殊一点。

@protocol SDKLifeCycleListener <NSObject>
@optional
- (void)didFinishLaunching:(NSNotification*)notification;
- (void)didBecomeActive:(NSNotification*)notification;
- (void)willResignActive:(NSNotification*)notification;
- (void)didEnterBackground:(NSNotification*)notification;
- (void)willEnterForeground:(NSNotification*)notification;
- (void)willTerminate:(NSNotification*)notification;
@end

//注册生命周期回调函数
void SDKReGISterLifeCycleListener(id<SDKLifeCycleListener> obj)
{
#define REGISTER_SELECTOR(sel, notif_name)					\
        if([obj respondsToSelector:sel])							\
            [[NSNotificationCenter defaultCenter] 	addObserver:obj	\
                                                    selector:sel	\
                                                    name:notif_name	\
                                                    object:nil		\
            ];														\

    REGISTER_SELECTOR(@selector(didFinishLaunching:), UIApplicationDidFinishLaunchingNotification);
    REGISTER_SELECTOR(@selector(didBecomeActive:), UIApplicationDidBecomeActiveNotification);
    REGISTER_SELECTOR(@selector(willResignActive:), UIApplicationWillResignActiveNotification);
    REGISTER_SELECTOR(@selector(didEnterBackground:), UIApplicationDidEnterBackgroundNotification);
    REGISTER_SELECTOR(@selector(willEnterForeground:), UIApplicationWillEnterForegroundNotification);
    REGISTER_SELECTOR(@selector(willTerminate:), UIApplicationWillTerminateNotification);
    
#undef REGISTER_SELECTOR
}

这里定义了一个SDK生命周期监听的协议SDKLifeCycleListener, 以及注册该协议的接口SDKRegisterLifeCycleListener。在App加载的时候,将该监听注册进去,实现该协议的也是SDKListener。

@implementation SDKListener

//加载函数,实现在加载该类时,注册生命周期监听函数
+(void)load
{
    NSLog(@"[SDK] load\n");
    SDKRegisterLifeCycleListener([SDKListener sharedInstance]);
}


小结

至此,大概介绍了一下所实现的IOS SDK的方法。简而言之,unity通过CallSDKFunc调用通用SDK功能,通用SDK通过SDKConnector分发消息给具体的通用SDK模块,再由平台SDK处理。SDKListener负责接收平台处理的结果和生命周期事件,并将需要的结果返回给Unity。

就目前的实现来看,能够较好的相对解耦游戏与SDK之间的联系,不会因平台的差异性导致游戏代码的频繁改动。当然目前接入的SDK还相对较少还需测试

--结束END--

本文标题: Unity3D 接入IOS SDK

本文链接: https://lsjlt.com/news/190619.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Unity3D 接入IOS SDK
    Unity3D 开发游戏需要接入平台方的SDK才能够正式发布,本文记录IOS SDK接入的流程。Unity与IOS的互调要实现游戏SDK的接入,首先要解决的是Unity3D与原生IOS代码之间的相互调用问题。Unity使用C#作为开发语言,...
    99+
    2023-01-31
    Unity3D IOS SDK
  • [Unity3D] U3D实现与iOS交
    在开发中有很多情况下会用到U3D调用iOS中的函数。例如在U3D中,我们需要调用到一个iOS 的函数,例如:广告插件。(都有现成的代码大家只需要调用下的那种。)这个时候我们就需要在U3D中写一个方法。这个方法去调用iOS中的函数。U3D中写...
    99+
    2023-01-31
    Unity3D U3D iOS
  • IOS接入facebook详解
    facebook 接入 1.在 facebook 后台 配置 ios 平台, 获取 fb appid store id 可以先随便找一个已存在的填入进去. 2.CocoaPods ...
    99+
    2022-05-20
    IOS facebook SDK
  • java怎么接入微信JS-SDK
    本文小编为大家详细介绍“java怎么接入微信JS-SDK”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么接入微信JS-SDK”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • Unity与Android交互(4)——接入SDK
    【前言】 unity接入Android SDK有两种方式,一种是把Unity的工程导出google project的形式进行接入,另一种是通过把Android的工程做成Plugins的形式进行接入。我们接入SDK基本都是将SDK作为插件的形...
    99+
    2023-08-31
    接入Android SDK
  • PHP 接入shopify SDK 详细讲解
    前言: 有关 shopify 的实操例子太少了 为了给后面的人行以方便,也为了我下次不那么麻烦。我打算记录一下我的代码以及操作流程 首先既然是有关shopify的操作,你必须有一个shopify账号.(创建流程就不在这里进行描述) ...
    99+
    2023-09-04
    php 经验分享 其他
  • iOS SDK集成的方法有哪些
    这篇文章主要介绍了iOS SDK集成的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇iOS SDK集成的方法有哪些文章都会有所收获,下面我们一起来看看吧。###CocoaPods集成安装CocoaPo...
    99+
    2023-06-05
  • Unity3D快速入门教程
    Unity3D游戏引擎介绍 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏...
    99+
    2024-04-02
  • Unity使用Android Stdio接入SDK制作AAR包
    最近需要在Unity2021版本中接入SDK,发现和直接接入SDK有些区别,这里把接入的流程记录一下。 Unity在最新的版本中把UnityPlayActivity.java,从Class.jar中移除,需要在Unity的工程内找到这个文件...
    99+
    2023-09-08
    unity android SDK
  • IOS客户端接入微信支付
    实际上,从代码的角度,调起支付APP就是把一些关键的参数通过一定方式打包成为一个订单,然后发送到支付平台的服务器。所以,只要搞清楚了参数设置,搞清楚了每个支付平台的SDK里面一些关键...
    99+
    2022-05-20
    ios 微信支付 微信客户端
  • Unity3D 如何导入Maya 动画
     Unity3D 可以自动导入ma,mb,fbx文件,通常Maya里编辑好以后,直接拖拽到Unity的资源面板即可,也可以存放到Unity的project文件夹下,会自动的识别和导入。  导入的时候需要注意  1. Maya的特殊的功能不...
    99+
    2023-01-31
    动画 Unity3D Maya
  • 【Android -- 开源库】腾讯 TBS 浏览器 SDK 接入
    简介 在 Android 开发项目中,经常会用到 Webview 。而 WebView 是出了名的坑,各种 Bug。腾讯 TBS 浏览服务面向应用开发商和广大开发者,提供浏览增强,内容框架,广告体系,...
    99+
    2023-09-26
    android 开源
  • vue如何导入sdk
    在vue中导入sdk的方法:1.新建vue.js项目;2.使用npm安装sdk依赖包;3.配置config文件;4.使用import方法导入sdk;具体步骤如下:首先,在vue-cli中创建一个vue.js项目;vue create pro...
    99+
    2024-04-02
  • 手把手教你接入华为分析的Android SDK
    原文地址:...
    99+
    2019-03-25
    手把手教你接入华为分析的Android SDK 数据库入门 数据库基础教程 数据库 mysql
  • 微信JS SDK接入的注意事项有哪些
    这篇文章主要介绍微信JS SDK接入的注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤:1.绑定域名:...
    99+
    2024-04-02
  • unity3d新手入门必备教程
       Unity3D入门教程中文版    Unity3D基本操作、    用Unity3D创建简单漫游... 1    基本设置... 1    修改视角控制键为右键... 9    如何取消浏览窗口上的右键菜单... 10    植物效...
    99+
    2023-01-31
    新手入门 教程 unity3d
  • 解决SDK注入权限验证安卓正常,IOS出现config fail的方法
    实测有效 解决微信游览器和企业微信游览器JSSDK注入权限验证 安卓正常,IOS出现config fail 一开始我们想到的是可能微信这边的Bug,但细想一下应该不是。因为可能涉及到...
    99+
    2022-05-18
    SDK IOS config fail
  • 【Unity3D】Unity 3D 连接 MySQL 数据库
    Navicat准备 test 数据库,并在test数据库下创建 user 数据表,预先插入测试数据。 启动 Unity Hub 新建一个项目,然后在Unity编辑器的 Project视图 中,右击新建一个 Plugins 文件夹将连接 M...
    99+
    2023-09-14
    unity 游戏引擎 c# mysql 数据库
  • iOS调用高德地图SDK的完整步骤
    目录准备工作:方法如下:其中申请key的方法如下:接下来就进入到项目内部的设置了:重要的点:总结准备工作: 安装CocoaPods使用下载第三方库相同的方法下载SDK 方法如下: (...
    99+
    2022-06-04
    ios 高德地图 sdk
  • android怎么导入sdk包
    要导入Android SDK包,你可以按照以下步骤进行操作:1. 打开Android Studio,点击顶部菜单栏中的"File"(...
    99+
    2023-09-16
    android sdk
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作