A pesar de que preocupado por hacer las balas no duran para siempre, por lo que no vamos a utilizar un espacio muy importante en la memoria, hay algo más que tenemos que preocuparnos. Cada vez que añadimos una bala a este juego, cada vez que hacemos este proceso de creación de instancias, se necesita algún tiempo para la Unidad de conseguir ese elemento, a lo puso dentro del juego, y hacer que funcione, está bien.

Así que en realidad la creación y eliminación de elementos, que son operaciones costosas. Así que hay que evitar que tanto como sea posible. Y en ese momento, es posible que preguntarse, ¿de acuerdo Estoy un poco confundido ahora, la bala es algo que tiene que ser instanciado, pero tengo que evitar crear instancias de las cosas. Y suena divertido si usted lo dice, pero lo que tiene que preocuparse es de puesta en común de los objetos. Y que el agrupamiento de los objetos es la siguiente.

Usted va a tener un gestor de poco, algo que se va a sostener un determinado objeto, una bala, por ejemplo, entonces se va a cargar previamente una cierta cantidad de objetos. Así que tal vez desea precargar 20 balas, por ejemplo. Y vas a hacer que estos objetos inactivos. Ellos van a ser una especie de estado latente. Ellos van a estar disponibles para su uso. Básicamente están durmiendo, y que están ocultos en el juego.

Y cada vez que desee generar una bala, en lugar de instanciar, vas a conseguir una bala de la piscina de los objetos, porque ya tenemos uno disponible. De manera que la bala va a ser activado, y que puede hacer lo que quiera con él. Por lo tanto, podría parecer un poco confuso, un poco complejo para que entiendan que, tal vez, si ese es su primer juego, o uno de sus primeros cursos que está tomando en el desarrollo del juego, pero este es uno de los más importantes temas en juego desarrollo, que es la agrupación de objetos. Se va a ahorrar una gran cantidad de potencia de procesamiento. Y la memoria, así, está bien.

Por lo tanto, queremos que sea un gerente de la agrupación. Así que voy a entrar aquí en la Jerarquía. Necesitamos botón derecho del ratón, y necesita elegir crear el objeto vacío. Vamos a tomar este juego de objetos de, fuera del dispositivo de juego, que va a estar aquí, y voy a cambiar el nombre de eso, vamos a ver, PoolingManager o ObjectPoolingManager o ObjectPooler, el nombre que creo que va a trabajar bien. Voy a llamarlo ObjectPoolingManager, está bien. Llegamos a entrar, que se encuentra en la posición 0,0,0. No va a hacer alguna diferencia más tarde, pero aún así, dejémoslo así.

Y ahora tenemos que hacer un script para ello. Así que voy a la carpeta scripts, voy a botón derecho del ratón, seleccione Crear, C # Script, y luego ObjectPoolingManager y luego pulsa enter. Y antes de que avanzamos, vamos a hacer una carpeta. Vamos a organizar estos scripts. Así que voy a botón derecho del ratón, seleccione crear, carpeta. Voy a nombrar esto como juego. Y voy a seleccionar tanto la bala y el jugador y soltar aquí. Y voy a hacer otra carpeta, y voy a nombrar que las Utilidades.

Está bien, voy a poner el interior hay ObjectPoolingManager. Me preocupa mucho acerca de las carpetas porque es importante mantener las cosas organizadas. Y ahora que lo hicimos, nos vamos a poner una referencia a esa ObjectPoolingManager. Tenemos que arrastrar y soltar el guión aquí. Por lo tanto, lo que voy a hacer es. Al jugador, por lo que si bien se abre el guión jugador. Que es éste.

En lugar de crear instancias de la bala como este, llamando instantiate, vamos a tratar de conseguir una bala de la ObjectPoolingManager. Por lo que queremos acceder al ObjectPoolingManager, pero ¿qué hacemos esto? Hay dos maneras. Una forma es hacer que el jugador haga referencia a la ObjectPoolingManager y así, hacer una llamada directa para ello. Pero que podría ser un poco feo, y eso no va a ser fácil volver a utilizar más adelante, porque si haces otros elementos, si se quiere poner en común un efecto de partículas, por ejemplo, u otras balas y varias cosas diferentes.

Si desea acceder al administrador de la puesta en común de otros lugares, desde el jugador, del enemigo, desde la torreta, desde la puerta, cualquier elemento que tenga, es necesario pensar en una mejor manera de hacer esto. Así que tenemos que hacer un poco de mezcla del patrón de retorno simple.

Por lo tanto, la ObjectPoolingManager va a tener una referencia a la única instancia de ese gestor de puesta en común que va a estar disponible en la escena. Que es este pequeño individuo aquí. Entonces, ¿qué voy a hacer aquí, es un tipo de instancia estática ObjectPoolingManager privado, por lo que va a ser una referencia a la instancia de la ObjectPoolingManager.

Y ahora, voy a escribir pública, ObjectPoolingManager Instancia estática, con una mayúscula I. voy a abrir y cerrar las llaves, y el tipo de conseguir, y, una vez más, entre llaves, ejemplo de retorno , bueno. Así que es un modelo muy simple que estamos haciendo para la definición de una propiedad. Si nos vamos al jugador y que tipo de reproductor. Si escribimos ObjectPoolingManager.instance, debemos acceder a la instancia que tenemos aquí. Sin embargo, ahora que va a return null.

