Puede acceder al curso completo aquí: Crear reutilizables Crafting Systems en la Unidad

Tabla de contenidos

Parte 1

En este curso usted aprenderá cómo crear un sistema de inventario y la fabricación artesanal. El inventario será su sistema típico basado en grid, ranura, la fricción y el inventario de estilo gota. El sistema de artesanía va a estar fuertemente influenciada por el sistema de elaboración de Minecraft, con las nueve ranuras en una cuadrícula, que puede arrastrar y soltar elementos en, y luego se va a hacer la receta de consulta para ver si tiene los elementos a elaborar un nuevo elemento.

Vamos a tomar dos enfoques para esto, vamos a tener un sistema en el lugar donde se tiene que tener los elementos de una ranura específica en la red de elaboración para que funcione. Similar a la forma de Minecraft funciona en la que tiene que tener elementos en un cierto orden a las embarcaciones de ciertos artículos. También tendremos él para que pueda realmente sólo tiene que colocar los elementos de la red y que va a utilizar los artículos apenas como un todo, y no se preocupan por la secuencia de los artículos.

Lo primero que tenemos que hacer es crear nuestras estructuras de datos de artículos y recetas. Estos van a ser las clases que nos permiten definir lo que un elemento y una receta es.

Así que, para empezar con todo esto seguir adelante y crear un nuevo proyecto Unidad. Puede asignar un nombre al proyecto lo que quieran, pero estaré nombrando mío “Zenva-Inventario y hacer a mano.”

La unidad 2017 pantalla de creación de 2D proyecto

se establece en un proyecto 2D y desactivar la Unidad Analítica.

Establecer el diseño predeterminado a , lo que coincide con el que estoy usando para este curso.

opción de diseño predeterminado Unidad

Vamos a empezar por la creación de la estructura de carpetas para el proyecto. Tendremos que crear una nueva carpeta en la carpeta de los Activos y el nombre de esta nueva carpeta a “Scripts” crear una segunda carpeta y el nombre de éste “Recursos.”

Ahora crear una nueva carpeta dentro de la carpeta Resources que acaba de crear y el nombre de esta carpeta “Elementos”.

Este todas las carpetas que vamos a necesitar por ahora.

Vamos a empezar a crear nuestro primer script que será la estructura de datos artículo. Así navegar a la carpeta scripts y crear un nuevo c # guión y el nombre de este script para “Punto”. Abra la secuencia de comandos de artículos en tu editor de código Ver el código abajo y seguir a lo largo:.
utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; clase de artículos pública {int id público; Título de la cadena pública; Descripción public string; icono de Sprite pública; Diccionario público Estadísticas = new Dictionary (); Artículo público (int id, title cadena, cadena de descripción, icono Sprite, Dictionary Estadísticas) {this.id = id; this.title = título; this.description = descripción; this.icon = icono; this.stats = estadísticas; } Artículo público (artículo) {this.id = item.id; this.title = item.title; this.description = item.description; this.icon = item.icon; this.stats = item.stats; }} 1234567891011121314151617181920212223242526272829using System.Collections; usando System.Collections.Generic; usando UnityEngine; publicclassItem {publicintid; publicstringtitle; publicstringdescription; publicSprite icono; publicDictionary estadísticas = newDictionary (); publicItem (IntID, stringtitle , stringdescription, Sprite icono, Dictionary estadísticas) {this.id = id; this.title = título; this.description = descripción; this.icon = icono; this.stats = estadísticas;} publicItem (artículo ) {this.id = item.id; this.title = item.title; this.description = item.description; this.icon = item.icon; this.stats = item.stats;}}

Guardar esta secuencia de comandos.

Parte 2

En esta lección vamos a crear la clase de recetas a mano, esta clase definirá el modelo para todas las recetas de nuestro sistema de inventario. La forma en que esto se va a trabajar es nuestras recetas van a ser sobre la base de los ID de elemento, y luego van a tener una gran variedad de estos identificadores que define lo que es la receta. Así que si se requiere dos piezas de madera y una piedra, y esos son los ID de uno y dos, respectivamente, entonces usted tendría una matriz que tendría por ejemplo, ranuras vacías en el mismo, pero serán Identificación de cero. Vas a tener dos que son uno, y luego uno que es el ID de dos. Eso hace que la receta que las embarcaciones de cualquier elemento que haría para usted. Entonces cada vez que ponemos los elementos en la tabla de elaboración que va a buscar la receta y ver si uno coincide con lo que está en la tabla de elaboración.

Así que vamos a tener nueve ranuras en la tabla de elaboración, así que va a ser una serie de nueve artículos en la tabla de elaboración, cada uno de los que tienen un ID de número entero por lo que podemos comparar esos identificadores en la tabla de la elaboración de las recetas en nuestra base de datos de recetas para ver si tenemos alguna que los partidos de lo que hay en la mesa de elaboración.

Por lo tanto, la elaboración de una receta es una matriz de nueve enteros, y esos números enteros representan los ID de elemento.

