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

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

Notice

'Unity'에 해당되는 글 12

  1. 2014.05.05 유니티 iOS 플러그인 만들기
  2. 2014.05.02 유니티 프로젝트 다운그레이드하기
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 래머
2014. 5. 2. 00:52 Unity



유니티 프로젝트 다운그레이드하기

4.3 버전에서 4.2 또는 4.1 버전으로 다운그레이드 하기
4.3 버전에서 유니티 2D기능관련해서 대대적인 패치가 이루어졌는데 써본결과 아직 상당히 문제가 많다
퍼포먼스문제 안드로이드쪽 디바이스 호환문제등 여러가지 등등..
뭣모르고 업그레이드 했다가 위와 같은문제때문에 위기에 봉착
다시 프로젝트를 이전 버전으로 되돌려야 하는 사태가 발생해서 구글링해본결과
다음과 같은 방법으로 다운그레이드가 가능하다고 한다.

Here is something worth trying, make sure you create backs ups before you start!
여기에 뭔가 가치있는 시도가 있다, 시작하기 전에 백업을 만들어둘것
  1. Enable source control on your project: Edit/Project Settings/Editor/Visible Meta Files (This will create meta files for every asset you have, these fiels contain information such as how the asset should be imported as well as a unique guid so you should not lose links to scripts etc)
  2. 당신의 프로젝트에 소스 컨트롤을 활성화한다 : Edit->Project Settings->Editor->Visible Meta Files(이것은 당신의 프로젝트가 가진 모든 애셋 파일들의 메타데이터를 생성할 것이다, 이파일들은 GUID뿐만 아니라 애셋들이 어떻게 임포트되어야하는지와 같은 정보들을 담고 있다 그러므로 당신은 스크립트등과 같은 것들의 링크를 잃지 않게 된다)
  3. Create a new project with unity 4.2.2. Keep the project empty. Enable source control on this project like you did with the other.
  4. 유니티 4.2.2등의 버전에서 새로운 프로젝트를 생성한다. 빈프로젝트로 유지할것. 이프로젝트의 소스컨트롤 방식을 위와 같은(Visible Meta Files) 형태로 활성화한다.
  5. Now replace the "Assets" folder from your 4.2.2 project with the 4.3 project Assets folder.
  6. 이제 4.3프로젝트의 애셋폴더를 4.2프로젝트의 애셋폴더에 복사한다.
  7. Unity 4.2.2 should import all the assets with the correct settings and you should have a 4.2.2 project again. You can now disable source control and it will remove the meta files.
  8. 유니티 4.2는 모든애셋들을 올바른 셋팅으로 임포트할것이고, 당신은 다시 4.2버전의 프로젝트를 가지게 된다. 이제 소스컨트롤을 비활성화 할수 있고, 그를통해 모든 메터파일들은 제거될것이다.
  9. Update:(추가사항)
Once you have downgraded you may start to get some errors about the Unity serializer. Such as this:typeTree.m_Children.front ().m_Type != SerializeTraits::GetTypeString (NULL) This is likely caused by Unity 4.3 adding in some data into its assets/prefabs/scenes etc that 4.2.2 does not recognise. A possible fix is this: Goto your project settings/Editor/Asset Serialisation and change it to either force text or force binary. This will force Unity to re-serialise all your asset files. So potentially it could get rid of any Unity 4.3 serialisation data.
다운그레이드된 유니티 프로젝트를 시작할때 몇개의 유니티 시리얼라이저관련 에러를 보게 될것이다. typeTree.m_Children.front ().m_Type != SerializeTraits::GetTypeString (NULL)과 같은것으로  이것은 유니티 4.3에서 몇몇 데이터드을 애셋의 씬에 추가한것이 원인이다. 가능한 수리법은 다음과 같다 : Project Settings->Editor->Asset Serialisation 으로 가서 force text 또는 force binary중하나로 바꾼다. 이것은 강제적으로 유니티가 모든 애셋파일들을 다시 직렬화하게 할것이다. 그러므로 잠재적으로 유니티 4.3에서 만들어진 직렬화 데이터들은 사라질수 있다.

위에 나와 있는 방법되로 4.3 버전을 4.1 버전으로 바꿔보니 과연잘된다. 물론 몇몇 재질의 셰이더가 날아간게 한두개 정도



나오긴했지만 그외에는 별문제 없는듯하다.




'Unity' 카테고리의 다른 글

블록 게임  (0) 2015.08.22
빌보드 테스트  (0) 2015.08.16
유니티 애즈(Unity Ads) 동영상 광고 사용해 보기  (2) 2015.07.12
NGUI 2.7 Label인스펙터 오류관련  (0) 2015.04.29
유니티 iOS 플러그인 만들기  (0) 2014.05.05
posted by 래머
prev 1 2 next