当前位置: 移动技术网 > 移动技术>移动开发>IOS > Unity3d与iOS之间的相互调用

Unity3d与iOS之间的相互调用

2020年07月17日  | 移动技术网移动技术  | 我要评论

Unity3d与iOS的交互

  1. U3D调用IOS

    1.1 实现原理
    ios开发使用的语言是objective-c(也称object-c),u3d中使用DllImport的Attribute,以非托管方式将库中 的方法导出到C#中进行使用。而传入"__Internal"则是表示这个是一个静态库或者是一个内部方法。通过上面的声明,这个方法就可以在C#里面进行调用了。

      using UnityEngine;
      using System.Collections;
      using System.Runtime.InteropServices;		//DllImport的命名空间
      public class CallAppIOS
      {
          /* Interface to native implementation */
      
          [DllImport("__Internal")]
          private static extern string _getAppendString(string str1, string str2);	//IOS中方法
      
          public static string GetAppendString(string str1, string str2)
          {
              return _getAppendString(str1, str2);
          }
      }
    

    1.2 编写IOS文件
    创建iOSUtilUnity3dBridge.h和iOSUtilUnity3dBridge.mm两个文件,放到Plugins->IOS文件夹下(string 对应const char*)

    #import <Foundation/Foundation.h>
    
    @interface iOSUtilUnity3dBridge : NSObject
    extern "C"
    {
    	const char* _getAppendString(const char *str1, const char *str2);
    }
    @end
    
    #import <Foundation/Foundation.h>
    #import "iOSUtilUnity3dBridge.h"
    
    extern "C"
    {    
    	//NSString 转char*
        char* _MakeStringCopy(const char* str){
            if(str == NULL){return NULL;}
            char* res = (char*)malloc(strlen(str)+1);
            strcpy(res, str);
            return res;
        }
        
        const char* _getAppendString(const char *str1, const char *str2)
        {
    		NSString *string1 = [[NSString alloc] initWithUTF8String:str1];
    		NSString *string2 = [[NSString alloc] initWithUTF8String:str2];
    
            NSString *string3 = [NSString stringWithFormat:@"%@/%@", string1, string2];
    		return _MakeStringCopy([string3 UTF8String]);	//注意返回值
        }
    }
    
    

    1.3 C#中调用

    	void Start () {
    
    #if UNITY_IOS && !UNITY_EDITOR
            string str = CallAppIOS.GetAppendString("Hello", "Wrold");
            Debug.Log(str);
    #endif
    
    }
    
  2. IOS调用U3D
    2.1 iOS中调用U3D的接口,与Android相似,通过UnitySendMessage方法来调用Unity所定义的方法

    	const char* _getAppendString(const char *str1, const char *str2)
        {
    		NSString *string1 = [[NSString alloc] initWithUTF8String:str1];
    		NSString *string2 = [[NSString alloc] initWithUTF8String:str2];
    
            NSString *string3 = [NSString stringWithFormat:@"%@/%@", string1, string2];
            
            //Main Camera 场景中接受消息的Object名字, ReceiveiOS 方法名, string3.UTF8String参数
            UnitySendMessage("Main Camera", "ReceiveiOS", string3.UTF8String);	//调用
            
    		return _MakeStringCopy([string3 UTF8String]);	//注意返回值
        }
    

    2.2 编写C#代码,挂载到Main Camera上

        public void ReceiveiOS(string str)
        {
            Debug.Log("ReceiveiOS " + str);
        }
    

    2.3 还有一种方法是通过入口参数,传入一个U3D的非托管方法,然后调用该方法,这里不做详解。

本文地址:https://blog.csdn.net/wangningzk123/article/details/107359522

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网