Crear un nuevo C # script en la carpeta scripts y el nombre de “CraftRecipe” que esto va a ser una clase muy similar a nuestra clase de elemento. Abrir el guión CraftRecipe en el editor de código, ver el código de abajo y sigue a lo largo de:
utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; CraftRecipe public class {public int [] requiredItems; public int itemToCraft; público CraftRecipe (int itemToCraft, int [] requiredItems) {this.requiredItems = requiredItems; this.itemToCraft = itemToCraft; }} 1234567891011121314using System.Collections; usando System.Collections.Generic; usando UnityEngine; publicclassCraftRecipe {publicint [] requiredItems; publicintitemToCraft; publicCraftRecipe (intitemToCraft, int [] requiredItems) {this.requiredItems = requiredItems; this.itemToCraft = itemToCraft;}}

Guardar el guión.

Parte 3

El código en el video de esta sección en particular se ha actualizado. Por favor, vea la información a continuación para el código corregido.

En esta lección vamos a crear la base de datos punto a nuestro sistema de inventario. Vamos a definir todos los elementos de nuestro sistema.

En la carpeta scripts crean una nueva secuencia de comandos de C # y el nombre “ItemDatabase” y abra la secuencia de comandos en el editor de código.

Vea el código abajo y seguir a lo largo, el código siguiente se ha actualizado, y se diferencia de la de vídeo:
utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; public class ItemDatabase: MonoBehaviour {public List artículos = new List (); vacío Awake () {BuildItemDatabase (); } Elemento pública GetItem (int id) {return items.Find (item => item.id == id); } Elemento pública GetItem (título cadena) {return items.Find (item => item.title == título); } Void BuildItemDatabase () {artículos = new List () {new Artículo (1, «Diamond Axe», «Un hacha hecha de diamante.», Nuevo Dictionary {{ «Power», 15} , { «Defensa», 7}}), nuevo artículo (2, «Diamond Ore», «Un diamante brillante.», nuevo Dictionary {{ «Valor», 2500}}), nuevo artículo (3 , «Iron Axe», «Un hacha de hierro.», nuevo Dictionary {{ «Power», 8}, { «Defensa», 10}})}; }} 12345678910111213141516171819202122232425262728293031323334353637383940414243using System.Collections; usando System.Collections.Generic; usando UnityEngine; publicclassItemDatabase: MonoBehaviour {publicList artículos = newList (); voidAwake () {BuildItemDatabase ();} publicItem GetItem (IntID) {returnitems .find (item => item.id == id);} publicItem GetItem (stringtitle) {returnitems.Find (item => item.title == título);} voidBuildItemDatabase () {items = newList () { newItem (1, «Diamond Axe», «Un hacha hecha de diamante.», newDictionary {{ «Power», 15}, { «Defensa», 7}}), newItem (2, «Diamond mineral «, «Un diamante brillante.», newDictionary {{ «Valor», 2500}}), newItem (3, «Iron Axe», «Un hacha de hierro.», newDictionary {{ «Power», 8}, { «Defensa», 10}})};.}}

Guardar el guión

Transcripción Parte 1

Hola, chicos. Mi nombre es Austin Gregory. Y en este supuesto que voy a enseñar cómo crear un inventario y un sistema de artesanía.

El inventario va a ser el típico sistema basado en grid, ranura, la fricción y el inventario de estilo gota. Y el sistema de artesanía va a estar fuertemente influenciada por el sistema de elaboración de Minecraft. Con los nueve ranuras en una rejilla, que puede arrastrar y soltar elementos en. Y entonces se va a hacer la receta de consulta para ver si tiene los elementos tracen un nuevo elemento. Y vamos a tomar dos enfoques para esto. Vamos a tener un sistema en el lugar en el que usted tiene que tener los elementos de una ranura específica en la red de elaboración para que funcione. De manera similar a la forma en que funciona Minecraft, donde usted tiene que tener elementos en un cierto orden a las embarcaciones de ciertos artículos. Y estamos también a tener un lugar donde en realidad se puede simplemente colocar los elementos en la red y que va a utilizar los artículos apenas como un todo. No se preocupan por la secuencia de los artículos.

Lo que tengo frente a mí es sólo una lista de tareas que tenemos que marcar como vamos. Y por el tiempo que marque el último artículo, vamos a tener un inventario muy dulce y el sistema de elaboración de trabajar. Así que lo primero que tenemos que hacer es crear nuestras estructuras de datos de artículos y recetas. Y éstos van a ser las clases que nos permiten definir lo que un elemento y una receta es. Y vamos a hablar de eso aquí en un segundo.

Por lo tanto, tengo la ventana abierta por la Unidad para crear un nuevo proyecto. Voy a ir a Nueva. Y voy a crear un proyecto Unity. Va a ser Zenva – Inventario y hacer a mano. Voy a seleccionar 2D. Y no necesito análisis habilitadas para ello. No importa cómo se hace esto por la tuya. Y ahora tengo a mi disposición. Que tiene este aspecto. Esta es la forma en que trabajo.

Pero voy a ir a la presentación. Y voy a ir al diseño predeterminado, por lo que todos podemos estar trabajando en el mismo diseño. Y vamos a ir a por defecto y esto es lo que debería ver si tiene el diseño predeterminado. Ahora queremos crear un poco de una estructura de carpetas aquí. Voy a ir, voy a botón derecho del ratón sobre activos. Va a ir a Crear. Y voy a seleccionar la carpeta. Y yo quiero tener un par de carpetas para mantener mi proyecto semi-organizada. No soy tan grande en eso mismo. Pero podemos hacerlo un poco mejor para este video, sin duda. Así que voy a tener una carpeta para los scripts. A continuación, voy a derecha clic aquí y vaya a crear de nuevo. Y voy a tener una carpeta de recursos.

