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

如何在RealityView中修改无ModelComponent实体的网格及VideoPlayerComponent圆角?

RealityKit 实体网格与 VideoPlayer 圆角修改方案

问题1:修改无 ModelComponent 实体的网格

对于没有自带 ModelComponent 的实体(比如自动生成渲染载体的 VideoPlayer 实体),有两种可行方式:

  • 手动添加自定义 ModelComponent 覆盖默认网格:直接创建符合需求的网格和材质,给实体添加 ModelComponent,系统会用你定义的网格替代自动生成的版本。
  • 遍历子实体修改自动生成的网格:RealityKit 给带 VideoPlayerComponent 的实体自动添加的渲染载体是它的子实体,你可以遍历实体的子节点,找到带有 ModelComponent 的那个实体,然后修改其 mesh 或材质属性。

问题2:修改 VideoPlayerComponent 实体的圆角

完全可以实现,推荐两种方案:

方案1:自定义带圆角的 ModelComponent 替换默认网格

手动创建带圆角的矩形网格,给实体添加 ModelComponent,视频会直接渲染在你定义的圆角载体上。修改后的示例代码如下:

var body: some View {
    RealityView { content in
        let entity = Entity()
        let player = AVPlayer()
        entity.components[VideoPlayerComponent.self] = .init(avPlayer: player)
        
        // 创建带圆角的网格(可自行调整尺寸和圆角半径)
        let mesh = MeshResource.generateBox(size: [2, 1.5, 0.01], cornerRadius: 0.1)
        let material = SimpleMaterial()
        entity.components[ModelComponent.self] = .init(mesh: mesh, materials: [material])
        
        content.add(entity)
    }
}

方案2:修改自动生成的子实体网格

等待实体加载完成后,遍历其子实体找到承载渲染的 ModelComponent,修改网格的圆角属性。需要注意要在实体渲染完成后执行,可通过监听场景事件实现:

var body: some View {
    RealityView { content in
        let entity = Entity()
        let player = AVPlayer()
        entity.components[VideoPlayerComponent.self] = .init(avPlayer: player)
        content.add(entity)
        
        // 监听实体加入场景的事件,确保渲染载体已生成
        content.subscribe(to: SceneEvents.DidAddEntity.self) { event in
            guard event.entity == entity else { return }
            // 遍历所有子实体,找到带ModelComponent的渲染载体
            entity.visit { child in
                if var modelComp = child.components[ModelComponent.self] {
                    // 获取原网格尺寸,生成对应圆角网格替换
                    let originalSize = modelComp.mesh.bounds.extents
                    let roundedMesh = MeshResource.generateBox(size: originalSize, cornerRadius: 0.1)
                    modelComp.mesh = roundedMesh
                    child.components[ModelComponent.self] = modelComp
                }
            }
        }
    }
}

参考:WWDC23《用 RealityKit 增强你的空间计算应用》相关内容

内容的提问来源于stack exchange,提问作者Jack Guo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:06:22