extends ShapeCast3D @export var shadow : Decal @export var min_distance : float = 1.0 @onready var _initial_alpha : float = shadow.modulate.a func _physics_process(delta: float) -> void: for index in range(self.get_collision_count()): var distance := self.get_collision_point(index).distance_to(self.global_position) if distance > min_distance: shadow.global_position = self.get_collision_point(index) shadow.modulate.a = _initial_alpha else: shadow.modulate.a = lerp(0.0, _initial_alpha, distance / min_distance)
or share this direct link: