Pesquisar este blog

player com camera r raycast - godot

extends CharacterBody3D const SPEED = 5.0 const JUMP_VELOCITY = 4.5 const MOUSE_SENSITIVITY = 0.003 @onready var camera_3d: Camera3D = $Camera3D # Como o RayCast3D agora está dentro da Camera3D @onready var ray_cast_3d: RayCast3D = $Camera3D/RayCast3D const MIN_PITCH = deg_to_rad(-80.0) const MAX_PITCH = deg_to_rad(80.0) var camera_pitch: float = 0.0 # Guarda o último objeto detectado para não repetir o print sem parar var last_detected_object: Object = null func _ready() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseMotion: rotate_y(-event.relative.x * MOUSE_SENSITIVITY) camera_pitch -= event.relative.y * MOUSE_SENSITIVITY camera_pitch = clamp(camera_pitch, MIN_PITCH, MAX_PITCH) camera_3d.rotation.x = camera_pitch if event.is_action_pressed("ui_cancel"): Input.mouse_mode = Input.MOUSE_MODE_VISIBLE func _physics_process(delta: float) -> void: if not is_on_floor(): velocity += get_gravity() * delta if Input.is_action_just_pressed("ui_accept") and is_on_floor(): velocity.y = JUMP_VELOCITY var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: velocity.x = direction.x * SPEED velocity.z = direction.z * SPEED else: velocity.x = move_toward(velocity.x, 0, SPEED * delta * 10.0) velocity.z = move_toward(velocity.z, 0, SPEED * delta * 10.0) move_and_slide() # Função para checar o que o raio está tocando _check_raycast_collision() func _check_raycast_collision() -> void: if ray_cast_3d.is_colliding(): var collider = ray_cast_3d.get_collider() # Só imprime se for um objeto novo que você ainda não estava olhando if collider != last_detected_object: last_detected_object = collider print("Tocando em: ", collider.name) else: # Se o raio não estiver tocando em nada, reseta last_detected_object = null