‫Hola y bienvenido de nuevo.
‫Ahora, ya hemos creado nuestra clase de proyectil, y estamos listos para comenzar a generar estas cosas
‫en el nivel para que podamos lanzarlas a las torres y eventualmente destruirlas.
‫Ahora, los actores de desove involucrarán la función de actor de desove.
‫Así que vamos a aprender cómo funciona eso en este video.
‫Ahora, hablemos de generar el proyectil.
‫Esto es algo que nos gustaría hacer desde el punto de vista de C++.
‫Vamos a llamar a las funciones de C++ para crear nuevos objetos dinámicamente en el mundo.
‫Ahora estamos generando desde el lado C++ de las cosas, pero nos gustaría generar un objeto basado en el modelo de
‫nuestra clase de proyectil.
‫El motivo es que tenemos un modelo basado en la clase A Projectile C++, que contiene
‫información adicional.
‫Específicamente, tiene ese conjunto de propiedades de malla.
‫Elegimos la malla para nuestro componente de malla estática.
‫Así que no podemos simplemente generar la versión C++.
‫Tenemos que generar la versión del plano para obtener esa malla.
‫Entonces, la pregunta es ¿cómo generamos un objeto en C ++, que se basa en un plano?
‫Bueno, vamos a aprender sobre algo llamado Subclase PT de ahora esta es una plantilla.
‫Y como muchas plantillas, los corchetes angulares requerirán un tipo.
‫Entonces, usar la subclase PT requiere un parámetro de tipo.
‫Y esto nos permite tener una variable que almacena algo llamado clase U.
‫La clase U representa un tipo de clase, pero también tiene la capacidad de interactuar con el sistema de reflexión del
‫motor irreal.
‫Cuando digo reflexión, me refiero al intercambio de información entre C++ y el lado del modelo.
‫La subclase PT, como sugiere el nombre, nos permite almacenar una variable que representa una clase basada en el tipo
‫que estamos pasando o una subclase de este tipo elegido.
‫Esto significa que podemos elegir un tipo y la subclase t puede contener una clase u que representa ese tipo o cualquier
‫tipo derivado de él.
‫Y esto incluye planos basados en el tipo.
‫Entonces, veamos cómo funciona esta subclase t de cosas.
‫Bueno.
‫Así que estoy de vuelta aquí en base pom y la razón por la que estoy en base pod es porque queremos que este proyectil esté
‫tanto en la clase de tanque como en la de torre.
‫Ambas clases generarán proyectiles.
‫Así que me gustaría una subclase t de variable aquí.
‫Así que voy a decir t subclase de y en los paréntesis angulares necesitamos pasar un tipo.
‫Ahora podemos reenviar declaraciones incluso dentro de paréntesis angulares como este.
‫Y voy a hacer que el tipo sea un proyectil.
‫Y la razón es porque creamos la clase proyectil y su tipo es un proyectil.
‫Así que voy a crear esta variable y la llamaré clase de proyectil.
‫Ahora, esto nos permitirá tener una variable de C++ que represente un tipo de clase, y el tipo puede estar
‫basado en un proyectil, incluso un tipo de clase blueprint basado en esto.
‫Ahora voy a darle una propiedad U.
‫Y como me gustaría poder editar esto, al menos en el modelo predeterminado, voy a hacer que
‫esta edición sea la predeterminada.
‫Solo que ahora podemos darle a esto una categoría.
‫Lo colocaré en una categoría llamada combate.
‫Ahora sigamos adelante y compilemos esto.
‫Bien, estoy de vuelta en el editor y voy a ir a la carpeta de planos y de allí
‫a la carpeta Pons.
‫Y voy a abrir BP -- tank y abrir el editor de planos completo.
‫Ahora, si miro en el panel de detalles, puedo buscar combate.
‫Aquí está.
‫Y aquí está la variable de clase de proyectil.
‫Esta es esa subclase de la que llamamos clase proyectil.
‫Ahora observe que podemos configurarlo aquí y podemos configurarlo usando un menú desplegable.
‫Y si hacemos clic en el desplegable, tenemos tres opciones.
‫Podemos establecerlo en ninguno, que es el valor predeterminado, lo que básicamente significa que es un puntero nulo.
‫O podemos configurarlo en proyectil o proyectil BP.
‫Eso es lo que la subclase de nos permite hacer es establecer esta clase de proyectil en un tipo particular basado en el
‫proyectil, ya que ese es el tipo que elegimos cuando creamos la variable.
‫Ahora proyectil aquí.
‫Esta es la clase de C++ llamada proyectil en C++.
‫Es un proyectil, pero el proyectil BP es un modelo basado en la clase de proyectil C++ y podemos elegir
‫esto.
‫Y ahora la clase de proyectil se establece en el tipo de proyectil BP.
‫Ahora, esto no es un componente y no es un objeto de proyectil BP.
‫Eso no es lo que es.
‫Almacena un tipo, más específicamente una U.
‫tipo de clase.
‫Y como dije, su clase tiene una funcionalidad integrada que permite que la reflexión funcione entre C++ y
‫blueprints.
‫La información puede fluir entre C++ y blueprints.
‫Así que ahora tenemos una clase de proyectil, una subclase de PT establecida en el tipo de plano de proyectil BP.
‫Entonces, ¿por qué tomarse la molestia de crear una subclase de variable?
‫Bueno, tenemos que discutir cómo funciona la función de actor de generación.
‫Spawn actor es una función que pertenece a la nueva clase mundial.
‫Entonces, si conseguimos un asimiento del mundo, podemos llamar al actor de Spawn.
‫Y el actor Spawn es otra función de plantilla y está diseñado para crear nuevos objetos similares a
‫los subobjetos predeterminados.
‫Pero crear un subobjeto predeterminado está diseñado para crear componentes y solo podemos usarlo en el constructor para un actor de
‫generación de clase en particular que se puede llamar en tiempo de ejecución mientras el juego se está ejecutando y puede
‫crear actores.
‫Ahora es una plantilla, por lo que requiere un tipo.
‫Si queremos generar un proyectil, entonces pasaríamos el tipo de clase C++ aquí un proyectil.
‫Esta es la clase de C++ que devuelve la función de actor de generación en C++.
‫Ahora los paréntesis toman una serie de parámetros, incluida una clase U.
‫Ahora hay múltiples sobrecargas de esta función que toman diferentes parámetros de entrada.
‫La más simple quizás sea la versión que toma una clase U, una ubicación y una rotación.
‫la u
‫La clase es lo que representa el tipo para generar.
‫Este es el tipo real del objeto que se genera.
‫Esto podría ser una clase modelo.
‫La ubicación es un vector F que especifica dónde generar el objeto y la rotación especificará su rotación.
‫Entonces, un ejemplo de la sintaxis se ve así.
‫Llamaríamos al actor de generación especificando el tipo de clase y luego pasando esa información de clase junto con el
‫vector de ubicación y el rotador de rotación.
‫Así que hablemos de tu clase por un segundo.
‫Ahora, como hemos estado diciendo, tu clase representa un tipo de clase.
‫Cuando llamamos al actor de generación, pasamos una clase U para proporcionar a la función de actor de generación información
‫sobre el objeto que se generará.
‫Sí, pasamos un tipo entre paréntesis angulares, pero eso simplemente le dice al actor de Spawn el tipo de C++ que debe
‫crear.
‫Mientras que su clase contiene más información.
‫Digamos que creamos un plano basado en un proyectil y en el plano configuramos algunas propiedades, como elegir
‫la malla estática para el componente de malla estática.
‫Ahora, si tuviéramos que generar una clase de C++ sin procesar, entonces esa malla estática no se establecerá en el objeto
‫de proyectil recién generado.
‫Esencialmente, solo estaríamos generando un nuevo actor invisible.
‫Sin embargo, una nueva variable de clase puede representar una clase de modelo.
‫Su clase nos da la posibilidad de tener una variable en el lado de C++, que representa un modelo, tipo
‫de clase y generación.
‫El actor puede tomar esa clase como argumento de entrada para que pueda generar un nuevo objeto basado en el
‫modelo representado por esa nueva clase.
‫Entonces, un nuevo proyectil tendrá su propiedad de malla estática establecida porque estamos generando un nuevo objeto basado en
‫el modelo y no en la clase C++ sin formato.
‫Esta es la razón por la que creamos nuestra subclase porque puede almacenar una nueva clase y
‫pudimos establecerla igual al proyectil BP de nuestro modelo de tanque BP.
‫Entonces ahora sabes cómo engendrar actores.
‫El actor de Spawn pertenece a la nueva clase mundial.
‫Entonces, si llama a get world y simplemente llama al actor Spawn, entonces conoce los requisitos de
‫entrada para esta función que pasa en el tipo C ++ entre corchetes angulares y clasifica una ubicación y una
‫rotación entre paréntesis.
‫Entonces, para su desafío, va a generar el proyectil, haga esto en la función de disparo.
‫Así que llame al actor de generación mundial y pase un proyectil en los paréntesis angulares.
‫Esto significa que necesitará incluir el archivo de encabezado para el proyectil.
‫Así que no olvide eso y use nuestra nueva clase de proyectil variable como el parámetro de entrada de la clase U
‫entre paréntesis.
‫Ahora necesitamos una ubicación y una rotación.
‫Vas a usar el punto de generación del proyectil tanto para la ubicación como para la rotación.
‫Desde el componente del punto de generación del proyectil.
‫Puede llamar a obtener la ubicación del componente y obtener la rotación del componente para acceder a estos valores.
‫Así que pausa el video y llama al actor de generación en la función de fuego ahora.
‫Bueno.
‫Así que vayamos a Base Pond CP donde tenemos definida la función de fuego.
‫Ahora tenemos una esfera de depuración dibujada aquí.
‫Realmente ya no vamos a necesitar eso.
‫Así que voy a eliminar esta llamada de función y en su lugar voy a llamar al actor de Spawn aquí.
‫Ahora ya tenemos la ubicación del punto de generación del proyectil.
‫Voy a cambiar el nombre de esta variable local a simplemente ubicación y voy a crear un nuevo rotador F.
‫llamada rotación.
‫Y esto también lo obtendré del punto de generación del proyectil.
‫Así que va a ser el punto de generación del proyectil obtener la rotación del componente.
‫Así que ahora tengo la ubicación y la rotación en la que generar el proyectil.
‫Entonces, a continuación, necesito llamar al actor de generación para poder llamar a get world.
‫Y del mundo que obtengo de esta función, puedo llamar a spawn actor.
‫Ahora bien, esto tiene corchetes angulares y paréntesis, ¿verdad?
‫Entonces, en los paréntesis angulares, necesito usar un proyectil.
‫Y como estamos usando un proyectil, necesitamos incluir el encabezado para eso.
‫Así que aquí arriba, voy a eliminar, dibujar ayudantes de depuración y reemplazarlo con un proyectil.
‫Así que ahora tenemos ese tipo incluido.
‫Ahora necesitamos la clase U y, en base a que H tiene una clase de proyectil, podemos usarla como clase U.
‫Así que vamos a pasar en clase de proyectiles.
‫Ahora, finalmente, podemos pasar la ubicación y la rotación y esto satisfará la función del actor de generación.
‫Así que sigamos adelante y compilemos esto y estamos de vuelta aquí en el editor y podemos probar el juego.
‫Así que voy a seguir adelante y hacer clic y comprobarlo.
‫Hemos generado un nuevo proyectil.
‫Estamos generando el proyectil en la punta de nuestro barril y simplemente flotan en el aire, lo que
‫realmente no se ve bien.
‫Pero eso está bien.
‫Este es el primer paso.
‫Primero tenemos que generar el proyectil, haciendo que actúe como un proyectil como el siguiente paso.
‫Entonces, en resumen, ahora estamos generando proyectiles.
‫Este es un gran hito.
‫Sin embargo, todavía no son proyectiles.
‫Simplemente flotan allí y se supone que los proyectiles vuelan por el aire.
‫Entonces, en el siguiente video, vamos a hablar sobre cómo hacer que nuestros proyectiles vuelen por
‫el aire para que actúen como proyectiles.
‫Te veré pronto.