【发布时间】:2021-08-29 22:27:35
【问题描述】:
我目前正在尝试在 Godot 引擎中制作 FPS(使用 GDscript),我决定使用光线投射武器,因为它看起来更容易跟踪。但是,当我检查碰撞并告诉敌人 queue_free() 时,它不起作用。因此,我为什么要堆栈溢出,因为它总是有答案。
PS,我正在使用打印功能来测试点火,因为我还没有合适的模型,只有一个圆柱体一个盒子和一些地面。
extends Node
class_name Weapon
export var FireRate = 0.5
export var ClipSize = 6
export var Reload = 2
onready var raycast = $"../Head/Camera/RayCast"
var reloading = true
var currentammo = ClipSize
var can_fire = true
func _process(delta):
if (Input.is_action_just_pressed("LMB") and can_fire):
if (currentammo > 0):
reloading = false
print ("fired weapon")
can_fire = false
currentammo -= 1
check_collision()
yield(get_tree().create_timer(FireRate), "timeout")
can_fire = true
elif not reloading:
reloading = true
print ("Out of Ammo!")
print ("Reloading...")
yield(get_tree().create_timer(Reload), "timeout")
currentammo = ClipSize
print ("Reload Complete!")
func check_collision():
if raycast.is_colliding():
var collider = raycast.get_collider()
if collider.is_in_group("Enemies"):
collider.queue_free()
print("Killed " + collider.name)
【问题讨论】:
-
有很多地方可能出错,尝试使用断点,看看是否一切都按预期调用
-
当你说它不起作用时,你是什么意思?你的意思是它什么都不做(包括不打印发射的武器和杀死的消息)?你的意思是它会导致错误消息吗?你的意思是别的吗? “不起作用”不是描述问题的好方法。
-
@Theraot 抱歉没有指定,它不会打印任何内容或删除它要删除的对象。
-
@ParanoidAndroid 第一个嫌疑人将是行动。你确定
"LMB"在项目设置中注册了吗? -
@Theraot 是的,因为我用它来烧其他东西,而且效果很好。它仍然负责所有的拍摄和重新加载,唯一不起作用的是 RayCast,不知道为什么。