Unity

Assets: Un asset es una representación de cualquier item que puede ser utilizado en su juego o proyecto. Un asset podría

Views 169 Downloads 5 File size 773KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Assets: Un asset es una representación de cualquier item que puede ser utilizado en su juego o proyecto. Un asset podría venir de un archivo creado afuera de Unity, tal como un modelo 3D, un archivo de audio, una imagen, o cualquiera de los otros tipos de archivos que Unity soporta. También hay otros tipos de asset que pueden ser creados dentro de Unity, tal como un Animator Controller, un Audio Mixer o una Render Texture.

Sistema UI:

El sistema UI le permite a usted crear interfaces de usuario rápidas e intuitivas, incluye elementos tales como botones, cajas de texto, canvas, entre otros.

Canvas El Canvas es el área donde todos los elementos UI deben estar. El Canvas es un Game Object con un componente Canvas en él, y todos los elementos UI deben ser hijos de dicho Canvas. El área Canvas es mostrado como un rectángulo en la Vista de Escena. Esto lo hace fácil posicionar los elementos UI si necesitar tener una Vista de Juego todo el tiempo. NavMesh

Es una estructura de datos que describe las superficies caminables del mundo del juego y permite encontrar el camino de una ubicación caminable a otra en el mundo del juego. La estructura de dato es construido, o baked, de manera automática de la geometría de su nivel. NavMesh Agent Le ayuda a usted crear personajes que se evitan entre sí mientras se mueven hacia su objetivo. Los Agents razonan acerca del mundo de juego utilizando el NavMesh y saben cómo evitarse a cada uno al igual que obstaculos que se muevan.

Animator controller Un Animator Controller le permite a usted arreglar y mantener un conjunto de animaciones para un personaje u otro Game Object animado. El Controller tiene referencias a los clips de animaciones utilizados dentro de él, y maneja varios estados de animación y transiciones entre estos utilizando algo llamado un State

Machine, que puede ser pensado como un tipo de diagrama de flujo, o un simple programa escrito en un lenguaje visual de programación dentro de Unity.

Diseños fbx (Fuente externa) Las animaciones desde fuentes externas son importadas a Unity de la misma manera que archivos regulares 3D. Estos archivos, ya sean si son archivo FBX genéricos o formatos nativos de software 3D como Maya, Cinema 4D, 3D Studio Max, puede contener datos de animación en la forma de una grabación lineal de movimientos de objetos dentro del archivo. En algunas situaciones, el objeto a ser animado (un personaje) y las animaciones para que vayan con este pueden estar presentadas en el mismo archivo. En otros casos, las animaciones pueden existir en un archivo separado al modelo en ser animado.

En el proyecto nuestro jugador y enemigo deberán haber sido configurado como un Rigidbody(para que al cuerpo se le aplique una gravedad):

Y un Capsule collider (para que el cuerpo sea sólido):

También deberá tener un box collider (para el piso) y un mesh collider (debido a la exactitud al ser para los pasamanos):

Scripting C# El comportamiento de los GameObjects es controlado por los Components que están adjuntos. Aunque los Componentes integrados de Unity pueden ser muy versátiles, vamos a ver que vamos a necesitar ir más allá de lo que estos pueden proporcionar para implementar las características propias de su juego. Unity le permite a crear su propio Componente utilizando scripts. Estos le permite a usted (activar/desactivar) eventos de su juego, modificar propiedades del Componente en el tiempo y responder al input del usuario de la forma que usted quiera. Unity soporta dos lenguajes nativamente:  

C# (pronunciado C-sharp), un lenguaje estándar de la industria similar a Java o C++; UnityScript, un lenguaje diseñado específicamente para uso con Unity y modelado tras JavaScript;

Anatomía de un archivo Script using System.Collections; using UnityEngine; public class MainPlayer : MonoBehaviour { void Start () { } void Update () { } }

En donde, la primera cosa para tener en cuenta son dos funciones definidas dentro de la clase: 



La función Update es el lugar para colocar el código que se encargará de la actualización por frame para el GameObject. Este puede incluir movimiento, acciones de trigger y responder al input del usuario, básicamente cualquier cosa que necesite ser manejado en el tiempo durante el gameplay. Para que la función Update haga su trabajo, a veces es útil configurar variables, leer preferencias y hacer conexiones con otros GameObjects antes de que cualquier acción del juego tome lugar. La función Start va a ser llamada por Unity antes de que el gameplay comience (antes de que la función Update sea llamada por la primera vez) y es un lugar ideal para hacer cualquier inicialización. Codificación

Menu.cs Encargado del seguimiento a un target el cual será el personaje (Jasper): using System.Collections; using System.Collections.Generic; using UnityEngine; public class Camera : MonoBehaviour { [SerializeField] Transform target; Vector3 offset; void Start () { offset = target.transform.position - transform.position; }

void Update () { Vector3 pos = target.transform.position - offset; this.transform.position = Vector3.Lerp(this.transform.position, pos, 1.5f); } }

Asignación en Main Camera:

