Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | thebraveknight999 |
I cannot for the life of me figure out how to get enemies to chase the player. I’ve looked at multiple tutorials but nothing is working.
Here is the script for the enemy (its really messy because I’ve been messing around trying to figure this out for a while now):
extends KinematicBody
export var speed = 3
onready var raycast = $RayCast
onready var anim_player = $AnimationPlayer
onready var collisionshape = $Area2/CollisionShape
onready var area = $Area/CollisionPolygon
var player = null
var dead = false
var target
var space_state
func _ready():
anim_player.play("walk")
add_to_group("Zombies")
space_state = get_world().direct_space_state
func _physics_process(delta):
if dead:
return
if player == null:
return
if target:
var result = space_state.intersect_ray(global_transform.origin, target.global_transform.origin)
if result.collider.is_in_group("Player"):
look_at(target.global_transform.origin, Vector3.UP)
move_to_target(delta)
var vec_to_player = player.translation - translation
vec_to_player = vec_to_player.normalized()
raycast.cast_to = vec_to_player * 1.5
move_and_collide(vec_to_player * speed * delta)
if raycast.is_colliding():
var coll = raycast.get_collider()
if coll != null and coll.name == "Player":
coll.kill()
func kill():
dead = true
$CollisionShape.disabled = true
collisionshape.disabled = true
anim_player.play("die")
area.disabled = true
func set_player(p):
player = p
func _on_Area_body_entered(body):
if body.is_in_group("Player"):
target = body
print(body.name + " entered")
func _on_Area_body_exited(body):
if body.is_in_group("Player"):
target = null
print(body.name + " exited")
func move_to_target(delta):
var direction = (target.transform.origin - transform.origin).normalized()
move_and_slide(direction * speed * delta, Vector3.UP)
func _on_Area2_body_entered(body):
if body.is_in_group("Player"):
print(body.name + " was killed")
target = body
get_tree().reload_current_scene()
I’m really not sure what the problem is so I’ll include the Player script here too for reference:
extends KinematicBody
export var speed = 10
export var acceleration = 5
export var gravity = 1.38
export var jump_power = 34
export var mouse_sensitivity = 0.1
onready var head = $Head
onready var camera = $Head/Camera
onready var anim_player = $Head/Camera/AnimationPlayer
onready var raycast = $Head/Camera/RayCast
var velocity = Vector3()
var camera_x_rotation = 0
func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
yield(get_tree(), "idle_frame")
get_tree().call_group("zombies", "set_player", self)
add_to_group("Player")
func _input(event):
if event is InputEventMouseMotion:
head.rotate_y(deg2rad(-event.relative.x * mouse_sensitivity))
var x_delta = event.relative.y * mouse_sensitivity
if camera_x_rotation + x_delta > -90 and camera_x_rotation + x_delta < 90:
camera.rotate_x(deg2rad(-x_delta))
camera_x_rotation += x_delta
func _process(delta):
if Input.is_action_just_pressed("ui_cancel"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
func _physics_process(delta):
var head_basis = head.get_global_transform().basis
if Input.is_action_pressed("exit"):
get_tree().quit()
if Input.is_action_pressed("restart"):
kill()
var direction = Vector3()
if Input.is_action_pressed("move_forward"):
direction -= head_basis.z
elif Input.is_action_pressed("move_back"):
direction += head_basis.z
if Input.is_action_pressed("strafe_left"):
direction -= head_basis.x
elif Input.is_action_pressed("strafe_right"):
direction += head_basis.x
if Input.is_action_pressed("primary fire") and !anim_player.is_playing():
anim_player.play("shoot")
var coll = raycast.get_collider()
if raycast.is_colliding() and coll.has_method("kill"):
coll.kill()
direction = direction.normalized()
velocity = velocity.linear_interpolate(direction * speed, acceleration * delta)
velocity.y -= gravity
if Input.is_action_just_pressed("jump") and is_on_floor():
velocity.y += jump_power
velocity = move_and_slide(velocity, Vector3.UP)
func kill():
get_tree().reload_current_scene()
Can anyone help me out here? I’ve been struggling with this for weeks now. I would greatly appreciate help.
The problem here is that enemies move away from the target instead of toward it.
thebraveknight999 | 2020-05-11 00:11