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
}
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
如对本文有疑问, 点击进行留言回复!!
Codeforces Round #657 (Div. 2) C题
hdu2222 Keywords Search(ac自动机模板-kuangbin)
IOS开发控件视图day08:监听文本框状态设置按钮状态不可点击且变灰
网友评论