Ahora vamos a abrir el script de PlayerSpawner.
Esta parte del codigo se verá en nuestro inspector, son las llamadas Dependencias.
Son variables públicas que definen los objetos PlayerPathSO, GameObject, Cinemachi- neVirtual Camera y un GameObject
El primer objeto tiene que ver con el playerPath o camino de acción de nuestro personaje, el segundo es un objeto creado en la escena que es el Prefab del player, el tercero tiene que ver con la camara virtual que hemos creado y en último lugar otro objeto que está en nuestra escena que hemos llamado playerParent
Ahora nos venimos a nuestro proyecto y en la escena de Town creamos un objeto llamado LevelInitializer, este contendrá un objeto script en su raíz. Por lo que para ello arrastraremos el script del PlayerSpawner dentro del inspector.
Ahora completaremos sus dependencias. Solo tendremos que dar en los botones que están a la derecha de los cuadros de texto de nuestra Dependencia. Desde las opciones escogemos cada uno de los contenidos que necesita cada entrada
Nos colocamos encima del cuadro de texto de Player Path y pulsamos en el botón de la derecha. Elegimos la primera opción llamada Player Path este será nuestro camino de entrada por el cual le diremos a nuestro player que reaccione cuando pase a través de las entradas de nuestra pantalla.
Nos colocamos encima del cuadro de texto de Player Prefab y pulsaremos en el botón de la derecha. Nos aparecerá el buscador y desde él escribiremos Player para que busque dicho prefab y lo añada a esta opción
En el apartado que pone Follow Camera, arrastraremos desde la ventana de Jerarquía el elemento camara virtual hasta el cuadro de texto
Por último donde pone Player Parent, tendremos que colocar el siguiente objeto. Lo primero será crearlo así que botón derecho desde nuestra ventana de Jerarquía y seleccionamos Create>Empty Object
Y ahora arrastramos el objeto que hemos creado con el nombre de PlayerParent hacía el cuadro de texto con el mismo nombre.
Hecho esto ahora dentro del objeto LevelInitializer crearemos un objeto hijo. Lo seleccionamos y pulsamos botón derecho, Create>Empty Object, llamaremos a este objeto DefaultEntrance
Desde la ventana del Inspector, seleccionamos el cubo que se encuentra representado a la izquierda del nombre de nuestro objeto. Desde ahí se nos despliega una serie de colores que nos servirán para localizarlo en el mapa de nuestra pantalla. Elegimos el color morado.
Este objeto simboliza o es la escena donde nuestro player se pondrá si no encuentra ninguna entrada
Volvemos a seleccionar el objeto LevelInitializer y dentro del script Scene Initializer pulsamos en el + que se encuentra en la opción OnDependencies Loaded. Aquí le indicaremos que cuando el script de Player Spawner esté cargado aplique una función.
Arrastramos el script Player Spawner al botón que aparece debajo de la acción Runtime Only
Abrimos las opciones del marco de las Funciones y asignamos de No Function a Player spawner> InstantiatePlayerOnLevelJuego
Que es el único método publico que tenemos en el script tal como se ve en la imagen:
Lo que le estamos diciendo aquí es que cuando termine de ejecutar el script se cargue nuestro Player. Y si el Player no encuentra nada lo pondrá en el objeto hijo que hemos creado llamado DefaultEntrance
Los ScriptableObjects son una característica poderosa de Unity que te permite crear objetos personalizados que contienen datos y funcionalidades reutilizables sin la necesidad de crear instancias de clases MonoBehaviour:
1. Crear un ScriptableObject:
1.1. Crear ScriptableObject:
- Crea una nueva clase que herede de
ScriptableObject
.
using UnityEngine; [CreateAssetMenu(fileName = "NuevoObjetoScriptable", menuName = "Scriptables/ObjetoScriptable")] public class ObjetoScriptable : ScriptableObject {public string nombre; public int valor; public Sprite icono; }
1.2. Añadir Datos:
- Define las variables y datos que deseas incluir en tu ScriptableObject.
2. Crear Instancia del ScriptableObject:
2.1. Crear Instancia:
- Haz clic derecho en el Assets, selecciona «Create» -> «Scriptables» y elige tu ScriptableObject.
- Configura los datos en la nueva instancia.
3. Utilizar el ScriptableObject en un Script:
3.1. Referenciar el ScriptableObject:
- Puedes referenciar tu ScriptableObject en cualquier script MonoBehavoir, como en un GameManager.
public class GameManager : MonoBehaviour { public ObjetoScriptable objetoScriptable; voidStart() { Debug.Log("Nombre del Objeto: " + objetoScriptable.nombre); Debug.Log("Valor del Objeto: " + objetoScriptable.valor); } }
3.2. Asignar el ScriptableObject:
- Arrastra y suelta la instancia del ScriptableObject en el campo público del inspector del GameManager.
4. Uso Avanzado: Listas de ScriptableObjects:
4.1. Crear una Lista:
- Puedes crear listas de ScriptableObjects en otros ScriptableObjects o en scripts MonoBehavoir.
public class ContenedorDeObjetos : ScriptableObject { public List<ObjetoScriptable> objetos = new List<ObjetoScriptable>(); }
4.2. Configurar y Utilizar la Lista:
- Configura y utiliza la lista de ScriptableObjects en el inspector o en tiempo de ejecución.
5. Beneficios de los ScriptableObjects:
5.1. Reutilización:
- Puedes reutilizar ScriptableObjects en varios lugares sin duplicar código.
5.2. Configuración en el Inspector:
- Puedes ajustar los datos de los ScriptableObjects en el inspector de Unity.
5.3. Fácil de Versionar:
- Los ScriptableObjects son serializables, lo que facilita el versionamiento y la colaboración.
5.4. Centralización de Datos:
- Puedes centralizar datos compartidos entre diferentes objetos y sistemas en un solo ScriptableObject.
6. Ejemplo de Configuración en el Inspector:
6.1. Añadir en el Inspector:
- Configura variables y atributos visibles en el inspector.
[CreateAssetMenu(fileName = "NuevoObjetoScriptable", menuName = "Scriptables/ObjetoScriptable")] public class ObjetoScriptable : ScriptableObject { [Header("Configuración del Objeto")] public string nombre; public int valor; publicSprite icono; }