Player.cs Script que maneja el movimiento, velocidad, puntaje, condiciones de victoria y pérdida de Jasper.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Player : MonoBehaviour { private Rigidbody rb; [SerializeField] private float speed; private Animator anim; [SerializeField] Text scoreUI; Text vidaUI; private Transform myTransform; public public public public public

Button btnLeft; Button btnRight; Button btnJump; Text txtScore; Text txtVida;

float _score = 0f; int score = 0; public DeathMenu deathMenu; public WinMenu winMenu; // Use this for initialization void Start () { //movimiento anim = GetComponent(); rb = this.GetComponent(); rb.velocity = new Vector3(0f, 0f, speed); //Ejecucion de botones btnLeft.onClick.AddListener(ToLeft); btnRight.onClick.AddListener(ToRight); btnJump.onClick.AddListener(ToJump); } void Update () { //Puntaje ScoreUpdate(); //Condicion de Perdida if (txtVida.text == "Estas Muerto!") { GameOver(); } //Condicion de Victoria if (txtScore.text == "500") { Win(); } //Movimiento por teclado if (Input.GetKey(KeyCode.Space))//Salto { ToJump(); } if (Input.GetKey(KeyCode.UpArrow))//Volver a acelerar { rb.velocity = new Vector3(0f, 0f, 10); } if (Input.GetKey(KeyCode.LeftArrow))//izquierda

{ ToLeft(); } if (Input.GetKey(KeyCode.RightArrow))//derecha { ToRight(); } } //Funcion izquierda void ToLeft() { rb.velocity = new Vector3(0f, 0f, speed); rb.AddForce(-50f, 0f, 0f); } //Funcion derecha public void ToRight() { rb.velocity = new Vector3(0f, 0f, speed); rb.AddForce(50f, 0f, 0f); } //Funcion salto public void ToJump() { rb.AddForce(0f, 1f, 0f, ForceMode.Impulse); anim.Play("Jumping"); rb.velocity = new Vector3(0f, 0f, speed); } //Condicion perdida void OnTriggerEnter(Collider col) { if(col.gameObject.tag == "Water") { GameOver(); } } //Funcion Fin de Juego public void GameOver() { Debug.Log("Game is Over"); deathMenu.ToggleEndMenu(_score); gameObject.SetActive(false); btnLeft.gameObject.SetActive(false); btnRight.gameObject.SetActive(false); btnJump.gameObject.SetActive(false); txtScore.gameObject.SetActive(false); } //Funcion Victoria public void Win() { Debug.Log("You win!"); winMenu.ToggleWinMenu(_score); gameObject.SetActive(false); btnLeft.gameObject.SetActive(false); btnRight.gameObject.SetActive(false); btnJump.gameObject.SetActive(false); txtScore.gameObject.SetActive(false); } //Funcion Puntaje private void ScoreUpdate() { _score += 5f *Time.deltaTime; score = Mathf.RoundToInt(_score); scoreUI.text = score.ToString(); }

}

DeathMenu.cs Script usado para mostrar el menú de pérdida y su puntaje: using using using using using

System.Collections; System.Collections.Generic; UnityEngine; UnityEngine.UI; UnityEngine.SceneManagement;

public class DeathMenu : MonoBehaviour { public Text scoreText; // Use this for initialization void Start () { gameObject.SetActive(false); } // Update is called once per frame void Update () { } public void ToggleEndMenu(float score) { gameObject.SetActive(true); scoreText.text = ((int)score).ToString(); } public void restart() { SceneManager.LoadScene("game"); } public void toMenu() { SceneManager.LoadScene("menu"); } }

WinMenu.cs Script usado para para mostrar el menú de victoria y su puntaje. using using using using using

System.Collections; System.Collections.Generic; UnityEngine; UnityEngine.UI; UnityEngine.SceneManagement;

public class WinMenu : MonoBehaviour { public Text scoreText; void Start () { gameObject.SetActive(false); } void Update () { }

public void ToggleWinMenu(float score) { gameObject.SetActive(true); scoreText.text = ((int)score).ToString(); } public void restart() { SceneManager.LoadScene("game"); } public void toMenu() { SceneManager.LoadScene("menu"); } }

Asignación en Player:

Healt.cs Script responsable de mostrar y asignar la vida al jugador: using using using using

System.Collections; System.Collections.Generic; UnityEngine; UnityEngine.UI;

public class Health : MonoBehaviour { public Text vida; public int health = 100; // Use this for initialization void Start () { } // Update is called once per frame void Update () { vida.text = "Vida: "+ health.ToString(); if (health < 1) { vida.text = "Estas Muerto!"; }

} }

Asignación en Player:

Enemy.cs Script encargado de asignar la IA al enemigo, asignar un objetivo de persecución y manejo de la vida del jugador: using using using using

System.Collections; System.Collections.Generic; UnityEngine; UnityEngine.AI;

public class Enemy : MonoBehaviour { public GameObject Target; public NavMeshAgent agent; public Health healthScript; public float distance; // Use this for initialization void Start () { } void Update () { if(Vector3.Distance(Target.transform.position, transform.position) < distance) { agent.SetDestination(Target.transform.position); agent.speed = 5; } else { agent.speed = 0; } // Reduccion Vida de Jugador if (Vector3.Distance(Target.transform.position, transform.position)