Помогите создать скрипт для моба в godot
Скрипт для следованием за игроком есть, но он не останавливается перед каждым бугром. Помогите написать код чтобы он прыгал за игроком
вот пример кода с rigidbody2d, скидываю из заброшенного проекта, тут много лишнего что не относится к задаче, код который тебе нужен - в конце. а вообще свою реализацию советую написать, если не используешь rigidbody
func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
var step = state.get_step()
var direction: Vector2
velocity = state.get_linear_velocity()
if is_tower_target:
target_obj = enemy_tower
else:
var creeps_in_area = check_area.get_overlapping_bodies()
if creeps_in_area:
var nearest_creep: Creep = creeps_in_area[0]
for c in creeps_in_area:
if self.global_position.distance_to(c.global_position) < self.global_position.distance_to(nearest_creep.global_position):
nearest_creep = c
target_obj = nearest_creep
else:
is_tower_target = true
if is_instance_valid(target_obj):
direction = self.global_position.direction_to(target_obj.global_position)
var distance = self.global_position.distance_to(target_obj.global_position)
sword_transform.position.x = lerp(sword_transform.position.x, sign(direction.x) * sword_offset, 0.1)
#sword_transform.rotation_degrees = lerp(sword_transform.rotation_degrees, sign(direction.x) * 0, 0.05)
sword_visual.transform = sword_transform.transform
if not is_punch:
if attack_area.get_overlapping_bodies():
var direction_x = signf(self.global_position.direction_to(target_obj.global_position).x)
sword.punch(direction_x)
for contact_index in state.get_contact_count():
var collision_normal = state.get_contact_local_normal(contact_index)
if collision_normal.dot(Vector2(0, -1)) > .6:
if target_obj is Creep or (target_obj is DefenceTower and self.global_position.distance_to(target_obj.global_position) > 150):
velocity.y -= JUMP_VELOCITY * step
else:
velocity.y -= (JUMP_VELOCITY * 2.75) * step
is_push = false
if abs(velocity.x) > 10.0:
walk_animation.play("walk")
else:
walk_animation.pause()
if not is_push:
velocity.x += 2.5 * direction.x
if abs(velocity.x) >= MAX_SPEED:
velocity.x = sign(velocity.x) * MAX_SPEED
state.set_linear_velocity(velocity)
func _physics_process(delta: float) -> void:
if is_replace:
set_linear_velocity(Vector2.ZERO)
self.global_position = pos_to_replace
is_replace = false