ios与unity交互

Object-c小知识:

在接入sdk过程中会遇到需要调用sdk方法
在oc语法中 分为+(void) 和-(void)两种方式

+(void)为类函数,可以直接调用,使用方法为:[类名  方法名:参数];

-(void)为成员函数,用C#的语法来说就是需要实例化类才能调用,使用方式为:

类名 * 定义名=[[类名 alloc] init];

[定义名 方法名:参数];

unity发送消息给ios:

在unity脚本中引用using System.Runtime.InteropServices;

需要使用到DllImport,其作用是提供从非托管DLL导出的函数的必要调用信息

写法格式为:

static:静态方法。(静态方法:不属于类的实例,而是属于类本身

extern:支持在外部实现方法。

[DllImport("__Internal")]
private static extern void _Method();

public void Method(){    _Method();    }

void Start () 
{
    Method();
}

然后在ios使用object-c编写与unity交互,在头文件.h中 声明

@interface UnityMessage : NSObject


@end

然后把.m源文件后缀名更换为.mm文件,这样做的意义是让源文件可以包含c++格式的代码,在.mm源文件中书写格式为:

@implementation UnityMessage

extern "C"
{
   void _Method()
   {
     NSLog(@"调用ios");
     //TODO 
   }
}

@end

以上,在游戏运行时就会调用到在.mm源代码文件里的_Mehod()方法了

ios发送消息给unity:

在这里直接使用提供好的api就可以了UnitySendMessage,采用上面的例子

@implementation UnityMessage

extern "C"
{
   void _Method()
   {
     NSLog(@"调用ios");
     //TODO 
     UnitySendMessage("GameObject","test1","Value");
   }
}

@end

参数一:是需要提供脚本挂载的物体名称,如果挂载在主摄像机上,那这里就填”Main Camera“。

参数二:这里需要注意,填写的是方法名,而不是类名,unity提供的这个SendMessage方法机制是根据提供的挂载体遍历需要调用的方法,保证方法名是唯一就行,这种方式在效率肯定是不怎么样的,不过好像传递消息只能通过这样·····

参数三:这是需要传递的参数,如果不需要传值就用”“就行。

其他:

unity传string类型参数,ios方面表现void _Method(char * s)

然后[NSString stringWithUTF8String:s]转化成object-c语法里的NSString类型。

字符串拼接传递:

NSString* User= [[NSString alloc]initWithFormat:@"%@,%@",userID,account];

UnitySendMessage("Object","GetUserMessage",[User UTF8String]);

猜你喜欢

转载自blog.csdn.net/huangzhenxun/article/details/81950180