Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | abbas zangaraky |
Hi, what code should I write so that when my player enters the enemy raycast range, my player is killed and the game starts again?
extends KinematicBody
const MOVE_SPEED = 4
const MOUSE_SENS = 0.5
onready var anim_player = $AnimationPlayer
onready var raycast = $RayCast
func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
yield(get_tree(), "idle_frame")
get_tree().call_group("zombies", "set_player", self)
func _input(event):
if event is InputEventMouseMotion:
rotation_degrees.y -= MOUSE_SENS * event.relative.x
func _process(delta):
if Input.is_action_pressed("exit"):
get_tree().quit()
if Input.is_action_pressed("restart"):
kill()
func _physics_process(delta):
var move_vec = Vector3()
if Input.is_action_pressed("move_forwards"):
move_vec.z -= 1
if Input.is_action_pressed("move_backwards"):
move_vec.z += 1
if Input.is_action_pressed("move_left"):
move_vec.x -= 1
if Input.is_action_pressed("move_right"):
move_vec.x += 1
move_vec = move_vec.normalized()
move_vec = move_vec.rotated(Vector3(0, 1, 0), rotation.y)
move_and_collide(move_vec * MOVE_SPEED * delta)
if Input.is_action_pressed("shoot") 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()
func kill():
get_tree().reload_current_scene()
This my player script
And
extends KinematicBody
const MOVE_SPEED = 3
onready var raycast = $RayCast
onready var anim_player = $AnimationPlayer
var player = null
var dead = false
func _ready():
anim_player.play("walk")
add_to_group("zombies")
func _physics_process(delta):
if dead:
return
if player == null:
return
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 * MOVE_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
anim_player.play("die")
func set_player(p):
player = p
This my zombie script
I’m not seeing any problem in your scripts. It could be a collision layer issue, or it could be that the raycast’s collide_with_bodies
property has been set to false.
What is the problem exactly? Is there nothing happening when zombies get close to the player?
Could you post which collision layers and masks you’ve set on the player, zombies and raycasts? Could you also check that your raycasts have collide_with_bodies
equal to true in the inspector?
Bernard Cloutier | 2020-10-14 14:44