APSchmidt 发表于 2023-2-28 13:08

Unity和OC交互

步骤一:


将.m文件修改为.mm文件,并在其中实现需要调用的方法,然后通过C代码调用已经实现的方法,代码如下:
#import "UKit.h"#import <UIKit/UIKit.h>static UKit * _instance = nil;@implementation UKit+ (UKit *)instance{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{      _instance = [ init];    });    return _instance;}- (void)ShowWarningBox:(NSString *)strTitle text:(NSString *)message{    UIAlertController * alertController = ;      UIAlertAction * okAction = );    }];      ;      UIAlertAction * cancleAction = ;    ;    UIViewController * viewController = [[ keyWindow] rootViewController];    ;}extern "C" {    void ShowWarningBox(char *strTitle, char *message)    {      [ ShowWarningBox: text:];    }      void CallOC(int val1, float val2, bool val3, const char *val4) {      NSLog(@"Object-c Called. val1=%d, val2=%f, val3=%d, val4=%s", val1, val2, val3, val4);      NSString * title = @"标题";      NSString * message = ;      [ ShowWarningBox:title text:message];    }      // C#函数的函数指针    typedef void (*cs_callback)(int);    void CallBack(cs_callback callback) {      callback(999);    }    }@end步骤二:


创建Assets/Plugins/iOS文件夹,并将OC文件拖到该文件夹下;打包后该文件也会包含在工程项目中,如图:

WeChat81ed0cab0d1ceabe481581792de472fc.png


WeChat213a3cf0c54e0a02a8e7b62cb0b9f44a.png

步骤三:


创建C#调用方法的文件,在其中导入OC文件中声明的C方法并进行调用,代码如下:
using UnityEngine;using System.Runtime.InteropServices;using AOT;public static class UnityIOSKit{    delegate void callback_delegate(int val);        private static extern void ShowWarningBox(string strTitle, string message);        private static extern void CallOC(int val1, float val2, bool val3, string val4);    // 声明包含回调方法的方法        private static extern void CallBack(callback_delegate callback);    static public void ShowAlert(string strTitle, string strText)    {                if (Application.platform == RuntimePlatform.IPhonePlayer)      {            ShowWarningBox("提醒弹框", "弹框内容");      }    }    static public void myCallOC()    {      if (Application.platform == RuntimePlatform.IPhonePlayer)      {            CallOC(1314, 3.1415926f, true, "文字内容");      }    }    //回调函数,必须MonoPInvokeCallback并且是static        private static void cs_callback(int val)    {      UnityEngine.Debug.Log("cs_callback : " + val);    }    static public void CallBack()    {      if (Application.platform == RuntimePlatform.IPhonePlayer)      {            //直接把函数传过去            CallBack(cs_callback);      }    }}
参考:unity 与oc交互
页: [1]
查看完整版本: Unity和OC交互