godot-demo-projects/3d/physics_tests/utils/control3d.gd

31 lines
536 B
GDScript

extends Control
@export var world_offset = Vector3.ZERO
var _pos_offset
var _attachment
func _ready():
_pos_offset = position
_attachment = get_parent() as Node3D
func _process(_delta):
if _attachment == null:
return
var viewport = get_viewport()
if viewport == null:
return
var camera = viewport.get_camera_3d()
if camera == null:
return
var world_pos = world_offset + _attachment.global_transform.origin
var screen_pos = camera.unproject_position(world_pos)
position = _pos_offset + screen_pos - 0.5 * size