En este tutorial, te mostraré cómo crear un menú sencillo de personalización de personajes y cómo guardar los datos necesarios para usarlos en un juego. Crearemos un avatar de jugador (un avión en este ejemplo), lo personalizaremos agregando adjuntos opcionales o cambiando de color, guardaremos los datos, cargaremos otro nivel y los recrearemos a partir de los datos guardados. Esto le permite efectivamente personalizarlo fuera del mundo del juego; en un sistema de menús, por lo que está disponible en cualquier lugar que desee, incluso después de abandonar y reiniciar el juego.
Artículos RelacionadosNecesitarás un entendimiento básico de Unity para esto. Si desea modelar sus propios objetos, puede hacerlo también, pero el modelo 3d utilizado en este tutorial también está disponible para que lo descargue aquí. El proyecto completo, en caso de que quiera buscar algo, también se puede descargar aquí..
Crea un nuevo proyecto de Unity. Necesitaremos 2 niveles allí para poder cambiar entre ellos. Guarda la escena actual y llámala "levelMenu". Luego abra la configuración de compilación (configuración de compilación de archivos) y presione "agregar escena actual". Esto es necesario para que luego podamos acceder a él y cargarlo directamente..
Luego crea una nueva escena y llámala "levelGame", y agrégala también a la configuración de compilación. Ahora las escenas básicas deberían estar presentes, permitiéndonos llenarlas con cosas..
Usaremos un avión como "personaje" por ahora (esto es mucho más fácil de manejar que un humano completo :). Obtenga los activos 3D (aquí están nuevamente) y cópielos en su carpeta de activos. Cree un cubo e intercambie la malla por la malla plana. Crea un nuevo material y agrégalo al avión. Finalmente, arrastre el plano a la carpeta del proyecto para hacer una prefabulación de ella.
Para personalizar el plano necesitaremos algún tipo de interfaz..
Crea un nuevo script y llámalo plane.js. Pon el siguiente código en él
función OnGUI () if (Application.loadedLevel == 0) if (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; if (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; if (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green;
Agregue el script al plano prefabricado y coloque un plano en la escena. Mueva la cámara para que mire el avión, para que podamos ver los cambios que le haremos. Cuando lo ejecutes, si debería verse así:
Si presionas un botón, el color del plano debería cambiar. Puede probarlo en esta compilación: DESCARGAR PROYECTO FUENTE 1.
El corchete if (Application.loadedLevel == 0) desactiva el botón si se carga otro nivel, excepto el menú (nivel 0). Esto es útil para gestionar gui-sistemas..
En tu "levelGame", coloca otro plano y haz que la cámara lo mire. Si lo prueba, no debería ocurrir nada aún, ya que aún no hemos agregado la adaptación a los datos guardados. Mientras estés allí, haz que la escena sea diferente de la escena "levelMenu", para que sea más fácil distinguir a los dos. Darle un color de fondo diferente en la cámara principal debería ser suficiente.
Ahora regresa al nivel "levelMenu", todo se hará desde allí. Abra el script de plano y agregue las siguientes líneas, justo debajo del código de los botones:
función OnGUI () si (GUI. Botón (Rect (120, 10, 100, 50), "Nivel de carga")) Application.LoadLevel (1);
¡Pruébalo! Debería aparecer un nuevo botón y, si lo presiona, cargará el nuevo nivel. Sin embargo, el plano en el otro nivel tendrá el aspecto "básico". El siguiente paso será adaptarlo una vez que se haya cargado el nivel..
Unity viene con funciones "PlayerPrefs". Estos permiten guardar y cargar datos en cualquier dispositivo que se utilice. Primero guardaremos el color del plano y luego veremos cómo recrearlo en el segundo nivel cargado..
Adapta el botón de nivel de carga para que se vea así:
if (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b); Application.LoadLevel (1);
Al hacer clic en el botón "nivel de carga", el juego ahora guardará los componentes rojo, verde y azul de los colores como tres valores separados. El rojo se guardará como "planeColorR", el verde se guardará como "planeColorG" y el azul se guardará como "planeColorB". Estos valores se guardan fuera del juego en la computadora (o cualquier dispositivo en el que se ejecutará, como un dispositivo iOS, Android u Ouya), y se pueden recuperar en cualquier momento y en cualquier momento..
No agregar este código al script:
function Start () renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planeColorB");
Cuando se inicie el nivel, el plano obtendrá los datos de color guardados y los aplicará al plano. Si lo prueba ahora y aparece en negro, ¡es porque todavía no se han guardado datos! Para evitar esto, puedes configurarlo para que solo se adapte en el segundo nivel:
if (Application.loadedLevel == 1) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b);
Vamos a hacer algunas otras cosas para personalizar el avión! En los archivos 3d también encontrarás algunas bombas. Lo haremos para que se puedan poner debajo del avión y guardarlos.
Comience por crear un objeto bomba. Haz un cubo y cambia la malla por la malla de la bomba. Agrega un color gris y luego coloca el misil en el plano y céntrelo debajo de él. Debe tener un aspecto como este:
Si presionas "aplicar" mientras el avión está en el inspector, las nuevas bombas se agregarán a la prefab, y el avión en el nivel "nivel de juego" también se actualizará automáticamente.
Ahora agregue estas líneas al script:
var bombas: GameObject; función Start () bombs.SetActive (false); if (PlayerPrefs.GetInt ("bombas") == 1) bombas.SetActive (verdadero); función OnGUI () si (GUI. Botón (Rect (10, 190, 100, 50), "Bombas")) bombs.SetActive (! bombs.activeSelf); función LoadLevel () if (bombs.ActiveSelf ()) PlayerPrefs.SetInt ("planeBombs", 1); Else PlayerPrefs.SetInt ("planeBombs", 0);
Antes de intentarlo, recuerde arrastrar el objeto "bomba" en la escena a la ranura "bombas" en el avión, de lo contrario no funcionará.
El script completo debería verse así:
#pragma strict var bombs: GameObject; function Start () if (Application.loadedLevel == 1) renderer.material.color.r = PlayerPrefs.GetFloat ("planeColorR"); renderer.material.color.g = PlayerPrefs.GetFloat ("planeColorG"); renderer.material.color.b = PlayerPrefs.GetFloat ("planeColorB"); Bombas.SetActive (falso); if (PlayerPrefs.GetInt ("planeBombs") == 1) bombs.SetActive (true); función OnGUI () if (Application.loadedLevel == 0) if (GUI.Button (Rect (10, 10, 100, 50), "Red")) renderer.material.color = Color.red; If (GUI.Button (Rect (10, 70, 100, 50), "Blue")) renderer.material.color = Color.blue; If (GUI.Button (Rect (10, 130, 100, 50), "Green")) renderer.material.color = Color.green; If (GUI.Button (Rect (10, 190, 100, 50), "Bombs")) bombs.SetActive (! Bombs.activeSelf); If (GUI.Button (Rect (120, 10, 100, 50), "Load Level")) PlayerPrefs.SetFloat ("planeColorR", renderer.material.color.r); PlayerPrefs.SetFloat ("planeColorG", renderer.material.color.g); PlayerPrefs.SetFloat ("planeColorB", renderer.material.color.b); if (bombs.activeSelf) PlayerPrefs.SetInt ("planeBombs", 1); Else PlayerPrefs.SetInt ("planeBombs", 0); Application.LoadLevel (1); Else else if (GUI.Button (Rect (10, 10, 100, 50), "Load Menu")) Application.LoadLevel (0);
Cuando presionas el botón "nivel de carga" ahora, se guarda el estado de las bombas. Al comenzar el nuevo nivel, las bombas se desactivan o activan, dependiendo del estado guardado. Puede probarlo en esta compilación: DESCARGAR PROYECTO FUENTE 2.
Hemos terminado Ahora sabes como
Este "personaje" personalizado del jugador estará disponible en cualquier momento durante el juego..
Solo hemos usado un avión simple como nuestro "personaje" de ejemplo, pero puede ser cualquier cosa. Barcos, automóviles, humanos, animales, incluso cosas simples, como cubos o esferas, podrían usarse para representar a tus jugadores en tus juegos. Esto también se puede usar para personalizar otros elementos, como armas, vehículos, diseños, peinados o incluso decoraciones en un gran hogar persistente. Enloquecer!