While the forums are down, I have spawned an instance in a 3D world and would like to execute a function one the instance when I click it with my mouse. How would I do that?

  • simple@lemm.ee
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    You can use an Input Event like this or if you want a more flexible solution you can shoot a raycast from the camera and check if you hit an object that can be clicked.

    • heimchenOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      I am trying to add this to an Character 3D like this

      func _on_input_event(camera, event, position, normal, shape_idx):
      	print(event)
      	if event is InputEventMouseButton: 
      		if event.button_index == MOUSE_BUTTON_LEFT and event.pressed == true:
      			print("PRESST")
      

      but it doesn’t print anything, it is Ray pickable and the signal is connected

      • simple@lemm.ee
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        1 year ago

        Are you sure the input event is coming from your staticbody/rigidbody/characterbody? Also double check that you have a collisionshape/collisionpolygon under that so it can detect collisions. I’ve tried your code on my staticbody3D and it worked just fine.

        func _on_static_body_3d_input_event(camera, event, position, normal, shape_idx):
        	print(event)
        	if event is InputEventMouseButton: 
        		if event.button_index == MOUSE_BUTTON_LEFT and event.pressed == true:
        			print("PRESST")
        
        • heimchenOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 year ago

          Yes thank you, the collisionshape was ConvexPolygonShap, changing it to box fixed it.