Buenas. He hecho un código en el cual si disparas a un cubo, el cubo se destruye y en un widget exterior se resta uno a los cubos que te quedan por destruir. El problema es que si quedan 3 y destruyo uno pone que quedan 2, pero si destruyo otro más se sigue quedando en 2. Me imagino que es porque cada cubo es distinto y tiene la variable en 3, por eso no baja de 2. Aun sabiendo eso, no se como arreglarlo, ¿alguna solucion? Probé a hacer la variable pública pero nada. Gracias
Hola!
Con la info que me compartes suena a un tema de que existen varias variables que almacenan la misma información pero que no estan sincronizadas entre ellas.
Para poder responder tengo que hacer varios supuestos respecto a lo que intentas lograr, así que ojalá te ayude la respuesta.
Estoy suponiendo que son cubos que están alrededor del mapa y el widget que te dice cuantos cubos restan se muestra en la pantalla del jugador tipo un HUD.
En ese caso, lo primero que hay que hacer es definir quien debería guardar la información respecto a cuantos cubos quedan en el juego para que no suceda este tema de que diferentes actores guardan la misma información pero de forma desincronizada.
Si quieres puedes seguir las convenciones del framework de unreal que indican que si afecta al progreso del juego lo puedes poner el Game Mode. Si solo funcionan dentro de un nivel, lo podrías poner en el Level Blueprint de ese nivel. Si no es muy importante quizás lo podrías poner en el personaje (o controller) que se encarga de destruir los cubos. Ya si tienes varios espacios en donde los cubos a destruir son independientes los unos entre los otros, entonces el objeto que es afectado (quizás una puerta que se abre cuando se destruyen todos los cubos) deberia ser quien guarde la variable.
Con eso resuelto, ya se vuelve más fácil la comunicación entre las clases porque es un tema de ver quien le debería mandar la información a quien.
Como recomendación, en estos temas de lógica ayuda bastante hacer diagramas de flujo para ordenar las ideas antes de programar y saber en qué lugar estás almacenando las variables.
Muchas gracias por la respuesta! Como has dicho, he probado a almacenar la variable CubosRestantes en otro lado, en este caso en el level blueprint (antes estaba en el cubo). Los futuristCube son los que quiero que vayan disminuyendo en el widget a medida que los vamos destruyendo. He referenciado con un cast el cubo al level blueprint pero no se como referenciar al cubo donde el “as futurist cube”.
Muchas gracias y perdón si es una pregunta algo estúpida u obvia, no he empezado hace mucho a usar unreal.
Lo que no entiendo por completo es en donde existe este código. Imaginaria que está dentro del cubo porque cuando recibe un evento Hit se destruye al final, pero luego no tendría mucho sentido ese cast, a menos que sea un cast con el blueprint que va a colisionar con el cubo (Y me parece que eso es un cast a sí mismo a menos que ese FuturistCube lo uses como proyectil).
De cualquier manera, para esto no necesitas el tick. El tick es un evento que se ejecuta cada frame y no te da información acerca de la colisión.
Intenta con este cambio:
Es una captura del level blueprint. Pense que si lo enlazaba con el casteo podia acceder a destruir el cubo y actuar en su colision con algo pero me imaginaba que estaria mal. El problema es que el casteo no se hace bien y debe ser porque dentro del casteo no se que conectar a “object” y “as futurist cube”, ya que he probado a referenciar el cubo como actor de varias maneras pero nada
Vale, ya se como referenciar el cubo con el casteo. El unico problema que encuentro ahora es como hago que ese codigo se ejecute cuando golpeo al cubo, ya que el event hit lo tengo que poner en el blueprint del cubo si o si y he probado a llamarlo desde ahi con una variable booleana pero nada. Y, en cuanto al event tick, se que no es lo más optimo pero tengo que poner un evento al principio para que funcione el código, ¿no? Y por ejemplo, eventos como el begin play tampoco valdrian en este caso.
Para que el codigo se ejecute cuando golpeas al cubo, el evento hit solo funcionará si el cubo tiene colision y otro cubo lo toca. Si estas usando un trace de algun tipo el evento hit no se ejecutara.
Como manejas ese tema de “golpear” al cubo?
Si, tienes que poner un evento antes para que funcione el codigo, pero puede ser un CustomEvent con el nombre que quieras, que luego puedas llamar a la hora de que la colision ocurra.
Al final despues de probar todo me funcionó metiendole una tag a los cubos y haciendo que se vayan restando despues de un get all actors with tag. Muchas gracias de todos modos por la ayuda!