primero realice el diseño de como se vera la escena del nivel 1
Primero cree un objeto en forma de cubo para el suelo y modifique las escalas con las dimensiones que observan en la imagen, luego le agregue un Material con una imagen que parezca un piso
Para la simular las casas use un objeto en forma de cubo y igual agregue un material con una imagen que simule un edificio. Se hizo el mismo proceso para las paredes de atrás para que nuestro personaje no se salga del mapa también a ambos se agrego un rigidboby para que el personaje no atraviese las paredes
Por ultimo para la parte del escenario se agrego los Objetos que interactúan con el personaje, los cuales son modelos que descargue de free3d.com, y los adecue el tamaño que tendrían cada uno. Primero solo cree uno de cada uno, para después de poner los componentes que tendieran cada uno poder duplicarlos y esparcirlos por el mapa según me parezca.
Los componentes que tiene cada objeto son:
Un tag que igual cree con los nombres de Basura para la botella, basuratoxica para el turril y incresalud para la píldora.
Un capsule Collider, donde tiqueamos la opción de Is Trigger para la colisión.
Un Script para que roten en el caso de la botella y la píldora y del turril para que se mueva de derecha a izquierda.
y por ultimo un material para poner textura a cada objeto.
El código de la botella y la píldora son sencillos solo use la función de transfortm rotate como se ve en la imagen, con la única diferencia que en la píldora solo lo rete en "Y" con la velocidad de 1 y en "X" y "Z" no.
Para el Turril creamos las variables de "velocidad" para que controle la velocidad en que se moverá, luego la variable de derecha que será un bool para controlar si esta en la derecha y lo iniciamos en true, Después hacemos comparaciones para según la poción el objeto se mueva en la posición "Z" ya sea adelante o atrás pero siempre rango de 4 a -4 en "Z".
Para realizar el modelado del personaje se hizo en Makehuman un software para el desarrollo de humanoides en 3D el cual es de código abierto.
EL personaje tiene:
Un animator para manejar las animaciones que hará según a la actividad que tenga ara.
Un RigidBoby para que no se caiga el suelo y también para no traspasar las paredes.
Un Box Collider para la colisión que tenga con los objetos.
Un Audio Sourse para reproducir los sonidos que realizara.
Y un Script.
Para esto tenemos que controlar cuando nuestro personaje tenga contacto con algún objeto, por eso agregamos a nuestros objetos anteriormente un Collider y le habilitamos el IsTrigger anteriormente y también a nuestro personaje pero este no activamos el Is Trigger, entonces creamos un script para poner al personaje, y nos creamos una clase: voit OnTriggerEnter(Collider x), esto para cuando el personaje tenga contacto con algún objeto llame a esta clase y realice ahí la operaciones que codifique.
Para contar cuantas basuras tiene recogidas nos creamos una variable que lo puse objetos y lo inicializamos en 0, luego dentro del OnTriggerEnter creamos un if para cuando tenga contacto el tag que creamos anteriormente que era basura y pusimos al objeto de botella, agá un incremento en la variable que creamos , y por ultimo con el Destroy hacemos que desaparezca el objeto tocado.
Para cuando el personaje toque a una turril que le ara daño igual comparamos si toco al que tiene el tag basura toxica que ante pusimos al turril, luego cree una variable que controlara la vida y inicie en 3, entonces este toque al turril descontamos en 1 a la variable.
Para controlar la interacción del personaje con la píldora tendría que incrementar la salud, entonces primero comparamos la variable que controla la salud y puse cuando la vida sea menor o igual a 5 pueda ir a comparar si toco el tag de incresalud, esto con el fin de que el personaje no tenga mas de 5 vidas, una pueda pasar los dos if s incrementa la salud y eliminamos la píldora tocada con el destroy .
Todos estos códigos solo es para controlar las variables de la salud y la basura recogida, para que nos aparezca esto en pantalla cree un canvas.
Creamos un canvas y agregue 3 text para mostrar cuanta basura recogió y tiene que recoger y cuanta vida tiene
Luego en el inspector de cada text en la parte de texto ponemos lo primero que se vera al iniciar el juego, porque con el código lo cambiara
Cree dos variables publicas de tipo text con el nombre de tsalud y tbasura, pero antes agregue la librería de UI
y por ultimo en cada comparación que hice agregamos al text lo que queremos mostrar
Primero agregamos las escenas que tenemos a Build Settings, yo agregue mi escena que se vea al inicio, luego mi primera escena para cuando perdamos volvamos a reiniciar la escena y un nivel 2 para cuando ganemos nos lleve a la siguiente escena.
Agregamos al script del personaje la librería de SceneManagement
Creamos variables seriales publicas se podría decir para poder conectar las escenas
Y por ultimo en el código, en la parte que creamos del OnTriggerEnter usamos un if para comparar si los objetos llegaron a 15 cargara la otra escena, los objetos es la variable que creamos para controlar cuantas basuras recogimos
Y al igual que el de arriba comparamos esta ves la salud que tenemos si y esta en 0 es que ya perdimos y reiniciamos el nivel o en este caso estamos cambiando a la escena del inicio
Y por ultimo agregamos en el inspector del personaje en la parte de script que creamos las variables publicas los nombres con los que están las escenas.
Para realizar las animaciones primero descargue las animaciones de mixamo.com. Una animación de descanso, caminar, girar, recoger y golpeo.
Una vez que tenemos las animaciones antes de ponerle al personaje tenemos que configurarlo, primero nos vamos al inspector de la animación y cambiamos el tipo de animación a "Humanoid" como se ve en la imagen y después le damos clic al botón de "Apply", esta configuración tenemos que hacer a todas las animaciones. Luego Apretamos el botón de "configure"
Después de presionar el botón de "Configure" nos vamos a la ultima parte y buscamos la opción de pose y se nos abre una lista despegable y seleccionamos la ultima opción que es la de "Enforce T-pose" para que se nos ponga en pose T, esta opción se la hace a todas las animaciones, y también se le debe de hacer al personaje y no olvidemos darle a aplicar "Apply".
Luego se nos crea un Animation donde configure algunas opciones como transformación de rotación o reduce el tiempo de la animación o incluso el nombre, todo esto depende de como queremos que se vea cada animación.
Creamos un "Animator Controller" para poder controlar al personaje y para una mejor explicación dividiré esto en dos partes una que será de como hice las animaciones del personaje al caminar, y otra las animaciones del personaje al recoger un objeto o cuando se choca con algún turril
Una ves creada el animator controller, Dentro de este le damos clic derecho nos aparecerá la opción de create state y ahí tenemos mas opciones y elegimos la de from new Blend tree
Luego creamos dos variables de tipo float en el "animator controller"
luego hacemos doble clic en el Blend Tree nos vamos a Blend Type y lo cambiamos a la opción de "2D Freefrom Directional"
y se nos agrega automáticamente los variables que creamos, si no se agrego solo hacer como esta en la imagen en parámetros.
Luego para agregar las animaciones nos vamos a List is Empty donde esta el signo de (+) y elegimos Add Motion Field En mi caso agregue 5
Una ves echo eso arrastramos en la parte de rojo la animación que queremos que haga y en la parte de amarillo arreglamos en que posición ara la animación, y en la de verde en cuanto por ciento ara la animación y la azul si queremos que se haga la animación en espejo
Y por ultimo arrastramos el Animator Controller al personaje y en la parte de avatar presionamos en el redondo que se ve en la derecha y buscamos el nombre de nuestro personaje, luego hacemos el código para hacerle mover al personaje .
En el script para poner al personaje creamos los siguientes variables de velocidad de movimiento y de rotación para el control de la velocidad, creamos un private Animator y por ultimo dos variables.
Luego recuperamos el animator
Y por ultimo en el Update, en las variables de "x" y "y" con el Input.GetAxis capturaremos los ejes como esta ahí horizontal y vertical, luego usamos un transform Rotate para que de la vuelta y la coordenada de x agregamos la variable que creamos x por un Time.deltaTime y por la variable de velocidad que creamos para la rotación, lo mismo hacemos con el Translate, por ultimo en el animaitor enviamos los valores de que capturamos en las variables de "x" y "y", esto para que se realice la animación
Arrastramos las animaciones que queremos poner al golpear y alzar y conectamos para la transición en ambos sentidos.
Creamos dos parámetros de tipo Trigger, una para el golpe y otra para cuando alce y son de tipo trigger porque solo necesitamos que la animación realice una ves
Y en la parte de ida como esta marcado en la imagen des tiqueamos el Has Exit Time de cada una de las animaciones y agregamos la variable que creamos de cada uno.
Y por ultimo en la parte del script del personaje agregamos algunas líneas de comando en las condicionales que creamos, como ya teníamos creado un Animator con el nombre de anim ya no es necesario crear otro
ponemos el anim.SetTrigger y con la animación de alzar el gameObject toca al tag basura
también ponemos la animación de alzar cuando toca el tag incresalud
Y por ultimo ponemos la animación de golpe cuando el gameObject toca el tag basuratoxica
Los audios para los sonidos descargue de la pagina opengameart.org y también de la Asset Storede Unity, una ves descargad los audios dividiré en dos partes esta explicación una para el fondo de la música y otra para los sonidos que realice el personaje al tocar algún objeto y caminar.
Agregamos en cualquier objeto un Audio Soure, yo lo puse en el canvas y simplemente arrastramos el audio donde dice Audio Clip.
También ahí en la propiedad donde dice Volume podemos aumentar o reducir el volumen según nos parezca conveniente
Al igual que podemos habilitar la opción de que el sonido una ves acabado vuelva a empezar en la opción Loop.
Primero agregamos al personaje un Audio Source solo necesitaremos de uno para reproducir todos los audios.
Una ves agregado el Audio Source habilitaremos de este el Loop para no tener conflictos con los audios que tienen que reproducirse en bucle
Luego creamos AudioSource en el script que tiene el personaje
Y este al igual que el Animator recuperamos en el start al AudioSource que creamos
Luego creamos variables publicas para agregar los diferentes audios que tendremos una para cada una con un contenedor para audios que es AudioClip.
Para que se escuche los sonidos de los pasos en el UpDate del código crearemos una condicional if donde si apretamos las teclas W,A,S o D constantemente se nos reproduzca el sonido para caminar
Y otra condicional que si saltamos las teclas W,A,S o D nos deje de sonar el audio de caminar
Para cuando el personaje toque algún objeto por ejemplo cuando toque la basura reproduciremos el sonido dentro del if, y para que el sonido ya nos se reproduzca porque recordemos que el reproductor esta en bucle, usaremos una Corutine
La corutine la crearemos fuera del OnTrigger, Entonces esperaremos un tiempo corto para dejar de reproducir el sonido, y luego lo llamaremos dentro del if para que así deje de sonar el audio, este proceso es igual con todos los objetos, pero no es necesario crear varias IEnumerator para dejar que suene el audio con uno es suficiente