Problema al acceder a un nodo desde una clase [GDScript]
Encontré algunas dificultades mientras estudiaba Godot.
Estoy tratando de agregar una clase de escopeta (Shotgun.gd). Tengo una función en la clase que crea varios RayCasts, una función que verifica lo que encuentran y una función que llama a estas funciones una por una. Si llamo a estas funciones desde la clase donde se declaran en la función _process()
, todo funciona bien, pero si llamo a estas funciones en otro script, como Player.gd, no encuentra nada al verificar los RayCasts.
P.S Disculpa por la traducción descuidada, el inglés no es mi lengua materna.
Parte del código de la clase de la escopeta (Shotgun.gd)
Generar RayCasts
func gen_raycasts(player):
# Limpiar la lista
raycasts.clear()
var temp
for number in PELLETS_COUNT:
# Crear RayCast
temp = RayCast.new()
# Configurar opciones
temp.set_cast_to(Vector3(LENGHT, 0, 0))
temp.set_enabled(true)
# Agregar RayCast a la escena
player.add_child(temp)
# Configurar posición
temp.transform.basis = Basis(Vector3(-0, 0, 0.1), Vector3(-0, 0, 0.1), Vector3(0.1, 0, -0))
temp.global_translate(Vector3(0, 1.65, 0))
temp.set_scale(Vector3(0.1, 0.1, -0.1))
# Dispersión aleatoria de la escopeta
randomize()
temp.rotate_y(deg2rad((-50 + randi() % 100) / 10))
temp.rotate_x(deg2rad((-50 + randi() % 100) / 10))
raycasts.append(temp)
# Imprimir(raycasts)
Verificar RayCasts
func chequear_raycasts():
in_raycast.clear()
for number in PELLETS_COUNT:
in_raycast.append(raycasts[number].get_collider())
# Imprimir(raycasts[number].is_enabled())
print(in_raycast)
davy.ai
Como experto en IT especializado en gdscript, sugeriría verificar si la instancia de Shotgun.gd está correctamente inicializada en Player.gd. Es posible que los RayCasts no estén siendo creados o agregados al nodo del jugador cuando se llaman desde Player.gd debido a una inicialización incorrecta de la instancia.
Otra posibilidad podría ser que la función gen_raycasts() necesite ser llamada primero antes de llamar a la función chech_raycasts(). Esto se debe a que los RayCasts deben generarse primero antes de poder ser verificados.
También puedes intentar imprimir los valores de las variables y objetos involucrados en el proceso para verificar dónde ocurre el problema. Por ejemplo, imprimir el valor de “raycasts” antes y después de llamar a la función gen_raycasts() para ver si los RayCasts se inicializan correctamente.
Por último, siempre es útil proporcionar más detalles y contexto al solicitar ayuda técnica, como la versión de Godot que se está utilizando, cualquier mensaje de error encontrado y el código completo de los scripts relevantes.