Unity/Native連携
提供: 初心者エンジニアの簡易メモ
iOS-Unity連携
Unityに記述
#if UNITY_IPHONE
using System.Runtime.InteropServices;
#endif
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
#if UNITY_IPHONE
[DllImport("__Internal")]
private static extern bool _testStaticMethod(bool flag);
[DllImport("__Internal")]
private static extern bool _testMethod(bool flag);
[DllImport("__Internal")]
private static extern void _testExecMethod();
#endif
void Start()
{
#if UNITY_IOS && !UNITY_EDITOR
bool flag = _testMethod(true);
bool flagstatic = _testStaticMethod(true);
bool flagfalse = _testMethod(false);
bool flagstaticfalse = _testStaticMethod(false);
Debug.Log("flag=" + flag);
Debug.Log("flagstatic=" + flagstatic);
Debug.Log("flagfalse=" + flagfalse);
Debug.Log("flagstaticfalse=" + flagstaticfalse);
_testExecMethod();
#endif
}
}
Assets/Plugins/iOS/UnityRenkei.swiftを作成し、以下を貼り付ける。(xcode側では、Libraries/Plugins/iOS/にある。)
import Foundation
@objc public class UnityRenkei: NSObject {
@objc public static func teststatic(_ flag: Bool) -> Bool {
return flag
}
@objc public func test(_ flag: Bool) -> Bool {
return flag
}
@objc public func testexec() {
print("testexec")
}
}
Assets/Plugins/iOS/UnityBridge.mmを作成し、以下を貼り付ける。(xcode側では、Libraries/Plugins/iOS/にある。)
#import <UnityFramework/UnityFramework-Swift.h>
extern "C" {
// Unityから呼び出せるSwiftメソッドのラッパー
bool _testStaticMethod(bool flag) {
bool result = [UnityRenkei teststatic:flag]; // Swiftのstaticメソッドを呼び出す
NSLog(@"result: %d", result);
return result;
}
bool _testMethod(bool flag) {
UnityRenkei *renkei = [[UnityRenkei alloc] init];
bool result = [renkei test:flag]; // Swiftのインスタンスメソッドを呼び出す
NSLog(@"result: %d", result);
return result;
}
void _testExecMethod() {
UnityRenkei *renkei = [[UnityRenkei alloc] init];
[renkei testexec]; // Swiftのインスタンスメソッドを呼び出す
}
}
出力
flag=True flagstatic=True flagfalse=False flagstaticfalse=False testexec