Ahora bien, esto va a ser el que nuestros iconos de artículos son. Y nuestras cosas que tenemos a la carga en forma dinámica van a ser almacenados aquí. Esta es una carpeta especial en la unidad que nos permite acceder a los datos dentro de ella directamente a través de una clase llamada Recursos. Y vamos a entrar en eso un poco más adelante. Y también, al hablar de los iconos de artículos, los que van a estar disponibles para usted en la descarga del proyecto que se obtiene. Así en Recursos Voy a crear una carpeta que va a ser llamados artículos. Y eso es todo lo que necesitamos por ahora.

Así que dijimos que quiero crear la estructura de datos de artículos. Así que voy a hacer eso en Scripts. Va a ser un C # Script. Así que quiero ir a la Creación, C # Script. Y yo quiero llamarlo artículo. Y voy a abrir esto en Visual Studio haciendo doble clic sobre eso. Y cuando se abre hacia arriba, esto es lo que debería ver. Tenemos algunas declaraciones utilizando hasta la parte superior aquí. clase de artículos pública que hereda de MonoBehavior. Excelente. Y tenemos algunos métodos por defecto.

Así que lo que quiero hacer es que voy a instalar esto y luego vamos a hablar. Quiero deshacerse de la herencia de MonoBehavior. Debido a que este no necesita heredar de eso. Voy a deshacerse de eso. Y hablaremos de lo que una clase es, aquí, en sólo un segundo para aquellos de ustedes que le gustaría un repaso. Y voy a seguir adelante y deshacerse de estos métodos. No vamos a utilizar los de este.

Vamos a crear todas nuestras cosas a nosotros mismos aquí. Y esto es lo que tenemos. Una clase pública denominada artículo, con dos llaves.

Cool. Tan rápidamente, lo que es una clase? Si usted no está familiarizado, una clase es algo que podemos diseñar que actuará como un plano cada vez que construimos objetos en el futuro. Así que pensar en un plan para la construcción de un edificio. Vas a elaborar todas las especificaciones de esta. Y entonces vas a entregar apagado a alguien que va a seguir las especificaciones de esa hoja. Y construir el edificio de acuerdo con sus especificaciones. Y va a ser el mismo que para esta clase de artículo. Lo que vamos a hacer es que vamos a escribir las especificaciones para el artículo. Y no va a ser en realidad un elemento. Es sólo va a ser el modelo para un elemento. Y más tarde, podemos construir nuestros artículos basados ​​en este modelo. Y que estarán todos tienen sentido a medida que avanzamos.

Así que dicho esto, ¿qué artículo tiene que ser? ¿Qué es un artículo? ¿Cómo podemos definir un artículo? Lo que un artículo tiene que estar en este sistema, al menos, es que tiene que tener un título, un nombre. Tiene que tener una descripción. Algunos texto de ambientación al respecto. Tiene que tener un icono, lo sabemos. Necesitará un icono para este artículo. Tiene que tener una lista de estadísticas, tal vez. Así podemos tener algunas estadísticas en nuestros artículos. Sólo un diccionario. diccionario sencilla que cubrirá. Así como un número entero que va a ser el identificador para ello.

Así que voy a seguir adelante y escribir a cabo. Quiero tener un identificador int pública, el identificador para él. Y estos van a ser accesibles al público. Identificación del int de manera pública. entonces voy a tener una cadena pública. Y esto va a ser el título. Ahora estoy llamándolo título en lugar del nombre, ya que por defecto los objetos que ya tiene un campo de nombre. Y no quiere tener ningún conflicto con los campos ya existentes, ¿verdad? Es muy fácil de simplemente llamarlo de otra manera. En este caso, el título. Si quieres llamarlo otra cosa aparte de eso, usted, más que bienvenidos a.

Entonces puede tener una cadena pública para la descripción. Ahora bien, estos son sólo cadenas de texto. Así que el título va a ser un nombre. Descripción va a ser un párrafo, o algo por el estilo. Y entonces, como he dicho, vamos a tener el icono. El icono va a ser, un Sprite. Así que voy a hacer un Sprite pública. Y voy a llamarlo icono. Excelente. Así que podemos asignar un objeto Sprite a este artículo. Y que represente el elemento de la interfaz de usuario. Muy genial. También quiero tener, como he dicho, la lista de estadísticas. Ahora vamos a utilizar un diccionario para esto. Porque lo que queremos hacer es lo que desea tener un nombre de la estadística, por ejemplo el poder, o la defensa. A continuación, queremos tener el número que la estadística es. El nivel de la estadística es, o el valor de la estadística es.

Así que el diccionario nos permite hacer muy fácilmente por tener una clave de cadena y luego tener un int para el valor. Así que puedo decir de potencia es de 10. Y la defensa es de siete. Y todo lo que está dentro de una sola colección. Muy genial. Así que para hacer eso, primero tenemos que asegurarnos de que tenemos System.Collections.Generic porque diccionario es un tipo genérico. luego voy a escribir de nuevo, público. Y quiero tipo de diccionario. Y me sale esto. Y lo que esto permite que haga con estos dos soportes de aquí, las dos escuadras. Me permite definir el tipo que este Diccionario va a ser.

