godot4人物移动一段距离后随机旋转代码,(死循环)
extends CharacterBody3D@export var move_speed:float = 2.0 @export var rotation_speed:float = 1.5 @export var move_distance:float = 5var current_direction:Vector3 = Vector3.MODEL_FRONT var distance_moved:float = 0.0 enum Action {idle,move,rotate} var current_action = Action.idlevar target_random_rotate_randfunc _ready() -> void:current_action = Action.movefunc _physics_process(delta: float) -> void:match current_action:Action.move:handle_move(delta)Action.rotate:handle_rotate(delta) func handle_move(delta):velocity = current_direction * move_speedmove_and_slide()distance_moved += move_speed * deltaif distance_moved >= move_distance:distance_moved = 0.0#target_random_rotate_rand = rotation.y+randf_range(-90,90)#约-45°到45°target_random_rotate_rand = rotation.y + randf_range(-PI/4, PI/4)#print_debug(target_random_rotate_angle)current_action = Action.rotate func handle_rotate(delta):var current_angle = rotation.yvar new_rand = lerp_angle(current_angle,target_random_rotate_rand,delta*rotation_speed)rotation.y = new_rand# 计算角度差值(考虑角度循环性)var diff = abs(target_random_rotate_rand - new_rand)var rotation_diff = min(diff,2*PI - diff)if rotation_diff < 0.1:current_direction = Vector3.MODEL_FRONT.rotated(Vector3.UP,new_rand)current_action = Action.move#self.rotation_degrees.y = target_random_rotate_anglepass