Unity의 네이티브 코드를 Swift로 쓰려고 할 때

내용



Unity에서 일부 처리를 iOS의 네이티브 코드로 쓰고 싶을 때가 있을까 생각합니다.
또한 또한 iOS라면 Swift로 쓰고 싶다는 것도 있을까 생각합니다.
그 때 실제로 해보고 빠진 것을 적어 둡니다.

내 경우에는 Unity 애플리케이션에서 움직이는 웹캠이 아니라 iOS의 AVFoundation 라이브러리를 사용하여 카메라 모듈을 움직여 바코드를 읽고 싶을 때 여기를 Swift로 쓰면 ... .

네이티브 코드를 써보고 호출해 보자!



샘플 코드



먼저 C#상에서 외부의 파일을 호출하는 처리에 대해 설명합니다.
C#은 DllImport 속성을 지정하여 외부 dll을 읽을 수 있습니다.
extern 한정자 그래서 네이티브 코드의 메소드와 변수를 지정합니다.

아래는 네이티브 코드를 호출하기 위해 C#에서 설명한 클래스 파일입니다.

HogeClass.cs
using UnityEngine;
using System.Runtime.InteropServices;

public class HogeClass {
    [DllImport("__Internal")]    // Unityで提供されているネイティブプラグイン
    private static extern void hogeMethod_ ();    // ネイティブコード上のメソッド

    public static void hogeMethod () {
        if (Application.platform != RuntimePlatform.OSXEditor) {
            hogeMethod_ ();    // ネイティブコード上のメソッドを呼び出す
        }
    }
}

그러나 C#에서 직접 Swift 코드를 읽을 수 없기 때문에
Objective-C에서 설명한 코드를 통해 Swift 코드를 읽으십시오.

HogeClass.mm
#import <UIKit/UIKit.h>
#import <[Unityのプロジェクト名]-Swift.h>

extern "C"{
    void hogeMethod_() {
         [HogeClass hogeMethod];    // Swiftのメソッドを呼び出す
    }
}

여기에
#import <[Unityのプロジェクト名]-Swift.h>

하지만
Objective-C Generated Interface Header Name
에 기재되어 있는 것을 지정해 주세요.



[Unity 프로젝트 이름] - Swift.h 생성 방법이지만
아래에 정리하여 기재합니다. (이번 제일은 빠진 곳입니다.)

드디어 Swift 코드의 기재입니다.

HogeClass.swift
import UIKit

public class HogeClass: NSObject {
    public class func hogeMethod() {
        print("hoge")    // Xcodeのコンソール上にhogeと表示させる
    }
}


이것으로 Swift 코드를 읽는 코딩 완료입니다.

[Unity 프로젝트 이름] - Swift.h 생성 방법



Embedded Content Contains Swift Code라는 곳을 Yes로 하는 것으로 Swift의 코드가 헤더 파일로서 생성됩니다.



그리고 Objective-C에서 Swift를 부르려고하면
dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/App-Name.app/App-Name
Reason: image not found

라는 오류가 나옵니다.
이것의 해결책으로서 Runpath Search Path에 @executable_path/Frameworks를 추가해 주는 것으로 Unity상에서 Objective-C를 경유하면서 Swift의 처리를 이동할 수 있게 됩니다.



참고 링크



KAKELOG/Unity iOS의 네이티브 플러그인을 Swift로 작성했습니다.
htp : // bg. 조각이 s. 이 m/2016/05/07/우니 ty-ㅇㅇft. HTML
Objective-c에서 Swift를 호출하는 방법
h tp : // 쿠이타. m / 쇼 007 / ms / b0c54d795d63fb84에서 72
Unity 스크립트에서 iOS 네이티브 플러그인과 상호 작용
ぃ tp // m / tyfk / ms / dc5, 219d22c55에서 301
Swift로 작성된 iOS 앱을 실제 디버그 실행시 "image not found"오류가 발생하는 경우
htp // 라이몬 49. 기주 b. 이오 / 2016/03/20 / 에로 r- 아 t ぃ ft - 아 p ぃ th - 이오 s에서 ゔぃ세. HTML
테라슈르 블로그/
Unity C#에서 네이티브 플러그인을 통과하지 않고 Objective-C 코드를 호출합니다.
htp // 츠바키 t1. 는 bぉ. jp/엔트리/2014/08/14/022012

좋은 웹페이지 즐겨찾기