Por lo tanto, genérico, que no sabe el tipo hasta que lo definen. Así que voy a tener cadena y luego int. Así cadena, va a ser la clave. Int va a ser el valor. Así potencia 10, 20 defensa, etcétera. Muy genial. Bastante simple. Y la manera en que vemos arriba es que sólo tiene que pasar que el valor del nombre, de modo de poder. Y devolverá el valor de la estadística, por lo 10. Muy fácil. Voy a llamar a este estadísticas. A continuación, voy a inicializarlo, con el nuevo diccionario.

Ahora, la razón por la que estoy haciendo esto y la forma en que esto funciona es porque esto, si tuviera que definirlo, no es en realidad inicializarlo como el objeto de diccionario. Es sólo que define el campo. Luego, más tarde me podría inicializar y luego agregar datos a la misma. Pero voy a seguir adelante e inicializar aquí. Y más tarde solo voy a enviar los datos al constructor para este artículo. Y luego se va a añadir que el Diccionario. Así que ahora estoy usando la nueva palabra clave aquí. Eso significa que voy a crear un nuevo objeto de diccionario, utilizando el constructor diccionario. Y eso significa que va a crear simplemente un nuevo diccionario. Y almacenarlo en el campo de las estadísticas. Muy genial. Así que ahora tengo un Estadísticas Diccionario.

Así que he mencionado al constructor. Necesitamos un constructor de elemento, así, porque quiero ser capaz de pasar los datos al artículo. Y luego asignar esos datos para la identificación, título, descripción, icono, y las estadísticas del diccionario. Y la forma en que funciona es que tengo un plan con esto, estos campos de aquí, ¿verdad? Id, título, descripción. Y puedo crear un constructor que me permite pasar parámetros a este objeto que estoy creando. Y va a inicializar el objeto con los valores por defecto.

Si tuviera que hacerlo sin un constructor, y yo sólo digo nuevo artículo, algo así como lo estoy haciendo nuevo Diccionario aquí. Lo hará el valor. Que va a hacer el tipo por defecto. Así que voy a tener, identificación sería cero. Cadena estaría vacía. Descripción estaría vacía. Y el icono sería nulo. Porque esos son los valores predeterminados para esos tipos. Pero en cambio, quiero inicializar mi artículo con algunos valores cuando creo, ¿verdad?

No hay razón para crear el artículo en este caso, a menos que sea un artículo real. Así que quiero tener de artículos pública. Así que estoy diciendo público y luego el nombre de la clase. Y eso crea un constructor. Y luego dentro del paréntesis que vamos a pasar los parámetros. Vamos a añadir los parámetros que podemos conseguir en este artículo. Por eso quiero ir a conseguir el ello, y nos vamos int id. Y voy a seguir aquí abajo en la lista con el tipo y el nombre del campo. Título de cadena, cadena de descripción, icono de Sprite. Y luego, diccionario. Vamos a hacer lo mismo aquí. Diccionario y luego que se llama las estadísticas.

Ahora, por supuesto, estos nombres no tienen que coincidir. Sólo hace que sea más fácil para mí si son lo mismo. Y entonces lo que quiero hacer es que quiero para asignar esos valores a los valores del artículo siempre que se construye el artículo. Así que si volviera a ir de otra clase y decir nuevo artículo, como este. Entonces podría pasar en los valores que quiero que este nuevo elemento a tener. Por lo tanto, la identificación de cero, nombre de la espada, y así sucesivamente. Y sólo tiene que pasar los valores. Y luego, cuando se creó este artículo, cuando se inicializa este objeto, tendrá que esos valores. Muy bien.

Así que tengo que inicializarlo con eso. Así que voy a decir this.id. Esta referencia al artículo que estoy creando. La instancia del punto I acaba de crear. Y que tendrá sentido cuando en realidad se construye el artículo aquí en un momento. This.id = id; Así que esto se refiere al campo de instancia. Y esto se refiere al parámetro que acaba de pasar. Así que ahora this.title = título. Y this.description = descripción, this.icon = icono. Así que, vamos a hacer esta cosa un poco diferente aquí con el icono. Pero no puedo hacerlo, sin embargo, hasta que llegue a ellos realmente cargados en el juego. Así que voy a simplemente tener así por ahora.

Pero más adelante, cuando voy a entrar y cargar el icono de la carpeta de Recursos, basado en el icono, o basado en el nombre del artículo. Así que, de hecho, no necesitaremos la Sprite.icon para ser aprobada en el Punto. Todo lo que tenemos que hacer es tener el nombre y luego cargar el icono basado en el nombre del elemento. Y vamos a llegar a eso aquí en un momento. Y luego this.stats = estadísticas. También quiero crear un constructor que va a actuar como un constructor de clonación. Y eso no sería algo que nosotros no, que va a ser algo que necesitamos un poco más adelante. Pero quiero seguir adelante y crear lo que estamos aquí.

Y lo que es un constructor de clonación va a hacer, va a tomar un elemento de sí mismo. Así que tenemos la clase llamada de artículos. Y yo quiero crear un constructor que toma un parámetro de punto y luego simplemente crea una copia de ese artículo. Y la razón por la que hacemos esto, y vas a entender esto, de nuevo, más adelante.

