美文网首页程序员
Unity和iOS之间的桥接

Unity和iOS之间的桥接

作者: lumic000 | 来源:发表于2020-02-28 10:41 被阅读0次

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回调,并且希望按特定顺序调用它们,则此方法很有用。回调从零开始按顺序调用。

相关文章

  • Unity和iOS之间的桥接

    Unity和iOS之间的桥接为了在unity3d中使用插件,必须做两件事。 用基于C的语言编写函数并将其编译为库 ...

  • Unity与iOS交互,Unity脚本修改Xcode工程

    Unity与iOS交互 Unity调用iOS的方法,首先在Xcode中新建一个iOS的桥接类,并且将.m的后缀修改...

  • 【iOS开发】iOS中的桥接

    ios-关于桥接 iOS-关于桥接Ios中的桥接 关键点 iOSSDK中的框架做分层处理 CoreFoundati...

  • __bridge

    阅读:iOS 学习日志(5) -----ARC中的__bridgeARC下OC对象和CF对象之间的桥接(bridg...

  • 之界面跳转

    本文介绍了iOS和Unity交互,主要涉及两个界面之间的跳转. 如果对iOS和Unity交互传参方法不熟悉的朋友,...

  • 2022-03-30

    iOS集成Unity 近年来iOS和Unity发展都非常迅速,而iOS和Unity都有各自擅长的领域,iOS在传统...

  • Toll-free bridging

    字面意思是“免费桥接技术”,桥接的是Core Foundation框架和 Foundation框架之间的数据。 通...

  • __bridge的作用

    ARC下OC对象和CF对象之间的桥接(bridge) 在开发iOS应用程序时我们有时会用到Core Foundat...

  • unity与android 、ios交互

    unity和ios交互: unity调用ios的方法: c#:[DllImport("__Internal")] ...

  • OC和Swift语言互调

    OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通...

网友评论

    本文标题:Unity和iOS之间的桥接

    本文链接:https://www.haomeiwen.com/subject/hgykhhtx.html