해당 글의 내용은 제가 실제 프로젝트에 유니티 프로젝트를 적용 시킨 방법입니다.
해당 글의 내용이 무조건적인 정답은 아니니, 참고용으로 간단히 봐주시면 감사드리겠습니다!
NDK 다운로드 | Android NDK | Android Developers
ndk had version [21.3.6528147] which disagrees with android.ndkversion [21.1.6352462]
-> 설치 되어 있는 NDK 버전과 Unity Project 내 NDK 버전이 알맞지 않아 발생한 버전 충돌 오류입니다.
Unity Hub → Projects → 오른쪽 상단 [Open] 버튼 클릭
Flutter 프로젝트 내에 추가된 Unity Project 열기
android → settings.gradle 코드 추가
include ":unityLibrary"
project(":unityLibrary").projectDir = file("./unityLibrary")
android → app → build.gradle 코드 추가
dependencies {
implementation project(':unityLibrary')
}
android → app → src → main → AndroidManifest.xml 코드 추가
<activity
android:name="com.xraph.plugin.flutter_unity_widget.OverrideUnityActivity"
android:theme="@style/UnityThemeSelector"
android:screenOrientation="fullSensor"
android:launchMode="singleTask"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
android:hardwareAccelerated="false"
android:process=":Unity">
<meta-data android:name="com.xraph.plugin.flutter_unity_widget.OverrideUnityActivity" android:value="true" />
</activity>
android → local.properties NDK 경로 추가
ndk.dir=/Applications/Unity/Hub/Editor/2021.3.22f1/PlaybackEngines/AndroidPlayer/NDK
ios → Runner → AppDelegate.swift 코드 추가
import UIKit
import Flutter
import flutter_unitywidget
class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
**InitUnityIntegrationWithOptions(argc: CommandLine.argc, argv: CommandLine.unsafeArgv, launchOptions)**
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
ios → Runner → Info.plist 코드 추가
<dict>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
</dict>
ios → UnityLibrary → Classes -> UnityAppController.mm 이동
(void)application:(UIApplication*)application handleEventsForBackgroundURLSession:(nonnull NSString ...
밑 코드 추가
extern "C" void OnUnityMessage(const char* message)
{
if (GetAppController().unityMessageHandler) {
GetAppController().unityMessageHandler(message);
}
}
extern "C" void OnUnitySceneLoaded(const char* name, const int* buildIndex, const bool* isLoaded, const bool* IsValid)
{
if (GetAppController().unitySceneLoadedHandler) {
GetAppController().unitySceneLoadedHandler(name, buildIndex, isLoaded, IsValid);
}
}
ios → UnityLibrary → Classes -> UnityAppController.h 이동
@property (nonatomic, copy) void (^quitHandler)(void);
밑 코드 추가
@property (nonatomic, copy) void(^unitySceneLoadedHandler)(const char* name, const int* buildIndex, const bool* isLoaded, const bool* IsValid);
@property (nonatomic, copy) void(^unityMessageHandler)(const char* message);**