美文网首页
Unity和OC交互

Unity和OC交互

作者: 浪淘沙008 | 来源:发表于2023-02-27 10:52 被阅读0次

步骤一:

将.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 = [[UKit alloc] init];
    });
    return _instance;
}

- (void)ShowWarningBox:(NSString *)strTitle text:(NSString *)message
{
    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:strTitle message:message preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction * okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"点击ok按钮");
        UnitySendMessage("Canvas", "OnButtonClick", [@"你好啊Unity" UTF8String]);
    }];
    
    [alertController addAction:okAction];
    
    UIAlertAction * cancleAction = [UIAlertAction actionWithTitle:@"cancle" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"点击了取消按钮");
    }];
    [alertController addAction:cancleAction];
    UIViewController * viewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
    [viewController presentViewController:alertController animated:YES completion:^{
        NSLog(@"显示了对话框");
    }];
}
extern "C" {
    void ShowWarningBox(char *strTitle, char *message)
    {
        [[UKit instance] ShowWarningBox:[NSString stringWithUTF8String:strTitle] text:[NSString stringWithUTF8String:message]];
    }
    
    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 = [NSString stringWithFormat:@"Object-c Called. val1=%d, val2=%f, val3=%d, val4=%s", val1, val2, val3, val4];
        [[UKit instance] 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);


    [DllImport("__Internal")]
    private static extern void ShowWarningBox(string strTitle, string message);

    [DllImport("__Internal")]
    private static extern void CallOC(int val1, float val2, bool val3, string val4);

    // 声明包含回调方法的方法
    [DllImport("__Internal")]
    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
    [MonoPInvokeCallback(typeof(callback_delegate))]
    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交互

相关文章

  • unity 与oc交互

    "$(PROJECT_DIR)"代表了工程的根目录unity 与oc交互主要在于数据间的传递,unity传递的值到...

  • 关于Unity3D与iOS交互

    本文主要介绍Unity3D与iOS交互,使用的语言是C#和OC。 主要步骤: 第一部分:Unity3D 1、创建U...

  • Unity和Android交互

    Unity和Android交互 Unity和Android的交互一般涉及两种场景:Unity开发为主,安卓开发作为...

  • unity 与oc、java交互

    1.unity cs 书写基类PlatformFactory.cs Android AndroidPlatform...

  • unity与android 、ios交互

    unity和ios交互: unity调用ios的方法: c#:[DllImport("__Internal")] ...

  • OC与JS交互

    OC与JS交互前言 OC与JS交互之UIWebView OC与JS交互之WebViewJavascriptBrid...

  • OC和JS交互、JS和OC交互

    现在做开发 很多会出现交互问题 我在公司项目中也会用到交互 下面我大致写下 交互的代码 - (void)loadW...

  • ios和unity交互代码

    IOSToUnity ios和unity交互 GitHub - Juefeiye/IOSToUnity: ios和...

  • 之界面跳转

    本文介绍了iOS和Unity交互,主要涉及两个界面之间的跳转. 如果对iOS和Unity交互传参方法不熟悉的朋友,...

  • 我的unity,googleVR学习总结目录

    unity项目导入到android项目中 Unity和android交互 简洁版 GoogleVR for Uni...

网友评论

      本文标题:Unity和OC交互

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