extends CharacterBody3D
@export var move_speed:float = 2.0
@export var rotation_speed:float = 1.5
@export var move_distance:float = 5
var current_direction:Vector3 = Vector3.MODEL_FRONT
var distance_moved:float = 0.0
enum Action {idle,move,rotate}
var current_action = Action.idle
var target_random_rotate_rand
func _ready() -> void:
current_action = Action.move
func _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_speed
move_and_slide()
distance_moved += move_speed * delta
if 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.y
var 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_angle
pass