Unity和iOS之间的桥接

Unity和iOS之间的桥接
为了在unity3d中使用插件,必须做两件事。

  • 用基于C的语言编写函数并将其编译为库
  • 创建一个C#脚本来调用库中的函数

要创建iOS插件,必须遵循五个步骤

  1. 创建一个新的unity3d项目
  2. 在Assets文件夹的Plugins文件夹中创建iOS文件夹
  3. 将iOS 文件分别放入其文件夹
  4. 编写C包装程序代码以将本机API公开给C#
  5. 点击“Assets - Export Package”菜单,将插件导出为unity3d包

桥接文件可以单独创建一个文件夹处理,也可以直接放在对象的桥接平台中创建

Assets
└── Plugins
    ├─  Bridge
    └── iOS
        ├── UBaseAds.h
        ├── UBaseAds.mm
        ├── ......

iOS模块
在iOS中我们有一个UBaseAds.h 的 和 一个UBaseAds.mm文件,这里的.mm文件已经通过转义成C++
代码,通过C语言去调用OC的方法实现

#import <Foundation/Foundation.h>
#import <ScorerAdManager.h>
#import "UBaseAds.h"

#ifdef __cplusplus
extern "C"
{
#endif
    
static ScorerAdManager *s_bbase_ad = NULL;
UIViewController *UnityGetGLViewController();

void ads_create() {
    if (s_bbase_ad == NULL) {
        s_bbase_ad = [ScorerAdManager shareInstance];
    }
}
#ifdef __cplusplus
}
#endif

在这个.mm 文件中公开了C语言函数 ads_create(),然后,如何在C#脚本中调用C函数?

using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;
using AOT;
namespace Ubase
{
#if UNITY_IOS && !UNITY_EDITOR
     [DllImport("__Internal")]
     private static extern void ads_create();
     public Ads() {
         ads_create();
        }
#endif
}

宏UNITY_IPHONE意味着这些代码仅在iOS系统中生效,[DllImport("__Internal")]意味着静态链接C包装器代码。
然后,创建Ads()方法,这是其他C#脚本可以使用的真实接口。

额外补充:
如果我的iOS库依赖于其他库或框架,我该怎么办?
在unity3d项目中,导出到iOS将生成一个Xcode项目,然后您可以在其中添加依赖项。

导出为xcode的目录解析

Classes文件夹:

  Unity Runtime和ObjectC代码

  main.mm和AppController.mm:应用程序入口点

  iPhone_Profiler.h:定义了启用内部分析器(Internal Profiler)的编译器条件句

Libraries文件夹:

  已翻译成ARM汇编程序的.NET程序集

  libiPhone-lib.a:Unity Runtime静态库

  RegisterMonoModules.cpp:绑定了Unity本地代码与.NET

Info.plist:属性列表

  由Unity的PlayerSettings管理,不应修改此文件。

Products文件夹:

  生成执行文件所在目录

Frameworks文件夹:

  外部库

PostProcessBuildAttribute
将此属性添加到在构建播放器后(build player)立即获取通知的方法。
PostProcessBuildAttribute可以选择从0开始在回调中提供顺序索引。如果您有多个PostProcessBuildAttribute回调,并且希望按特定顺序调用它们,则此方法很有用。回调从零开始按顺序调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容

  • 本文原创版权归 博客园吴秦所有,此处纯粹技术收藏,如有再转,敬请于显示位置标明原创作者及出处,以示尊重!! 作者:...
    Magic_Dong阅读 4,551评论 0 7
  • unity3d是一个跨平台的应用非常广泛的3d引擎,本文记录的是自己将其应用到iOS平台时遇到的一些问题和解决办法...
    油焖微风阅读 6,869评论 3 7
  • 文/中心点 从我认识那天他算起,这是我第一次看见他哭,虽然他已经有八十多岁了,但这次,他哭得却像个找不到妈妈的孩子...
    头发浓密小宝贝阅读 293评论 2 4
  • 从前有座山,山上有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,哈哈哈哈哈哈哈 从前有一个公主,她说...
    维克多_d273阅读 276评论 0 1
  • 哈喽大家好我是骆长珊,今天是2018年1月26日,今天是我每天一篇文章的第64篇。 本篇要点: 一:说明诊断首先要...
    骆长珊阅读 191评论 0 0