Crear objetos, cambiarles el color desde inspector, crear materiales, y darle gravedad al objeto añadiendole el componente "rigidbody"
MENU
Se crea un UI Canvas Panel
En Inspector de Canvas: UI Scale Mode: Scale with screen size para que se adapte a todas las pantallas
En Inspector de Panel se puede cambiar el color de la pantalla (tener en cuenta que el panel tiene un bordecito que se puede quitar expandiendo un poco el panel)
Se puede crear TextMeshPro (para que tenga mas funcionalidades dentro del texto por eso necesita importar cosas). Se puede centrar, cambiar color, etc.
- En Rect Transform se puede poner en diferentes lados y que se reescale, tenemos que apretar la tecla alt + el icono que queremos (el del centro por ejemplo)
- Tecla T para reescalar el texto desde el cuadrado amarillo que lo rodea
- Tambien podemos quitar el wrapping para que no tenga en cuenta el rectangulo (pero mejor con)
Botón se crea con Button - TextMeshPro
- Dentro de Text (dentro de Button) se cambia el nombre y su color
- Dentro del botón en Inspector - Button se pueden cambiar colores de interacción
- (Botón)En el apartado de Inspector On click() tiene sus funcionalidades añadidas por codigo
Toogle tiene background y checkmark y label (booleano) (antialising)
Dropdown para elegir diferentes opciones (skins, modo de juego, etc)
inputfield para introducir un nombre o algo
scrollbar por ejemplo para reducir el volumen
slider lo mismo que scrollbar con otro estilo (con relleno al mover) volumen
se puede poner una imagen (en source image en el apartado imagen de inspector) se puede poner imagenes, con la tecla R se escala
recomendable poner todo con anchor point (lo de rect transform)
Nueva escena
File - New Scene
guardar el archivo en escena por ejemplo Nivel 1.
mover la camara para enfocar la escena y dentro de camera - environment podemos cambiar el background type de skybox a solid color y poner un color
en la pestaña projection se puede cambiar de perspectiva a ortografica y se cuadra la camara en size
en un objeto ( que será el jugador) en inspector mesh render - lighting podemos quitar y poner sombra con cast shadows
Creamos una carpeta de Scripts dentro de Assets
create - scripting - c# script y lo renombramos
para asociar un script a un objeto: se arrastra el script al objeto o se arrastra al inspector
en el metodo Start() cuando le demos al play hará esa funcionalidad
sale un error UnassignedReferenceException porque se le debe asignar la variable a un rigidbody. entonces vamos al componente rigidbody del objeto y se lo asignamos a la variable
ahora hacemos uno privado, el MeshRenderer (que es el que hace desaparecer la malla si deseleccionas)
private void Awake() es parecido al método start pero se inicia antes
En Unity, Update() es un método especial que se ejecuta automáticamente en cada frame del juego.
➜ Si tu juego va a 60 FPS, Update() se llama unas 60 veces por segundo.
Se usa sobre todo para cosas que dependen del tiempo real o de la entrada del jugador:
- Leer teclado o mando (Input.GetAxis, Input.GetKey)
- Mover objetos
- Rotaciones
- Contadores de tiempo
- Animaciones simples
edit - project setings - input manager hay un monton de teclas asignadas predeterminadas dentro de axis.
asignar a una variable de tipo float = Input.GetAxis("Horizontal");
tenemos k crear un vector3 y asignar a los ejes su valor
en el objeto dentro del script como la variable speed es publica se puede manejar desde inspector (y se prioriza lo que se ponga aqui para la ejecucion)
con esto ya funciona que se mueva con el teclado eligiendo la velocidad (que volvera a ser 5 al cerrar)
AÑADIR que se coma bolitas
Se puede hacer de varias maneras, en este caso usaremos tags.
Dentro del objeto en inspector en la zona de tags creamos uno nuevo.
Cuando la bola de jugador colisione con la bola collectible comprobará si tiene el tag de collectible
en el codigo de jugador si escribes "onCollisionEnter" ya sale toda la estructura
private void OnCollisionEnter(Collision collision){}
Es un método de Unity que se ejecuta automáticamente cuando el objeto que tiene este script choca físicamente con otro objeto.
Aquí estás comprobando:
- El objeto con el que chocaste
- Si tiene el tag llamado "Collectible"
PREFABS
Creamos una carpeta en Assets llamada Prefabs
un prefab es como una plantilla con el que puedes usar modelos repetidos dentro de un juego
al meter el collectible en prefab (arrastrandolo se pone azul) y si lo eliminamos podremos salvarlo de ahi.
se puede duplicar el objeto con control c + v y seguira siendo un prefab
dentro de rigidbody podemos poner un constraint donde queramos, por ejemplo en y para que no pueda subir en ese eje (aveces al rebotar se sube un poco la pelota) pero entonces tampoco podrá caer al vacio.
Añadir contador
Se puede añadir UI - Text (TextMeshPro)
ponemos dos textos
Creamos un objeto vacio que lo unico que va a tener es un script
lo llamamos GameManager y lo ponemos en posicion 0 0 0
Asi se mantiene el orden. Vamos a crear un script k se llamara GameManager (cuando se crea con este nombre se pone auto con un engranaje de dibujo y lo asignamos al objeto gamemanager arrastrandolo.
Metemos todos los collectibles dentro de GameManager. porque lo que haremos es contar los colectibles que nos quedan dentro de game manager.
lo hemos metido en update asi que va a ejecutarse todo el rato. Para que lo haga debemos a añadir el texto como variable:
para que sume solo cuando haya una collision:
- al jugador le ponemos el tag player
tambien creamos otro script llamado Collectible
se arrastra el script al collectible base, y dentro de él se aplica a todos en overrides
Un override sirve para redefinir (sobrescribir) un método que viene de una clase padre.
borramos el método onCollisionEnter de jugador.css y lo pegamos en Collectible.css y cambiamos que compruebe el tag de player.
Duplicamos los textos y les añadimos nombre "Totales"
En GameManager.cs:
vamos a GameManager
Ahora comprobaremos cuando no queden collectables para poder "pasar de nivel". En el GameManager.cs:
KillZone por si se sale la bola del plano.
añadimos un nuevo script y especificamos que si colisionamos con player, y pilla la escena que está actualmente cargada
- GetActiveScene() ➜ obtiene la escena actual
- buildIndex ➜ el número de esa escena en el Build Settings
- LoadScene(...) ➜ carga esa escena
luego duplicamos el nivel, cambiamos las bolas y
en el codigo en GameManegement importamos la libreria de UnityEngine.SceneManagement; y añadimos:
Para hacer que te siga un bichito necesitamos una IA.
Iremos a Window - Package Manager (hay assets de todo tipo funcionalidades que se pueden instalar)
Unity Registry y buscar AI Navigation (sale instalada ya)
tenemos que indicarle la area y que no se coma las bolas etc.
añadimos un nuevo objeto empty, lo llamamos NavMeshSurface y le añadimos un componente que se llame igual.
añadimos en la KillZone un component NavMeshModifier y lo ponemo en Mode Remove
Si volvemos a NevMeshSurface y clickamos en el modificar en "bake" se vera por donde podrá pasar. Como nuestra bola Jugador va a moverse: eliminamos al jugador, volvemos a hacer "Bake" y hacemos control Z para recuperar al jugador. (truqui)
creamos otro script que se llame enemigo y se lo asignamos a enemigo
abrimos variable navMeshAgent para poder ponerle un destination que será nuestro jugador
El NavMeshAgent se encarga de:
- Mover al enemigo
- Evitar obstáculos
- Seguir caminos del NavMesh
La variable Transform se usará para saber dónde está el jugador
- Busca en la escena un objeto que tenga el script Jugador
- Obtiene su transform
- Lo guarda para usarlo luego
El Transform es un componente que todos los GameObjects tienen en Unity.
Sirve para decir dónde está, cómo está girado y qué tamaño tiene un objeto en la escena.
A cada frame irá a por el jugador con destination y copiamos y pegamos del KillZone lo que hace al colisionar (reiniciar el juego)
Se podrá modificar la velocidad del enemigo dentro del objeto Enemigo en el NevMeshAgent.
se puede copiar y pegar en la segunda escena, pero se tendra que volver a hacer el bake de NevMeshSurface. En "KillZone" tambien se tendra que poner NevMesh Modifier (como componente) y ponerlo en modo remove object. se puede añadir mas de un enemigo
file - new scene - basic built in
añadimos un texto y ya se crea el canvas. En el canvas lo primero es poner Scale with Screen Size para que se escale segun la pantalla
se puede añadir un panel poniendolo primero para que salga al fondo
para meter una imagen creamos una nueva carpeta en assets la llamamos images y podemos arrastrar la imagen que queramos poner. Dentro de la imagen tenemos que cambiar Texture Type a Sprite (2D and UI).
añadimos unan rawImage (dentro de UI) y en texture seleccionamos la imagen. Para que se ponga en toda la pantalla con el tamaño actual lo hacemos desde los anchor (abajo a la izquierda).
creamos el menu, lo guardamos con un nombre (MainMenu) y lo añadimos en build.
creamos un script MainMenu abrimos el script y
los botones deben ser publicos
se puede asignar al canvas o a un objeto vacio (en este caos canvas)
para la pantalla de victoria nueva escena - basic
añadimos lo que sea y lo metemos a buildsettings
haremos un script para que despues de 2secs vuelva al menu principal Mainmenu
se asigna al canvas
PARA LA ESTELA
Arrastramos el jugador a la carpeta Prefab
click derecho en jugador (en jerarquia) y añadir effects - trail
para añadirselo al prefab tenemos que ir a overrides y darle a aplicar a todo (en jugador)
iriamos al nivel2 y meteriamos el prefab (borrando el jugador anterior)
AUDIOS
creamos una carpeta nueva en assets llamada audio
vamos a hacer un prefab de gamemanager (por ej. cogiendolo del nivel1. para hacerlo le quitamos los collectibles que contiene antes para que no salgan en el prefab y una vez puesto en prefab ya podemos volver a ponerlos (no hacer override pk los collectible en cada lvl son distintos)
abrimos el GameManager de prefav y añadimos componente audio source (permite meter un audio y podemos cambiar el volumen etc)
seleccionamos el audio en Audio Generator y deseleccionamos el "Play On Awake"
public AudioSource audioSorce;
y en la funcion Addcollectible añadir el ruido
audioSorce.Play();
ahora en el GameManager inspector arrastramos el componente audio Source en la variable que ha salido en el script Audio Sorce:
sino saldrá este error:
MUSIC MANAGER
vamos a MainMenu
Creamos un objeto Empty con el nombre MusicManager y un script con el mismo nombre
se lo asignamos el script al objeto
por otro lado al MusicManager le añadimos el componente audio source
como queremos que se inicie al empezar el videojuego dejamos seleccionado el Play On Awake y seleccionamos tb el loop
ponemos el audio en audioclip y reducimos el volumen para que se oiga de fondo
para hacer el ejecutable vamos a File - Build Settings
en scene list comprobar escenas
en windows hay una pestaña de player settings se podria poner nombre del juego, company, se podria poner icono del ejecutable, version
apretamos en build y creamos una carpeta build para guardar el ejecutable alli
(a la siguiente vez tardara menos pk ya tendra ciertas cosas hechas carpetas etc)
Es importante que si se pasa el ejecutable sea con la carpeta de build entera, no solo el ejecutable
