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]);