Pero, necesito para crear una copia de un artículo antes de borrar la referencia al artículo. Por lo tanto, a continuación, tengo una copia impresa de ese artículo. Es una copia profunda de ese artículo, a continuación, que tenía antes de hacer los cambios en él. Así que todo lo que tengo que hacer es que tengo que crear un elemento de público. Y se va a tomar un parámetro de sí mismo, del tipo de auto. Así que va a ser objeto llamado elemento. Y esto probablemente va a ser confuso por ahora. Pero vas a entender más tarde exactamente por qué necesitamos esto. Y puesto que ya estoy aquí, quiero seguir adelante y escribirlo. Y voy a tomar una y otra vez, hacer = this.id. Pero esta vez, voy a hacer item.id, artículo que es el parámetro que se ha pasado. El artículo tiene el campo de ID en él. Tiene el campo de título en él. Así que podemos tomar esos campos con ese elemento.

Así que cualquier artículo que me pase a este constructor de artículos, estoy a continuación, va a ser la clonación de la información para un nuevo artículo. Y esto vuelve a su valor frente al tipo de referencia. Lo cual no puedo entrar en este curso. Pero probablemente debería comprobar que fuera, si usted está confundido en cuanto a por qué esto funciona. This.title = item.title, this.description = item.description, this.icon = nuevo me voy a hacer item.icon por ahora. Sin embargo, es posible que tenga que cargar a través de los recursos. Bueno, no voy a causa de artículos que ya tienen. Por lo que estará bien. Y luego, this.stats = item.stats.

Así que estoy clonación de la información a través de la partida a un nuevo artículo que estoy creando. Y que va a ser para esta lección. En la siguiente lección, vamos a crear la estructura de datos de recetas. Te veré allí.

Transcripción Parte 2

Hola chicos, bienvenidos de nuevo. En esta lección vamos a crear la clase receta de elaboración que va a definir el modelo para todas las recetas de nuestro sistema de inventario.

Así que la forma en que esto se va a trabajar es nuestras recetas van a ser sobre la base de los ID de elemento. Y luego vamos a tener una gran variedad de estos identificadores que define lo que es la receta. Así que si se requiere dos piezas de madera y una piedra, y esos son los ID de uno y dos, respectivamente, entonces usted tendría una matriz que tendría por ejemplo, ranuras vacías en el mismo, pero serán Identificación de cero. Vas a tener dos que son uno, y luego uno que es el ID de dos. Y eso hace que la receta que las embarcaciones de cualquier elemento que haría para usted. Y entonces cada vez que ponemos los elementos en la tabla de elaboración que va a buscar la receta y ver si uno coincide con lo que está en la tabla de elaboración.

Así que vamos a tener nueve ranuras en la tabla de elaboración por lo que va a ser una serie de nueve artículos en la tabla de elaboración, cada uno de los que tienen un ID de número entero por lo que podemos comparar esos identificadores en la tabla de la elaboración de las recetas en nuestra base de datos de recetas para ver si tenemos alguna que coincida con lo está en la tabla de elaboración. Por lo tanto, la elaboración de una receta es una matriz de nueve enteros. Y esos números enteros representan los ID de elemento.

Así que para hacer eso voy a crear un script C #, quiero lo llaman “Recipe-” digamos, “Craft receta”. Y esto va a ser una clase muy similar a nuestra clase de elemento. Voy a deshacerse de la herencia monobehaviour vez más, no es necesario nada de eso. Y así como los métodos. Por lo tanto, lo que es una receta artesanal? Una vez más, va a tener una matriz de enteros de nueve ID de elemento, que tiene, tiene sentido. Pero también tengo que saber lo que va a crear esta receta cada vez que se satisface la receta. Así que cada vez que tengo todos los elementos que esta receta requiere lo que el tema es lo que se obtiene a cambio?

Y ya que estamos basando el sistema en los ID de elementos, todo lo que tengo que hacer es definir el ID de elemento del elemento que se obtiene a cambio. Y eso es todo lo que necesitamos para la receta de elaboración. Así que voy a añadir un número entero pública que es una matriz y la llamaré, “requiere Item- elementos necesarios” ahí vamos. Con una caja inferior r. Y un entero aquí, sólo rápidamente, es un identificador de número entero, que tiene los dos corchetes al lado del tipo que denota que se trata de una matriz. Y todo esto es, es una colección de este tipo. Por lo que podría tener un valor aquí que de cero o puedo tener valores diez aquí que de cero, siete, ocho, cuatro, veinte, y así sucesivamente. Es sólo una colección de esos valores. Y se puede acceder a esos valores mediante introducción de la llave o el índice que los valores en los que están buscando.

Así que si desea que el tercer elemento de esa matriz que se busca el bien se mira, en este caso, para la segunda clave, ya que comienza en cero y va de cero, uno, dos, tres, cuatro, todos el camino hasta nueve, si tiene diez elementos. Por lo que los artículos requeridos son va a ser una matriz de enteros que contiene sólo un grupo o sólo unas pocas ID de elemento. entonces yo quiero tener un público Int que va a ser el tema a las embarcaciones. Y esto es simplemente va a ser un identificador del elemento que debe obtener a cambio de pasar de los elementos necesarios. Y de nuevo, toda la receta artesanal está haciendo es definir qué es una receta artesanal es. No maneja cualquiera de la lógica para determinar si tiene los elementos necesarios en la tabla, no se preocupan por nada de eso. Que sólo se preocupa por definir qué es una receta artesanal es.

