You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在iOS的SwiftUI环境中以编程方式与Spline 3D场景交互

在SwiftUI中与Spline 3D场景编程交互

可以在iOS的SwiftUI环境中实现与Spline 3D场景的变量交互,以下是针对你的需求的具体实现方案和示例:

1. 修改Spline变量的值

首先确保你已集成Spline iOS SDK(可通过Swift Package Manager导入)。在SwiftUI中,你需要先获取SplineScene的引用,再调用其setValue(forVariable:)方法修改变量值:

import SwiftUI
import Spline

struct SplineVariableDemo: View {
    @State private var splineScene: SplineScene?

    var body: some View {
        VStack(spacing: 20) {
            // 加载Spline场景
            SplineView(sceneURL: URL(string: "https://your-spline-scene-url.spline")!)
                .onSceneLoaded { loadedScene in
                    splineScene = loadedScene
                }
            
            // 触发变量修改的按钮
            Button("Set Rotation Speed to 5") {
                // 替换为你在Spline编辑器中定义的变量名
                splineScene?.setValue(5.0, forVariable: "rotationSpeed")
            }
        }
    }
}

注意:变量名必须与你在Spline编辑器中创建的变量完全匹配,且值的类型要对应(比如Spline中的Number变量对应Swift的Double,Boolean对应Bool)。

2. 监听Spline变量的值变化

通过SplineScene的addVariableObserver(for:handler:)方法可以监听变量的实时变化,在回调中处理更新逻辑:

// 在onSceneLoaded回调中添加观察者
.onSceneLoaded { loadedScene in
    splineScene = loadedScene
    
    // 监听名为"progress"的变量
    loadedScene.addVariableObserver(for: "progress") { newValue in
        guard let progressValue = newValue as? Double else { return }
        // 这里可以更新SwiftUI状态或执行其他逻辑
        print("Spline progress updated: \(progressValue)")
    }
}

如果需要实现双向绑定(SwiftUI状态与Spline变量同步),可以结合onChange修饰符:

@State private var localProgress: Double = 0.0

var body: some View {
    VStack {
        SplineView(sceneURL: URL(string: "your-scene-url.spline")!)
            .onSceneLoaded { scene in
                splineScene = scene
                // 监听Spline变量更新本地状态
                scene.addVariableObserver(for: "progress") { newValue in
                    if let newVal = newValue as? Double {
                        localProgress = newVal
                    }
                }
            }
        
        // SwiftUI滑块控制本地状态
        Slider(value: $localProgress, in: 0...1)
            .onChange(of: localProgress) { newVal in
                // 本地状态更新时同步到Spline变量
                splineScene?.setValue(newVal, forVariable: "progress")
            }
    }
}

注意事项

  • 确保Spline场景已发布并可通过公开URL访问
  • 变量类型不匹配会导致赋值或监听失败,需严格对应
  • 若需要处理复杂交互,可结合Spline的事件系统(如触发场景中的触发器)

内容的提问来源于stack exchange,提问作者Dubon Ya'ar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:11