블로그 이미지
래머
오늘도 열심히 개발하는 개발자입니다.

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2014. 5. 5. 01:44 Unity

유니테에서 iOS의 네이티브 함수를 호출하기 위해서 다음과 같은 방법으로 통신할 수 있다.



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

}






'Unity' 카테고리의 다른 글

블록 게임  (0) 2015.08.22
빌보드 테스트  (0) 2015.08.16
유니티 애즈(Unity Ads) 동영상 광고 사용해 보기  (2) 2015.07.12
NGUI 2.7 Label인스펙터 오류관련  (0) 2015.04.29
유니티 프로젝트 다운그레이드하기  (0) 2014.05.02
posted by 래머