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、打包成功之后我们开始运行
双击我们刚刚打包的这个文件
打包之后 选择我们的账号,等待验证通过
通过之后我们直接运行,运行之后可以看到我们调用成功