NativeCallProxy로 Unity에서 iOS에게 메세지를 보내자
iOS 앱에 Unity 통합하기 (1) 에서 이어집니다.
iOS에서 Unity한테 메세지를 보낼 때는 유니티에서 제공하는 sendMessageToGOWithName 메소드를 사용합니다. 하지만 Unity에서 iOS한테 메세지를 보낼 때는 위와 같은 메소드가 없어서 조금 복잡한 방법을 사용해야합니다.
유니티 깃헙 Docs 에도 이 방법이 나와있고 구글링해보면 다들 이 방법을 업계 표준처럼 사용하는 것 같아보이더라구요,,
아래 두가지를 참고해서 저도 따라해보겠습니다!
- Communicate with a Unity game embedded in a SwiftUI iOS App
NativeCallProxy 이란 이름으로 objective-c 파일을 만들어주세요
Next를 누르면 브릿징 헤더 만들겠냐고 물어보는데 만들겠다고 클릭해주세요
그럼 이렇게 두개의 파일이 생겼는데요
- NativeCallProxy.m
- 앱이름-Bridging-Header.h
Unity 쪽에서는 mm 파일이 필요해서 Renaming을 선택해주고 m을 하나 더 붙여줍니다.
그럼 NativeCallProxy.mm 파일로 바뀌게 됩니다.
그리고 NativeCallProxy.h 파일도 만들어줍니다.
그럼 이렇게 세개의 파일 준비완료!
- NativeCallProxy.mm
- 앱이름-Bridging-Header.h
- NativeCallProxy.h
각각 아래와 같이 수정해주세요
브릿징 헤더.h
NativeCallProxy.mm
https://gist.github.com/dinotrnka/7b826a66f7784800551d5c140e1626e9#file-nativecallproxy-h
NativeCallProxy.h
https://gist.github.com/dinotrnka/7b826a66f7784800551d5c140e1626e9#file-nativecallproxy-h
이제 Unity Editor를 열고
Assets 아래에 Plugins 라는 폴더를 만들어주세요
Plugins 폴더를 열고 Xcode에서 유니티 에디터로 NativeCallProxy.h 와 NativeCallProxy.mm 파일을 끌어와주세요.
그리고 NativeAPI라는 이름으로 스크립트를 만들어주고 아래 코드를 작성해줍니다.
https://gist.github.com/eunjin3786/cd562900b4e4bf95f235194c9cac4241
'iOS에게 메세지' 라는 버튼을 만들고
버튼 클릭하면 iOS에게 메세지를 보내도록 해줍니다.
https://gist.github.com/eunjin3786/bac37429fdbfd24f994076415e4083d6
그리고 iOS 플랫폼으로 빌드해줍니다.
Xcode Workspace를 열어줍니다.
유니티에서 추가한 Plugins 폴더가 잘 exported 되었네요
NativeCallProxy.h 의 TargetMembership 부분에 가보면
header visibility 가 project로 되어있는데 public 으로 바꿔주세요
그리고 아까 HostApp에 추가한 이 두 파일은 Unity 쪽에서 포함하고 있으니까 더 이상 필요없습니다. 지워주겠습니다.
UnityManager에 가서 다음과 같이 코드를 추가해주세요
(체크 표시한 부분과 extension 부분을 추가해주시면 됩니다)
https://gist.github.com/eunjin3786/0d7e47d89bbe41ce25ebddc09a9b0067
그리고 빌드해서 테스트해보면
유니티에서 보낸 메세지를 iOS가 잘 받는 것을 볼 수 있습니다.