Ahora, de nuevo, yo quiero tener un constructor para esto. Así que una receta artesanal pública, al igual que el artículo. Y el parámetro vamos a estar pasando en es un artículo entero a las embarcaciones. Y luego un número entero que es una matriz. Es decir, los elementos necesarios. Y luego voy a establecer los elementos necesarios para ser- this.requireditems Siento ser igual a requiredItems, y luego this.ItemToCraft a ser igual a itemToCraft.

Muy simple, ahora tenemos una manera de crear una receta de elaboración de lo que cada vez que creamos nuestra base de datos de recetas de artesanía, todo lo que tenemos que hacer es crear nuevas instancias de la clase que acabamos de crear y luego definir los valores. Así que vamos a utilizar el modelo para definir la receta de elaboración y vamos a seguir la estructura que tenemos aquí. Vamos a pasar en un arsenal de los ID de elementos requeridos. A continuación, vamos a pasar en el valor del entero, lo siento de la ID del elemento que volver a pasar en ellos.

Y a continuación, algunos de que el sistema se va a manejar realmente hacer eso ocurra. Esto sólo define el modelo para la receta de artesanía. Y rápidamente para un ejemplo de la matriz, si usted no está familiarizado con la forma en que funcionan exactamente, tengo la matriz elementos necesarios aquí que acaba de pasar en, o lo real, lo que puedo hacer referencia a los elementos de instancia requerida. Y tengo valores de esta dirían si se inicializa con valores, no es en la actualidad, pero si se pasa de los valores será. Y puedo acceder a ellos con una llave para dos es cero, uno, dos, por lo que es el tercer valores de la matriz que me daría el tercer ID de elemento que esta receta requiere, u ocho me daría el noveno ID que requiere.

Así que para comprobar si tenemos los elementos para la receta que tendríamos que comparar los ID de elementos que la tabla de elaboración tiene en ella a todos los ID de elementos de esta matriz. Así que tenemos las nueve de la mesa de elaboración, potencialmente, tenemos nueve de la receta artesanal, potencialmente. Pero más a menudo que no, las recetas son a tener un montón de cero identificaciones en ella, que son sólo hay elementos, y luego van a tener otras identificaciones, dicen que es posible que tenga que hacer una espada de diamantes. Por lo que tiene un palo de madera en la parte inferior, y luego dos diamantes en la parte superior. Y eso sería hacer una wooden- o una espada de diamantes.

O que tendría sólo dos diamantes en alguna parte con un palo de madera en algún lugar y que todavía podría hacerlo dependiendo del sistema que vas a estar usando porque vamos a estar haciendo ambas cosas como he explicado en el Introducción. Es decir que para la receta artesanal.

En la siguiente lección vamos a crear la base de datos elemento en el que se definen los elementos reales en nuestro juego, utilizando el modelo artículo que acabamos de crear. Nos vemos allí.

Transcripción Parte 3

En esta lección, que vamos a crear la base de datos punto a nuestro sistema de inventario. Vamos a definir todos los elementos de nuestro sistema. No voy a tener muchos, pero estoy seguro de que tendrá una tonelada por la tuya, porque tiene un juego real en ese momento. Sólo tengo una pequeña demostración en marcha.

Por lo tanto, quiero crear algunos artículos apenas ficticias para jugar con, y le mostrará cómo construir una base de datos sencilla de estos elementos, y luego la siguiente lección vamos a crear la base de datos de recetas de una manera muy similar . Así que quiero crear, una vez más, una secuencia de comandos de C #. Voy a llamarlo ‘base de datos de punto’. Voy a abrir esto en Visual Studio. Ah, y quiero comprobar fuera de la estructura de elemento y estructura de la receta. ¡Aquí vamos! Así que ahora aquí es donde empieza a ser divertido. Empezamos a tener un buen rato con los datos aquí, y sé que no suena demasiado emocionante, pero confía en mí, lo es.

Así que para hacer eso, vamos a crear otra colección genérica similar al diccionario, excepto que sólo tiene un valor, éste no tiene el par de valores clave, como el diccionario, donde tenemos el nombre y luego el stat stat valor, que sólo tiene un valor de un tipo determinado. Así que para hacer que estoy a decir ‘público’, y yo voy a crear una lista. Esta es una lista genérica de modo que tenemos que tener los paréntesis angulares, una vez más, y como hemos definido los dos tipos para el diccionario, tenemos que definir un solo tipo de la lista, y se llevará a cabo una lista de este tipo. Así que si tuviera entero, nos gustaría tener una lista de unidades y decenas y cientos o sea lo que sea, pero en este caso, vamos a tener una lista de un tipo que creó llamado ‘punto’. ¿Verdad?

Así que tiene el tipo de elemento aquí. Es una clase, y entonces tiene estas cosas aquí que podemos utilizar, ¿verdad? Muy bien, por lo que quieren tener una lista de las personas, y que va a representar a mi base de datos del artículo. Voy a llamarlo ‘artículos’, y de nuevo, voy a inicializarlo, como lo hice el diccionario. Nuevo elemento-lista bastante fresco. Así que ahora lo que quiero hacer, es que voy a deshacerse de estos métodos (campanadas de ordenador), una vez más, no sé lo que era todo esto, y voy a escribir un método que nos permite construir la elemento base de datos.

