二、Unity调用Xcode封装方法

1、开始封装Unity调用接口

我们在Xcode中 写的接口需要在extern "C"中(加上extern "C"后,会指示编译器这部分代码按C语言的进行编译),需要了解这个作用的童鞋可以自行百度一下这个的作用

#ifdef __cplusplus
extern "C"{
#endif
    
    NSString * charToString(char * c){
        return [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
    }

    void init(char * objserver){
        [UnityExtend share];
        [UnityExtend share].observer = charToString(objserver);
        NSLog(@"传入的物体名称%s:",objserver);
    }
    
#ifdef __cplusplus
}
#endif

2、打包.a库 复制到unity目录下方

我们先选择 下图这个样子,然后点击旁边的运行按钮

运行之后我们会出现这个.a文件  我们把这个文件从文件夹复制到unity的Plugins文件夹下


3、我们开始编写c#代码

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

/// <summary>
/// ios 接口
/// </summary>
public class IosInterface 
{
   #if UNITY_IOS
   
    [DllImport("__Internal")]
    public static extern void init(string observer);

   #endif
}
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// api 接口类 
/// </summary>
public class Extend:CvMonoSignten<Extend>
{
    public override void Init()
    {
        base.Init();
        DontDestroyOnLoad (this);
    }

    public void InitSDK(){
        #if UNITY_IOS
        IosInterface.init(this.gameObject.name);
        #endif
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 单例工具类
/// </summary>
/// <typeparam name="T">泛型</typeparam>
public abstract class CvMonoSignten<T> : MonoBehaviour where T :CvMonoSignten<T>
{
    private static T m_Instance;

    public static T Instance{
        get{
            if(m_Instance == null){
                m_Instance = GameObject.FindObjectOfType (typeof (T)) as T;
                if(m_Instance == null){
                    m_Instance = new GameObject ("CvSingleton of " + typeof(T).ToString(), typeof(T)).GetComponent<T> ();
					m_Instance.Init ();
                }
            }
            return m_Instance;
        }
    }

    public virtual void Init(){
        
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestExtend : MonoBehaviour
{
    private void Start()
    {
        Debug.Log("------开始运行");
        Extend.Instance.InitSDK();
    }
}

4、现在我们开始打包Ios 工程

5、打包成功之后我们开始运行

双击我们刚刚打包的这个文件

打包之后  选择我们的账号,等待验证通过 

通过之后我们直接运行,运行之后可以看到我们调用成功

posted @   Aaron丶Han  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示