unity 与oc交互

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 与oc交互相关的知识,希望对你有一定的参考价值。

参考技术A "$(PROJECT_DIR)"代表了工程的根目录
unity 与oc交互主要在于数据间的传递,unity传递的值到了oc这里可以用c接收并解析。基础的一些数据类型对应可以看下如下:

在Object-C的工具里面吧***.mm写好,放到Unity项目的Assets/Plugins/ios下面。(Unity2018及以上只要放在任意iOS的夹下即可)
在C#里面写上代static extern的 函数,与C里面的函数同名。
一.基础的调用参数,无传参
ocClass.mm

CsharpCallOC.cs

二.传递参数
ocClass.mm

CsharpCallOC.cs

三.OC回调Unity
1.使用函数指针接口方法进行回调,可以传参,也可以带返回参数,调用灵活。(推荐使用)
2.UnitySendMessage()需要有固定的游戏物体,按名称查找,并且是激活状态,不能隐藏(不推荐,无法灵活使用)。

此处记录unity编辑器打包xcode自动化脚本。大部分的目录与属性都可以个性成功。至于复制文件以Groud的方式,还有一些问题。需要处理多余引用资源的问题。工具可以后期考虑集成方式,做成成品工具。方便多元化出包。

Unity3d开发中与oc交互之类型转换

  对于没有非科班出身的程序来说,在没有学过C和OC的情况,用unity开发iOS相关的功能,是非常痛苦的。简单写一下自己遇到的,并且没有百度到的坑。

  1、C#给OC传递字典

  一般流程是,C#调用C,C调用OC,但是C没有字典。处理方法,用结构体数组做中转。核心,结构体数组转换字典。

  C#层代码

using System.Runtime.InteropServices;
using UnityEngine;
public class Test : MonoBehaviour
{
    public struct strutDict
    {
        public string key;
        public string value;
    }
    [DllImport("__Internal")]
    private static extern void setNEvent(string eventName, int number, strutDict[] dict);
    
}

  OC和C中的代码

#import <Foundation/Foundation.h>
@interface test:NSObject
+(test *)instance;@end
@implementation test

static test *xam = nil;
-(id)init{
    self = [super init];
    if(self){
        
    }
    return self;
}

+(test *)instance{
    if(xam == nil){
        xam = [[test alloc]init];
    }
    return xam;
}

-(void) testDic:(NSDictionary *)dic
{
    //随你怎么用
}

#if defined(__cplusplus)
extern "C"{
#endif
    struct strutDic{
        char* key;
        char* value;
    };
    void setNEvent (char* eventName, int number,struct strutDic *dict[]){
        NSDictionary *nsDic=[[NSDictionary alloc] init];
        for(int i=0;i<number;i++){
            NSString *key =_CreateNSString((*dict[i]).key);
            NSString *value =_CreateNSString((*dict[i]).value);
            [nsDic setValue:value forKey:key];
        }
        [[test instance]testDic:nsDic];
        //[reyun setEvent:_CreateNSString(eventName) andExtra:nsDic];
    }
    //char* 转 nsstring
    NSString *_CreateNSString(const char* string){
        if(string)
            return [NSString stringWithUTF8String:string];
        else
            return [NSString stringWithUTF8String:""];
    }
@end

 

 

  

以上是关于unity 与oc交互的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d开发中与oc交互之类型转换

iOS与Unity3d交互

OC与JS交互-WKWebView篇

iOS - OC 与 JS 交互六种方式总结

JS 与 OC 交互

OC与JS的交互(iOS与H5混编)