Hola AyGabi! Como estas?
Estuve siguiendo el mismo tutorial para ver como esta armado tu sistema de daño y lo primero que puedo decirte es que vas a necesitar hacer varios cambios para que tus enemigos tengan barras de vida en diferentes partes del cuerpo.
Lo primero que deberías hacer es crear un nuevo actor con un box collider y asignarle a ese mismo actor la interfaz, el componente del sistema de daño y el widget de la barra de vida, como se ve en la siguiente imagen.
Luego, las funciones Heal, Get Max Health y Get Current Health se pueden quedar igual que en el tutorial. Pero para la función Take Damage vas a necesitar un Event Dispatcher “On Damage Taken”.
Lo ultimo que debes hacer con este actor es, al igual que en el tutorial, agregar el Widget en el evento On BeginPlay.
Una vez hecho esto, vas a tener que realizar varios cambios en el enemigo para lograr que todo funcione. Te recomiendo que dupliques el enemigo que ya funciona igual que el tutorial, para que luego puedas comparar las diferencias entre cada uno.
Lo primero que vas a necesitar en el BP del enemigo es eliminar todo lo relacionado al Widget, tanto el componente como la sección donde lo llamas en el On BeginPlay.
Luego, deberías agregar el nuevo actor que creaste (en mi caso se llama BP_BodyPart) tantas veces como lo necesites, y alinearlos con la parte del cuerpo que quieras representar. En mi ejemplo agregué dos, uno para cada brazo.
Una vez agregados estos actores, vas a tener que crear un nuevo evento en el Event Graph.
Podemos llamarlo “Damage Taken”. A continuacion una imagen de como debería quedar:
En este Custom Event vamos a checkear la vida que tiene el personaje en este momento y ver si esta muerto o no. En caso de estar muerto vamos a llamar el Custom Event “Death”, al cual le agregaremos una parte para setear la variable “Is Death” en true.
Luego necesitas bindearte al evento que agregaste al “Take Damage” cuando creaste el actor. Hacer esto con un Child Actor es un poco distinto a como lo hiciste con el tutorial, asi que te explico y te agrego unas imagenes de referencia a continuacion:
-
Arrastra el componente al Graph, arrastra desde el pin del componente y busca “Get Child Actor”.
-
Arrastra desde el nuevo pin y castea al nombre del actor que corresponde (el que creaste previamente).
-
A Partir del nuevo pin deberias poder bindearte al evento como ya hiciste anteriormente, esta vez vinculandote al Custom Event “Damage Taken”. Y luego hay que repetir el proceso por cada Child Actor que agregues.
Por ultimo, si queremos que la vida total del enemigo sea la suma total de todas sus partes, necesitamos hacer algunos cambios en las funciones de la interfaz dentro del Enemy.
Empezando por eliminar todo en las funciones Take Damage y Heal, ya que estas funciones las estará realizando cada parte del enemigo por separado.
Luego deberiamos hacer que Get Max Health y Get Current Health se calculen en base a las partes. Eso lo hacemos de la siguiente manera:
Un ultimo detalle a cambiar, para que el daño se aplique correctamente a las partes del enemigo, se encuentra en donde hiciste la habilidad para golpear al enemigo. Cuando haces el “Make Array” para los Object Types, deberias seleccionar la opcion WorldDynamic en lugar de Pawn. Ya que ahora queremos que nuestro trace impacte contra las partes del enemigo y no contra el enemigo en si.
Haciendo todos estos cambios deberías ser capaz de tener barras de vida para cada parte del enemigo a la vez que la vida total del mismo esta determinada por la sumatoria de sus partes. Para agregar mas partes solo necesitas bindearte a los eventos de cada una y agregarlas a la suma de max health y current health.
Incluyo un video de como debería verse en comparación al enemigo del tutorial que seguiste anteriormente.
Espero que esto resuelva tus dudas! Saludos!