Realitykit-自定义材质

时间:2020-06-01 19:45:47

标签: arkit swift5 realitykit

使用Realitykit,尝试将moon Entity的材质更改为自定义.jpg,然后点击屏幕以基于hitTest生成该对象。当我点击并在调试中出现以下错误时,什么都没有显示: [碰撞]无效的参数(SphereRadius),值= 0.000000,已传递给形状创建。

import UIKit
import RealityKit

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            if let touchLocation = touches.first?.location(in: arView){
                let hitTest = arView.hitTest(touchLocation)
                if let hitResult = hitTest.first {
                    addObject(at: hitResult)
                }
            }
        }

        func addObject(at hitResult: CollisionCastHit) {
            let moonAnchor = try! Galaxy.loadWorld()
            let moon = moonAnchor.moon! as! ModelEntity
            var material = SimpleMaterial()
            material.baseColor = try! MaterialColorParameter.texture(TextureResource.load(named: "8k_moon.jpg"))
            moon.model?.materials = [material]
            moon.position = SIMD3(x: hitResult.position.x, y: hitResult.position.y, z: hitResult.position.z)
            arView.scene.addAnchor(moonAnchor)
        }

}

2 个答案:

答案 0 :(得分:1)

在尝试对没有CollisionComponent的实体进行HitTest时遇到了该错误。命中测试需要在目标实体上使用CollisionComponent:

“该方法将忽略缺少CollisionComponent的实体。” https://developer.apple.com/documentation/realitykit/arview/3243230-hittest

如果这是问题所在,并且由于您的模型是从Reality Composer加载的,则解决方案是选中RC的“物理”部分中的“参与”框。

答案 1 :(得分:0)

就我而言,我忘记在 hitResult 中初始化我的锚点:

let anchor = AnchorEntity(world: transform)