unity iOS C/Objective-C回调C#

原文 链接:https://www.jianshu.com/p/0c61444c9b28

  • 方法1
    UnitySendMessage("[gameobject_name]", "[method_name]", "[string_param]");
    这个方法要求场景中有个特定名称的GameObject对象,同时该对象上应该挂载某个MonoBehaviour脚本,在该脚本中包含有一个特定的方法(如下所示),当然如果该对象上挂载了多个脚本,并且这些脚本中都有该方法,那么这些方法都会被调用的!

public void method_name(string str) {
    //  some logici here
}
  • 方法二, 使用 MonoPInvokeCallback 从C#层向C层注册回调函数, 具体操作流程如下:
    C#层的代码如下

private delegate void OnViewClosed(int result, string msg);   // 

[MonoPInvokeCallback(OnViewClosed)]
static void CalledByNativeC(int result, string msg)
{
    // some logic here
}

// ... 

#if UNITY_IPHONE || UNITY_IOS
[DllImport("__Internal")]
private static extern void SetOnViewClosed(OnViewClosed event);
#endif

// ...
SetOnViewClosed(CalledByNativeC);    // 把C#中的回调函数传给C

MonoPInvokeCallbackAttribute.cs 的代码内容如下:

using System;

public sealed class MonoPInvokeCallbackAttribute : Attribute
{
    public MonoPInvokeCallbackAttribute(Type type)
    {
    }
}

C层的代码如下:

#include <stdlib.h>
#ifdef __cplusplus 
extern "C" { 
#endif

typedef void (*OnViewClosed)(int result, const char* msg);  // 定义函数指针

static OnViewClosed s_calledFromCSharp = NULL;

// 接受C#层传过来的函数指针
void SetOnViewClosed(OnViewClosed viewClosed)    
{
    s_calledFromCSharp = viewClosed;
}
 
// ......
// 某处C/Objecive-C触发该回调函数的代码如下 
   if (s_calledFromCSharp != NULL)
       s_calledFromCSharp(result, msg);
//......

#ifdef __cplusplus 
} 
#endif  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值