美文网首页程序员
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之间的桥接

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