Es sólo va a estar donde definir los valores de nuestros artículos a. Entonces quiero llamarlo en el método ‘despierto’ o ‘inicio’, y que va a manejar el resto. Por lo tanto, quiero escribir un vacío, lo que significa que no devuelve ningún valor, por lo que si usted tiene un método int, devolverá un entero. Si usted tiene un método de punto, sería devolver un artículo. Pero en este caso, no devuelve nada. Que va a ser ‘base de datos de elemento de construcción’, es lo que vamos a llamar. Necesita ningún parámetro, que sólo va a hacer algo.

Ahora, voy a crear una nueva lista de elementos, y voy a rellenarlo con objetos, y vamos a hacer todo esto en un comunicado, que va a ser muy fresco, y yo en realidad tener una nueva lista creada aquí, pero voy a crear una nueva lista aquí abajo, así que no es necesario tenerlo aquí, pero voy a mantenerlo allí por ahora. Por lo tanto, voy a escribir artículos es igual, por lo que elementos de la lista, mantenga esto en mente, este es el campo que nos creada con el nombre de la lista pública item items, y quiero decir que es igual a, de nuevo, nuevo artículo, o lo siento, nueva lista, del tipo de elemento.

Pero esta vez vamos a inicializar con algunos valores, y los valores que vamos a inicializar con está a sólo unos pocos elementos, bien, así que vamos a crear algunos artículos. Para ello vamos a utilizar las llaves, y vamos a añadir un punto y coma al final. So your curly braces, everything inside of the curly braces whenever we define a new object like this, will define the values that it’s initialized with so we want to initialize the item database items list with some items in it, just makes sense. So to do that we’re gonna say ‘new item’. We’re going to use that item constructor by saying, ‘new’, which means it’s gonna create a new object, in this case a new item and then we can pass in to the constructor values to build that item using that blueprint. Watch how this comes together.

So new item, now if I go inside here and I want to do my parenthesis, I can see I can pass in an item type which is the clone constructor that we created or I can pass in an ID, title, description, icon and stats. Now, like I said before, we’re not gonna be passing in a sprite icon, we’re gonna be grabbing that from the Resources folder so I’ll have to change that for this to work.

I’m gonna pass in the ID of “1” for this, we’re gonna start at one instead of zero, because zero is going to represent an empty item, a null item, no item. So we can define our recipes using zero, meaning no item in that slot and one meaning that item or 20 being that item and so on, but zero means that slot is empty. Doesn’t require an item in that slot to craft, so we’re gonna start at one. Then also, the name of the item. We’ll make a diamond sword. Wants a description, well, a sword made of diamond. Very descriptive. Wants an icon, that is a sprite.

I’m gonna skip that for now even though I can’t do that legally, I’m gonna skip it for now and then remove it from the constructor here in a second. But it then wants a dictionary of stats. So in fact, what I’m then gonna do real quickly is I’m gonna go in here and I’m gonna remove this from the constructor. Because I’m not gonna be using in that way and then I am going to define my dictionary that is of stats.

So I’m gonna do this on a new line down here. It doesn’t matter what line we’re on as long as we are within the same statement and a statement is defined by the semicolon and the starting point. So semicolon here is where the statement ends, all this is within the same statement. So I’m gonna say ‘new dictionary’ because we’re passing in a parameter of a type dictionary, we have to create that dictionary first. And that’s gonna allow me to set it up here very easily by just saying, yeah, it’s a ‘string, int’ dictionary.

And then what I can do is I can define, much like I’m defining the ‘items new’ list item here with default values, with default initialized values. I can do that as well because I’m just creating it here and then I can pass in some values that the dictionary will hold when it’s initialized.

So to do that, again I’ll use the curly braces like we are for the items list constructor. And now within this it gets pretty cool here. What I can do is I can define a string value and then say the power being the string value and then 20 being the power level. So I’ll do that again in curly braces, and I’m going to have “quote” defining that this is a string, it’s gonna say, power and then comma, the value of power 15. So the diamond sword has a power stat of 15, very simple. And this is how we define the new item in our string and dictionary, the power is equal to 15. And I could define more, that’s the whole point of this, right, I can define as many as I want, so power is 15, we’ll say defense is seven, whatever it may be, up to you.

And you could do that for however many stats you have in your game and however you want to do that. And whenever you want to look up the value of the diamond sword, say the power stat, you would just go through, quickly I can show you here, say ‘items zero dot stats’, you could get the power level just like that and that will give you the power level in a string format, very simple. But I wanna have multiple items in my item database obviously so I’m gonna do that again kinda like I did with the power and defense here.

I have multiple items defined in the initializer for the dictionary. I could do the same thing for my items, so I wanna copy this and I’m gonna paste it. Notice the comma there, so I can add as many as I want now. And we’re gonna have this be ID “2”, you have to increment every time, and this is going to be a diamond ore. I’m just gonna say ‘a shiny diamond’. And maybe diamond ore doesn’t have a power or a defense stat, maybe it has a value stat. Maybe it’s worth a lot of money. Maybe it’s worth 2500 somethings, perhaps. And then again, I can add another item here that is of ID “3”, we’ll call it a steel sword. A sword made of steel.

