@tool extends ActionWithTarget class_name ActionMoveTo @export var dist_min: float = 0 @export var dist_max: float = 5 @export var offset: float = 0.1 #0为无偏差 1为偏差90度 func run_with_target(character: Character, target: Character) -> BT.Status: var dir: Vector2 = target.pos2D() - character.pos2D() var dist: float = dir.length() if (dist > dist_min ) and (dist < dist_max): character.move_stop() return SUCCESS var is_far: bool = dist >= dist_max var to_dir: Vector2 = dir if is_far else -dir var offset_deg: float = 90 * randf() * clamp(offset, 0, 1) * (1 if randf() < 0.5 else -1) to_dir = to_dir.rotated(deg_to_rad(offset_deg)) character.move_to(dir if is_far else -dir) return FAILURE