71 lines
2.3 KiB
Swift
71 lines
2.3 KiB
Swift
import Flutter
|
||
import UIKit
|
||
import UnityLibrary
|
||
|
||
/// Unity视图控制器
|
||
class UnityViewController: UIViewController {
|
||
// Unity框架引用
|
||
weak var unityFramework: UnityFramework?
|
||
|
||
init(unityFramework: UnityFramework?) {
|
||
self.unityFramework = unityFramework
|
||
super.init(nibName: nil, bundle: nil)
|
||
}
|
||
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
|
||
// 将Unity视图添加为子视图
|
||
if let unityView = unityFramework?.appController()?.rootView {
|
||
view.addSubview(unityView)
|
||
unityView.frame = view.bounds
|
||
unityView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||
}
|
||
}
|
||
}
|
||
|
||
/// Unity视图工厂类,用于创建Flutter平台视图
|
||
class UnityViewFactory: NSObject, FlutterPlatformViewFactory {
|
||
// 注册表用于消息传递
|
||
private var registrar: FlutterPluginRegistrar
|
||
|
||
// Unity框架引用
|
||
private weak var unityFramework: UnityFramework?
|
||
|
||
init(registrar: FlutterPluginRegistrar, unityFramework: UnityFramework?) {
|
||
self.registrar = registrar
|
||
self.unityFramework = unityFramework
|
||
super.init()
|
||
}
|
||
|
||
// 创建Flutter平台视图
|
||
func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) -> FlutterPlatformView {
|
||
return UnityFlutterPlatformView(frame: frame, viewId: viewId, arguments: args, registrar: registrar, unityFramework: unityFramework)
|
||
}
|
||
|
||
// 支持StandardMessageCodec
|
||
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
|
||
return FlutterStandardMessageCodec.sharedInstance()
|
||
}
|
||
}
|
||
|
||
/// Unity Flutter平台视图
|
||
class UnityFlutterPlatformView: NSObject, FlutterPlatformView {
|
||
// Unity视图控制器
|
||
private var unityViewController: UnityViewController
|
||
|
||
init(frame: CGRect, viewId: Int64, arguments args: Any?, registrar: FlutterPluginRegistrar, unityFramework: UnityFramework?) {
|
||
unityViewController = UnityViewController(unityFramework: unityFramework)
|
||
unityViewController.view.frame = frame
|
||
super.init()
|
||
}
|
||
|
||
// 返回视图
|
||
func view() -> UIView {
|
||
return unityViewController.view
|
||
}
|
||
} |