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

修改SceneForm示例后触摸SceneView无法显示相机相对位置对象的问题

排查SceneForm触摸放置对象无显示的思路

我来帮你梳理几个关键的排查方向,一步步找出问题所在:

  • 先确认andyRenderable是否成功加载
    你代码里直接使用了andyRenderable,但如果这个渲染对象没有正确初始化或加载失败,节点肯定无法显示。你需要检查是否在合适的时机(比如onCreate)完成了渲染对象的异步加载,并且确保加载成功。示例代码应该类似这样:

    private var andyRenderable: ModelRenderable? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 加载Andy模型
        ModelRenderable.builder()
            .setSource(this, R.raw.andy)
            .build()
            .thenAccept { renderable ->
                andyRenderable = renderable
                Log.d("SceneForm", "Andy模型加载成功")
            }
            .exceptionally { throwable ->
                Log.e("SceneForm", "模型加载失败: ${throwable.message}")
                null
            }
    }
    

    可以通过Log确认加载是否成功,如果加载失败,那andy.renderable就是null,自然看不到对象。

  • 检查触摸事件是否真的被触发
    你代码里加了println("Touch!"),先去Logcat里看看有没有这个输出。如果没有,说明触摸事件被ARFragment拦截了——SceneForm通常推荐使用setOnTapArPlaneListener来监听平面点击,而不是直接给arSceneView设置OnTouchListener,因为后者可能被上层的触摸逻辑消费掉。试试替换成平面点击监听:

    arFragment!!.setOnTapArPlaneListener { hitResult, plane, motionEvent ->
        println("触摸到平面了!")
        val andy = Node()
        andy.setParent(arFragment?.arSceneView?.scene?.camera)
        andy.localPosition = Vector3(0f, 0f, -1f) // 相机正前方1米
        andy.renderable = andyRenderable
    }
    
  • 验证节点的位置和父节点是否合理
    你设置的localPosition = Vector3(1.0f, 1.0f, 1.0f)是相对于相机的右方1米、上方1米、前方1米?这个位置可能在你的视野之外,或者被相机本身挡住了。可以先改成Vector3(0f, 0f, -1f)(相机正前方1米),看看能不能显示。另外,把父节点设为相机的话,节点会跟着相机移动,你触摸后移动相机看看是不是能找到它。

  • 确保所有SceneForm操作在主线程执行
    如果andyRenderable是异步加载的,要注意设置节点渲染对象的代码必须在主线程运行。如果是在thenAccept回调里操作节点,那没问题,因为thenAccept默认在主线程执行,但如果是其他子线程,就会导致节点无法正确渲染。

  • 检查AR会话是否正常运行
    确认你的设备支持ARCore,并且已经获取了相机权限,ARFragment的会话已经正常启动。可以通过arFragment?.arSceneView?.session是否为null来判断,如果会话没启动,整个AR场景都无法正常工作,节点自然显示不出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:59