Entonces, ¿qué podemos hacer aquí es, en lugar de utilizar inicio, podemos utilizar despierto. Y podemos escribir iguales instancia a esto. Por lo tanto, el método Awake ocurre antes de que el método Start. Así que vamos a asegurar esa instancia que se va a establecer una vez que se va a llamar, está bien este método despierto. Y todos los demás elementos puede acceder a él en su método de inicio, de lo contrario tiene que preocuparse de la orden de ejecución del script, pero vamos a preocuparse por eso más adelante.

Está bien, así que esto va a ser, para hacernos capaces de acceder al ObjectPoolingManager, así como una prueba simple, que voy a hacer aquí otro método, vamos a deshacernos de la actualización. Y va a ser público y luego GameObject, y vamos a nombrar esto como GetBullet, por ejemplo. Vamos a llamarlo así. Y voy a imprimir sólo un mensaje aquí. Voy a escribir debug.log y saludar. Y voy a nula tipo de retorno. De acuerdo, no vamos a volver balas en este momento. Así que vamos a guardar esto.

En el reproductor, sólo para probarlo, voy a escribir ObjectPoolingManager aquí donde desovan una bala de puntos Instance.GetBullet, que es este de aquí, está bien. Así que vamos a ver lo que pasa si hacemos esto. Voy a guardar, vamos a ir a la Unidad. Vamos a seleccionar la consola por la manera de ver los mensajes. Y ahora, si se presiona el juego, aquí estamos. Si hago clic, estoy imprimir el mensaje de saludo. Lo que significa que el jugador está accediendo a la ObjectPoolingManager sin tener una referencia directa a la misma. Lo cual es perfecto, exactamente lo que queremos.

Ahora, queremos que el ObjectPoolingManager para poder acceder al prefabricada bala, a saber lo que la bala es prefabricada. Por lo tanto, voy a escribir aquí, vamos a tipo debajo de estos par de líneas, pública GameObject bulletPrefab. Está bien, así que vamos a este ahorro, por cierto, y vaya a la unidad, esperar un poco, y en el ObjectPoolingManager vamos a arrastrar y soltar la bala, al igual que hicimos con el jugador. Por lo tanto, las casas prefabricadas, bala, arrastrar, soltar. Perfecto, hay que ir.

Y ahora, lo que queremos hacer aquí, es que queremos para precargar una cierta cantidad de balas. Así que voy a escribir bulletAmount int pública, y que vamos a utilizar 20 como predeterminado. Y aquí, en el método de Awake, vamos a crear una instancia de 20 balas, pero vamos a dejarlos discapacitados. Entonces, ¿cómo se supone que vamos a hacer esto? Vamos a escribir así: para int i es igual a cero, mientras que I es menor que 20, y luego hacer algo, y finalmente i ++. Por lo tanto, se trata de un bucle básico que va a ejecutar 20 veces. Pero en lugar de utilizar 20 aquí, utilizamos bulletAmount.

Bueno, por lo que se puede escalar a que lo que quiera. Y cuando esto sucede, vamos a escribir GameObject bulletObject, o simplemente podemos escribir aquí prefabInstance, porque queremos hacer que facilita la reutilización posterior, es igual para crear una instancia y luego bulletPrefab. De acuerdo, una vez que hacer esto. Permítanme, instantiate, hay que ir bulletPrefab. Una vez que hagamos esto, también queremos que esta bala a estar bajo la ObjectPoolingManager para mantener las cosas organizadas, de lo contrario las balas van a aparecer en la raíz de la jerarquía.

Así, prefabInstance. transform.SetParent y pasamos transforman como parámetro, porque va a hacer referencia a la ObjectPoolingManager. Y después de hacer esto, voy a escribir prefabInstance.SetActive y voy a pasar falsa como un parámetro, está bien. Así que vamos a crear una instancia de 20 balas, y todos ellos van a ser las personas con discapacidad. Así que esta vez, si salvo esto. Voy a la Unidad, y espero el procesamiento para ser terminado.

Si presiona el juego, y nos fijamos en la Jerarquía, se ve que la ObjectPoolingManager tiene una flecha, ya que contiene varios objetos en su interior. Si abre, vas a ver las 20 balas allí para dormir, en su estado latente. Está bien, lo cual es bueno, ya que los tenemos. Ahora, por el método getBullet. Lo que tenemos que hacer, es que tenemos que almacenar todas las referencias para las balas que tenemos aquí en alguna parte. Así que vamos a necesitar una lista de balas. Así que aquí, voy a escribir privada Lista de tipo GameObject y que va a ser nombrados balas, así de simple.

En el método despierto, antes de que una instancia de la balas. me deja, vamos a añadir un comentario aquí, así balas de precarga. Tenemos que escribir balas iguales a una nueva lista de GameObject. Está bien, es una lista genérica de GameObject. Y también se puede iniciar mediante la inclusión de su capacidad. Así que ya pre-asignar una cierta cantidad de espacios en nuestra memoria a las balas de carga, y la capacidad es básicamente bulletAmount.

Está bien, así que vamos a hacer una nueva lista que puede almacenar hasta 20 balas, lo cual es bueno, está bien. Y para el getBullet, tenemos que preocuparnos por algo, tenemos que almacenar las referencias de las balas, antes de tratar de usar la getBullet. Así que aquí, cuando una instancia de la prefabricadas, voy a escribir bullets.Add, entre paréntesis, que voy a pasar prefabInstance, al igual que, de acuerdo. Y si vas a la unidad, así que no vas a ver los cambios, sin embargo, estamos simplemente va a cargar previamente las balas, que van a ser almacenados internamente en la lista, en una lista genérica. Pero ahora tenemos que aprender cómo usarlos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *