88 lines
2.8 KiB
Swift
88 lines
2.8 KiB
Swift
import UIKit
|
||
import Flutter
|
||
import UnityFramework
|
||
|
||
@UIApplicationMain
|
||
@objc class AppDelegate: FlutterAppDelegate {
|
||
// Unity控制器引用
|
||
var unityFramework: UnityFramework?
|
||
|
||
override func application(
|
||
_ application: UIApplication,
|
||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||
) -> Bool {
|
||
// 注册Flutter插件
|
||
GeneratedPluginRegistrant.register(with: self)
|
||
|
||
// 注册Unity插件
|
||
let registry = self.registrar(forPlugin: "UnityPlugin")
|
||
UnityPlugin.register(with: registry)
|
||
|
||
// 初始化Unity框架
|
||
initUnityFramework()
|
||
|
||
// 设置Unity消息处理器
|
||
setupUnityMessageHandlers()
|
||
|
||
// 注册Unity视图工厂
|
||
registerUnityViewFactory()
|
||
|
||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||
}
|
||
|
||
// 初始化Unity框架
|
||
func initUnityFramework() {
|
||
let unityLoader = UnityFrameworkLoader()
|
||
unityFramework = unityLoader.loadUnityFramework()
|
||
|
||
if unityFramework != nil {
|
||
// 运行Unity
|
||
unityFramework?.setDataBundleId("com.unity3d.framework")
|
||
unityFramework?.register(self)
|
||
unityFramework?.runEmbedded(
|
||
withArgc: CommandLine.argc,
|
||
argv: CommandLine.unsafeArgv,
|
||
appLaunchOpts: nil
|
||
)
|
||
} else {
|
||
print("无法加载Unity框架")
|
||
}
|
||
}
|
||
|
||
// 注册Unity视图工厂
|
||
private func registerUnityViewFactory() {
|
||
let controller = self.window.rootViewController as? FlutterViewController
|
||
if let registrar = controller?.registrar(forPlugin: "UnityPlugin") {
|
||
let factory = UnityViewFactory(registrar: registrar, unityFramework: unityFramework)
|
||
registrar.register(factory, withId: "com.yourcompany.unity_flutter/unityview")
|
||
}
|
||
}
|
||
|
||
// 设置Unity消息处理器
|
||
private func setupUnityMessageHandlers() {
|
||
// 创建Unity通信通道
|
||
let controller = self.window.rootViewController as? FlutterViewController
|
||
let channel = FlutterMethodChannel(name: "com.example.ar_tourism_flutter_unity.unity", binaryMessenger: controller!.binaryMessenger)
|
||
|
||
// 处理Flutter->Unity消息
|
||
// 注意:实际的方法处理已经委托给了UnityPlugin插件处理,这里仅保留与它不冲突的方法
|
||
}
|
||
|
||
// 打开Unity场景
|
||
private func openUnityScene(sceneName: String) {
|
||
// 向Unity发送加载场景的消息
|
||
sendMessageToUnity(gameObject: "GameManager", methodName: "LoadScene", message: sceneName)
|
||
}
|
||
|
||
// 关闭Unity
|
||
private func closeUnity() {
|
||
unityFramework?.pause(true)
|
||
// 这里可以添加逻辑来隐藏Unity视图
|
||
}
|
||
|
||
// 发送消息到Unity
|
||
private func sendMessageToUnity(gameObject: String, methodName: String, message: String) {
|
||
unityFramework?.sendMessageToGO(withName: gameObject, functionName: methodName, message: message)
|
||
}
|
||
}
|