es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)

Imagen del árbol de Godot

Llamada desde la función _process()

Llamada desde Player.gd

Tags:  

Answer

  1. Avatar for 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.

Comments are closed.