iOS Unity 互相调用

iOS 和 Unity 相互调用

Unity 调用 iOS

  1. .cs 文件内定义如下函数
[DllImport ("__Internal")]
private static extern float FooPluginFunction(string name); // 参数为字符串类型,返回值 float 类型
  1. .cpp. 或者 .mm 文件内实现如下函数
extern "C" {
  float FooPluginFunction(const char* name)
  {
      // Unity 端调用到 iOS 端
        printf("name is = %s", name);
      return 1.0;
  }
}

iOS 调用 Unity

  1. .cpp.mm 文件内,调用如下方法
// 第一个参数: 脚本挂载的 Object 的名称
// 第二个参数: 在 CS 文件上定义的方法名称
// 第三个参数: 传递的参数(只支持传递 string 类型的内容)
UnitySendMessage("GameObjectName1", "iosToUnity", "Message to send");
  1. .cs 文件内实现,如下方法
public void iosToUnity(string msg)
{
    // iOS 端调用到 Unity 端
    Debug.Log("iOS to Unity, msg = ", msg);
}

iOS 中间层写法

  1. 新建 Unity_iOS_Bridge.hUnity_iOS_Bridge.mm 文件, 文件放在 Unity 工程的 Assets/Plugins/iOS/ 文件夹下
  2. Unity_iOS_Bridge.h 文件写法:
#import 
#import "UnityAppController.h"
// 继承自 UnityAppController
@interface Unity_iOS_Bridge : UnityAppController

@end
  1. Unity_iOS_Bridge.mm 文件写法:
// Unity_iOS_Bridge 添加分类
IMPL_APP_CONTROLLER_SUBCLASS(Unity_iOS_Bridge)

@implementation Unity_iOS_Bridge

#pragma mark - 生命周期

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // 先执行父类的生命周期方法  
    [super application:application didFinishLaunchingWithOptions:launchOptions];
    
    // 执行自定义操作
    
    return YES;
}

@end

extern "C" {
  float FooPluginFunction()
  {
      // Unity 端调用到iOS端
      return 1.0
  }
}

参考

plugins for iOS

你可能感兴趣的:(iOS Unity 互相调用)