Again, very descriptive descriptions and I can have again a power level of, this will be less than diamond sword ideally so it’ll be a power level of eight and it could have other stats as well. Again, however many you want, however you want to do this for your game, a defense stat. Maybe it has better defense than the diamond sword for some reason, I don’t know. Don’t know the lore behind diamond swords. And there you go, so now we have an item database at least with items defined. We don’t have anything that calls this method yet so it doesn’t actually happen but we have the meat of the database defined.

So now what I want to do is I want to make sure that whenever this object is initialized, whenever item database pops into the game, whenever the game starts, in my case because item database is always going to be there, I want to make sure ‘build item database’ gets called. The way I can do that is I can define a method, you notice when we started we had ‘start’ and ‘update’.

Well we could do start and that happens when the object is initialized but a bit before that happens the ‘awake’ method is called. And I want to make sure that this happens before anything tries to access it, this is data that needs to be initialized at the earliest possible state. So I want to say ‘awake’. So I want to create a method that is a void. It is private by default, I want to get rid of that anyway and it’s called ‘awake’ so now what I can do is say ‘build item database’ is called on ‘awake’.

So whenever this item first awakens, the first thing it’s gonna do is call it’s ‘awake’ method. The first thing it can do that we’re gonna be accessing is call it’s ‘awake method’ and then that’s gonna happen and it’s gonna call ‘build item database’ so now we have these items defined on our item database in our game.

Pretty cool– that’s no good on it’s own, we don’t have a way to go through and find a certain item that we’re looking for by the ID. Say we’re looking for ID of 15, well it would take us a bit of querying to get to that point to find that. So I want a simple method that I can call that I can pass it an ID and then it will return the item based on that ID. You can even do that by the item name or the item description, but I’m going to restrict it for now to the ID, to keep it simple. So, you know how I mentioned that ‘void’ means it returns nothing, then if you have a type there it returns that type of object, we’re gonna do that for this.

I’m gonna have a public method, we’re gonna be accessing it from elsewhere in our code. It’s gonna be a public method that returns a type of item and it’s gonna be called ‘get item’. Or ‘find item’ or ‘get item by this’ or whatever you want it to be. In my case, simply ‘get item’, it’s gonna take a parameter that is an integer ID so I can grab the ID of these items, find one that matches what I passed in here for the ID and then return that item. So how do we do that? There’s a ton of ways we can go about doing this. The best way for this course is to keep it very simple but also where we learn some.

So what I’m gonna do is I’m gonna loop through every item in the items database and in this case the items list and I’m gonna pass in a condition, if the item ID matches the ID I passed in, that’s the one I want, return that item. Luckily for us there is a built in way to do this on the items collection, so to do that I’m gonna say ‘items dot find’ and this is going to loop through, look at every single item in the items list and it’s going to compare it to a little query that we pass it. We’re gonna say, hey, I’m looking for this that equals this, if you find it, return that item to me and that I will pass it back to whatever called ‘get item’. So ‘items dot find’. This is where we have to define a predicate, which is why I just said we have to define a query.

So to do that I’m going to first use something that you have not have used up to this point, we’re going to use a lambda operator. So on the left side of the lambda operator you’re gonna have the input variable, which in our case is going to be a variable that will have the value of the item that we’re currently looped on top of. So if we’re looping over all the item in this and we get to the diamond sword here, whatever that we define on the left side of the lambda operator will be the member that contains that reference to that item.

So I’ll say, we can just say item, and then the lambda operator is on the left side, we have the input variable. Now on the right side we have the ‘expression’ and that’s gonna be what we are looking for, in a sense, the query that we are passing in. So I wanna check and see if the ‘item dot ID’ is equal to the ID that I just passed in. So item being the field, or sorry, the variable will be defined right here that will contain the item that we are looped on top of currently and once this happens it’s gonna then compare it to the ID we passed in for every single item but when it finds one it’s gonna be like, ‘okay, I found one’, then it’s going to give us that item back as a return value for ‘find’.

So then all I have to do is return that whole expression back out. And it’s gonna return the item, that define method found, to whatever called ‘get item’. — Very simple. Loop through every item, compare it’s ID to the ID we passed in, if it finds one, return that back to whatever happened, if it doesn’t find one, okay, no problem, so there we go. And you can see how easy this would be to actually do it for another value as well, so let’s say, ‘get item by string title’. Then we just do ‘item dot title’ and compare it to the title we just passed in. If it finds one, it will return it back just like this one does. And you can do it by any member on the item object. Member being a field on the item, in this case title, description, icon, ID and the stats list and that’s gonna be it for the item database.

In the next lesson, we’re going to create the recipe database, which is gonna be very similar to this except we have to write the ability to compare recipes to the items in our crafting table, we don’t have a crafting table panel yet, the window, the grid we don’t have that yet but we can easily work with just an empty array that will eventually be the items in the crafting table. And that’s going to be in the next lesson. I will see you there.

interesado en continuar? Check out the full Create Reusable Crafting Systems in Unity course, which is part of our Unity Game Development Mini-Degree.

Mensajes relacionados
The Ultimate Unity 5 Game Development Course

Deja una respuesta

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