public class iOSManager : MonoBehaviour
{
static iOSManager _instance = null;
[DllImport("__Internal")]
private static extern void iOsFunction(string strMessage);
//iOS의 네이티브 함수를 호출한다. 인자로 strMsg라는 문자열을 넘긴다.
public void CallIosFunction(string strMsg)
{
iOsFunction(strMsg);
}
//이후에 iOS의 네이티브 단에서 이 메소드를 호출한다.
//유니티에서는 단지 iOS에서 넘어온 문자열을 유니티 콘솔에 출력해준다.
public void MsgFromiOs(string strMsg)
{
MonoBehaviour.print("msg from ios : " + strMsg);
}
}
유니티 단에서는 위와 같이 [DllImport("__Internal")] 선언을 하고 아래에 함수를 외부로 부터 가져온다고 알린다.
이후에는 일반 적인 c#의 메소드를 호출하듯이 호출해주면된다.
iOS네이티브 단에서는 위에서 선언한 함수를 실제 구현해줘야한다.
iosplugin.m 이라는 소스 파일을 하나 만들고
내부에 위의 c#스크립트에서 선언했던 형태로 함수를 구현해준다.
c#의 스트링은 iOS에 인자로 넘어올때 UTF-8의 바이트 배열 형태로 변환되어 넘어오기 때문에
인자를 const char* 형태로 바꿔준다.
//utf-8의 char형 배열은 아래 함수를 통해서 NSString으로 변환가능하다.
static NSString* CreateNSString(const char* string)
{
if (string != NULL)
return [NSString stringWithUTF8String:string];
else
return [NSString stringWithUTF8String:""];
}
void void iOsFunction(const char* strMessage)
{
//단순히 유니티로 부터 전달받은 메시지를 오브젝트c의 NSString으로 변환하고 그것을 다시 utf-8의 char형 배열로 변환한다음에
//다시 유니티로 전달하는 것을 보여준다.
NSString* strResult = CreateNSString(strMessage);
//안드로이드에서와 비슷하게 UnitySendMessage함수를 통해서 유니티의 특정 오브젝트에 연결된 스크립트를 호출할 수 있다.
//c#의 스크립트에서 스트링으로 넘어온 문자열이 오브젝트 c에서 UTF-8의 char형배열로 변환된것처럼
//오브젝트c에서 NSString 문자열을 유니티로 넘길때에도 UTF-8의 char 형배열로 변환해서 넘기면된다.
//이호출을 통해서 위의 c#스크립트에서 구현해놓은 MsgFromiOs메소드가 호출되게 된다.
UnitySendMessage("iOSManager", "MsgFromiOs", [strResult UTF8String]);
}
댓글 없음:
댓글 쓰기