I am trying to add onTapListener to a node, but a code inside of it is never being called. Can someone spot a mistake I am doing?
private fun addNodeToScene(fragment: ArFragment, createAnchor: Anchor, renderable: ModelRenderable) {
val anchorNode = AnchorNode(createAnchor)
anchorNode.setOnTapListener{_,_ ->
buttonasd.text = "asdasd" // this line is never called
}
val transformableNode = TransformableNode(fragment.transformationSystem)
transformableNode.renderable = renderable
transformableNode.setParent(anchorNode)
fragment.arSceneView.scene.addChild(anchorNode)
transformableNode.select()
}
to make it works you shold do following :
private fun addNodeToScene(fragment: ArFragment, createAnchor: Anchor, renderable: ModelRenderable) {
val anchorNode = AnchorNode(createAnchor)
val transformableNode = TransformableNode(fragment.transformationSystem).apply {
setOnTapListener { _, _ ->
//TODO your action
}
}
transformableNode.localPosition = Vector3(0f,0.3f,0f)
transformableNode.renderable = renderable
transformableNode.setParent(anchorNode)
fragment.arSceneView.scene.addChild(anchorNode)
transformableNode.select()
}
Try a slightly different approach, like this:
private var grid = Array(ROW_NUM) {
arrayOfNulls<TranslatableNode>(COL_NUM)
}
val anchorNode = AnchorNode(hitResult.createAnchor())
anchorNode.setParent(arFragment.arSceneView.scene)
grid.matrixIndices { col, row ->
val renderableModel = droidRenderable?.makeCopy() ?: return@matrixIndices
TranslatableNode().apply {
setParent(anchorNode)
renderable = renderableModel
addOffset(x = row * spacing, z = col * spacing)
grid[col][row] = this
this.setOnTapListener { _, _ ->
// button.text = "asdasd"
}
}
}
Hope this helps.