SwiftGodotKit 提供了一种将 Godot 嵌入到现有 Swift 应用程序中并从 Swift 驱动 Godot 的方法,而无需使用扩展。它是 SwiftGodot 的配套,后者提供了 Godot API 的 API 绑定。
请查看此处的 TrivialSample
以了解其工作原理。
您需要 Swift 5.9 (Xcode 15 发布候选版本即可)。
引用此 Package.swift,然后您可以编写一个简单的程序,如下所示
import Foundation
import SwiftGodot
import SwiftGodotKit
func loadScene (scene: SceneTree) {
let rootNode = Node3D()
let camera = Camera3D ()
camera.current = true
camera.position = Vector3(x: 0, y: 0, z: 2)
rootNode.addChild(node: camera)
func makeCuteNode (_ pos: Vector3) -> Node {
let n = SpinningCube()
n.position = pos
return n
}
rootNode.addChild(node: makeCuteNode(Vector3(x: 1, y: 1, z: 1)))
rootNode.addChild(node: makeCuteNode(Vector3(x: -1, y: -1, z: -1)))
rootNode.addChild(node: makeCuteNode(Vector3(x: 0, y: 1, z: 1)))
scene.root?.addChild(node: rootNode)
}
class SpinningCube: Node3D {
required init (nativeHandle: UnsafeRawPointer) {
super.init (nativeHandle: nativeHandle)
}
required init () {
super.init ()
let meshRender = MeshInstance3D()
meshRender.mesh = BoxMesh()
addChild(node: meshRender)
}
override func _input (event: InputEvent) {
guard event.isPressed () && !event.isEcho () else { return }
print ("SpinningCube: event: isPressed ")
}
public override func _process(delta: Double) {
rotateY(angle: delta)
}
}
func registerTypes (level: GDExtension.InitializationLevel) {
switch level {
case .scene:
register (type: SpinningCube.self)
default:
break
}
}
runGodot(args: [], initHook: registerTypes, loadScene: loadScene, loadProjectSettings: { settings in })
一个您可以作为起点的独立示例可在此处获得,当用作 SwiftPM 时
https://github.com/migueldeicaza/SwiftGodotKit/tree/main/StandaloneExample
如果您想编译您自己的 libgodot.framework
版本,请按照以下说明进行操作
将 SwiftGodot 和 SwiftGodotKit 以及适合用作库的 Godot 版本作为对等项目检出
git clone git@github.com:migueldeicaza/SwiftGodot
git clone git@github.com:migueldeicaza/SwiftGodotKit
git clone git@github.com:migueldeicaza/libgodot
编译 libgodot,此示例显示了我自己是如何执行此操作的,但您可以使用不同的版本
cd libgodot
scons target=template_debug dev_build=yes library_type=shared_library debug_symbols=yes
上述操作将生成您想要的二进制文件,然后使用 SwiftGodot 中的脚本(与此存储库对等)从中创建一个 xcframework
cd ../SwiftGodot/scripts
sh -x make-libgodot.xcframework ../../SwiftGodot ../../libgodot /tmp/
然后您可以引用该版本的 libgodot.xcframework
目前,这依赖于当前正在等待批准的 LibGodot 补丁。
https://github.com/godotengine/godot/pull/72883
为了您的方便,我已经将 Mac 上的可嵌入 Godot 打包为 xcframework
,因此仅仅依赖于此包就应该获得您需要的一切。