美文网首页首页之约
iOS Unity 互相调用

iOS Unity 互相调用

作者: 学生陈希 | 来源:发表于2019-08-21 21:16 被阅读3次

    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 <Foundation/Foundation.h>
    #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 互相调用

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