Mostrando las entradas con la etiqueta unity3d. Mostrar todas las entradas
Mostrando las entradas con la etiqueta unity3d. Mostrar todas las entradas

miércoles, 4 de febrero de 2015

#Script Cronometro descendente #Unity - Down Timer


El siguiente script es de formato *js o JavaScript y permite contar el tiempo de forma descendente.

Muy útil cuando deseas controlar el tiempo que transcurre en una escena. Este script te permite darle un tiempo de vida a la escena, por ejemplo en el juego de Mario Bros los usuarios tienen un tiempo límite para completar el nivel o sino mueren. 

miércoles, 27 de agosto de 2014

#Script Colisión o Collision GameObject #unity3d #javascript

La colisión o collision en #unity3d es la acción por la cual un gameobject u objeto choca con otro. Luego de este encuentro se puede indicar que el mismo desaparezca o que realice otra acción por ejemplo bajar vidas. ¿Pero como hacer para que se active la colisión cuando toca otro objeto y este no le cae encima?

Ejemplo tomado del sitio oficial de Unity3d - Sección Tutoriales.


En #unity así como existe el OnTriggerEnter para el ingreso en zonas sensibles, existe también el OnCollisionEnter. Este permite activar la acción cuando el elemento entre en contacto con otro. Pero deben tener en cuenta que esto solo funciona cuando el elemento que tiene el script cae y toca el otro. O por lo menos a mí solo me funciona de esa forma. 


Para lo cual he recolectado un video tutorial de Will Goldstone en el cual ejemplifica lo indicado.


En el ejemplo que vimos el cubo posee el script y se activa al chocar el cubo con el plano. El script que se usa en este video es el siguiente. La acción Debug.Log("mensaje"); sirve para enviar un mensaje por consola, en este caso para validar que el cubo toca el piso.


* JS
-------------------------------------------

function OnCollisionEnter (col : Collision)
{
    if(col.gameObject.name == "prop_powerCube")
    {
        Destroy(col.gameObject);
    }

}
-------------------------------------------


Pero que pasa si no queremos que la colisión se active cuando cae el objeto sobre el player sino cuando es tocado por el player o cuando este lo roza. Por ejemplo cuando un enemigo nos ataca.

Para solucionar este inconveniente debemos de usar el siguiente Script en JS o JavaScript para que al momento que el player toque un objeto este comience a enviar un mensaje. Por ejemplo si deseamos que cuando el player toque una pared esta le quite vidas, o para que cuando el enemigo colisione con el player este le quite vidas también.

* JS
-------------------------------------------

function OnControllerColliderHit ( hit:ControllerColliderHit  ){
if( hit.gameObject.tag == "Enemigos"){
Debug.Log ("me están matando");
}
}

-------------------------------------------

Con este script estamos indicando que cuando el Player colisione con el objeto de tag Enemigos se envíe el mensaje. Como observar en este caso quien posee el script es el Player y necesitar crear los tags necesarios para los enemigos, objetos u otros a usar.

Si no sabes como crear tags puedes revisar el siguiente link. 

miércoles, 20 de agosto de 2014

#Script cambiar textura skybox #unity3d #javascript

En el desarrollo de videojuegos llega un momento en el cual es necesario cambiar la textura que posee el skybox o cielo por otra diferente al activar un objeto o entrar a un nivel diferente. 

Ejemplo: cuando deseamos que al pasar por una zona sensible el cielo se oscurezca o se aclare.

En el siguiente script en Javascript indicaré de forma sencilla como afectar la textura del Skybox.



* JS
-------------------------------------------
var mat1 : Material;
var mat2 : Material;

function OnTriggerEnter () {
      RenderSettings.skybox = mat2;
}

function OnTriggerExit () {
      RenderSettings.skybox = mat1;
}

-------------------------------------------

El Script posee dos variables de tipo "material" en el cual almacenaremos nuestra textura del cielo o del skybox. Es necesario indicar que el material debe de contener las 6 texturas para que el efecto visual sea el apropiado. 



Estos materiales se activaran al momento que entramos o salimos de una zona sensible y en el código RenderSettings accedemos a la opción skybox. Que es idéntico al hacerlo por medio del menú principal en la opción de Edit / RenderSettings.

Y con eso ya tenemos el script que al ingresar a la zona sensible se muestre el material 2 y al salir se muestre el material 1. Osea que se cambie el cielo al entrar a la zona.

lunes, 18 de agosto de 2014

#Script boton touch salir juego #unity3d c# - game touch button

Cuando se elaboran juegos para dispositivos móviles como Android o IOS siempre es necesario elaborar el botón de salir de la aplicación para permitir al usuario regresar al uso normal de su teléfono.


El siguiente script está codificado para su uso TOUCH o TÀCTIL.



El lugar donde se coloque el botón de salir puede ser en el menú, así como también en cada paso de un nivel a otro. Esto permitirá al usuario regresar a su dispositivo sin ningún inconveniente y sobretodo si molestia.

El siguiente código se encuentra desarrollado en C#.

* C#
-------------------------------------------

using UnityEngine;
using System.Collections;

public class boton_salir : MonoBehaviour {

public GUITexture boton;
void Update () {
if (Input.touchCount > 0) {
for (int i = 0; i < Input.touchCount; i++) {
Touch t = Input.GetTouch (i);
if (t.phase == TouchPhase.Began) {
if (boton.HitTest (t.position, Camera.main)) {
Application.Quit();
}
}
}
}
}
}

-------------------------------------------

Como pueden observar en el código la sentencia para salir de la aplicación es : Application.Quit();
Se ha creado una variable para almacenar la textura del botón. Y en el Update se valida la acción de tocar la pantalla, en otras palabras se valida el touch.
El primer if sirve para el funcionamiento de la opción touch. Y el segundo y tercero sirva para validar que el botón sea el que se haya presionado. Por eso la validación if (boton.HitTest (t.position, Camera.main))

viernes, 1 de agosto de 2014

#Script muestra vida #unity3d c#

En el post antrior indicaba como hacer una barra de vidas por medio de JS. En este  post indicaré como realizar un HUD de vidas pero basado en texturas. En otras palabras los famosos corazones de vida que disminuyen en los videojuegos al momento que un enemigo nos ataca.



El script que se muestra a continuación está elaborado en C#. Para lo cual hemos de crear dos script, uno para mostrar los corazones en pantalla y otro para disminuir los corazones al ingresar a la zona sensible.

Para el desarrollo del ejemplo he utilizado la opción de GUITexture de la barra de Herramientas. Gameobject/Creater Other/ GUI Texture. Esta opción generará una textura en pantalla la misma que podemos asignarle la textura que deseamos mostrar. La textura a mostrar van a ser los 3 corazones que se muestra en la imagen.


El primer script que escribiremos será el que se encargue de validar si la variable vida ha disminuido y de ser así que cambie a la textura de dos corazones, un corazón y ningún corazón. Como el script se encuentra en c# favor tener el consideración el nombre del archivo para que no genere conflicto al copiar el script. El archivo lo llamaremos "hud_corazones".

* C#
-------------------------------------------
using UnityEngine;
using System.Collections;

public class hud_corazones : MonoBehaviour {

public GUITexture  image;
public Texture2D  Image_01; 
public Texture2D  Image_02;
public Texture2D  Image_03;
public Texture2D  Image_04;
public static int vida = 3; // variable vida

void Update () {
if (vida ==3) {
image.texture =  Image_01;
}
if (vida ==2) {
image.texture =  Image_02;
}
if (vida ==1) {
image.texture =  Image_03;
}
if (vida ==0) {
image.texture =  Image_04;
}
}
}
-------------------------------------------

Como se observa en el script se han creado varias variables de tipo Texture2D para almacenar las diferentes texturas cada vez que van disminuyendo las vidas. Adicional se adicionó una variable de tipo int llamada vida, en esta variable almacenaremos las vidas. Y como se observa en la funcion Update ( en c# void Update) hemos de validar si vida es = 3 se muestra la textura con 3 corazones, y si llega a 0 se muestra la textura sin corazones. 

Vista del GUITexture con los dos script.

Hasta este punto ya hemos desarrollado todo lo que necesitamos para que funcione. Nos tocará crear un cubo que sirva de enemigo para que al momento de entrar en el, este afecte a la variable vida y la disminuya y así que se muestren menos corazones.
El script para disminuir las vidas lo llamaremos "enemigo" y también se encuentra escrito en c#

* C#
-------------------------------------------
using UnityEngine;
using System.Collections;

public class enemigo : MonoBehaviour {
void OnTriggerEnter () {
hud_corazones.vida = hud_corazones.vida - 1;
}
}
-------------------------------------------

Y con eso hemos terminado.
Si tienes alguna duda o consulta no dudes en comentar.

miércoles, 30 de julio de 2014

#Script Barra de vida #unity3d - Health Bar

En todo videojuego existen diferentes formas o maneras de mostrar las vidas del player o enemigos. Por lo tanto he considerado importante realizar un script basado en JS (javascript) el cual muestre por medio de una barra, las vidas del personaje principal.


Como se indica en la parte superior este script está realiazado en JS.

En primera instancia lo que debemos de tener en consideración es la relación existente entre los siguientes scripts. Primero debemos de crear el entorno en el cual nuestro player se va a ver afectado por el enemigo.

En mi caso he elaborado un plano, un cubo (enemigo), y el player (Primera Persona). Se pueden optimizar los scripts a realizar pero en mi caso he elaborado 3 Scripts para que se aprecie la mecánica.

El primer Script "muestra_vidas" se lo colocaremos a la cámara o a un gameobject vació, puesto que este script permitirá que se muestren las texturas de la vida del player. Este script posee la variable progress en la cual almacenaré la vida total del player. Las variables de tipo Texture2D sirven para adicionar las texturas de la barra de vida y la del fondo de la barra. Las texturas a usar pueden estar en formato PNG.

Adicional se han aumentado variables de tipo float que permiten almacenar el tamaño de la pantalla a visualizar y realizar una operación matemática para devidir la pantalla en cinco partes iguales. Pero esto se explicará en otra publicación.

*JS
------------------------------------------------
var progress : float= 0;
var progressBarEmpty : Texture2D;
var progressBarFull:Texture2D;

static var ScreenX:float;
static var ScreenY:float;
static var AnchoxPantalla: int;
static var AltoxPantalla:int;

function OnGUI () {
//barra vacia (posicionx,posiciony, ancho, alto)
GUI.DrawTexture (Rect(ScreenX*0.1,ScreenY*0.1,400,140), progressBarEmpty);
//barra llena
GUI.DrawTexture (Rect(ScreenX*0.55,ScreenY*0.65,progress,20), progressBarFull);
}

function Update (){
AnchoxPantalla=Screen.width;
AltoxPantalla=Screen.height;
ScreenX = (Screen.width)/5;
ScreenY=(Screen.height)/5;
progress = PlayerStat.vida; //llamo a la variable vida que se encuentra en el script PlayerStat
}
------------------------------------------------


La función OnGUI dibujará en la pantalla la barra de vida y el fondo. Como se ha comentado el GUIDrawTexture mostrará la textura almacenada en progressBarEmpty, y en otra línea se mostrará progressBarFull, la barra que se irá debilitando apenas el player reciba daño.


La variable progress almacenará el valor total de las vidas, osea que al principio esta tiene 250 vidas, pero por cada daño esta va a bajar 50pts. Si revisamos el GUIDraw de la progressBarFull, nos damos cuenta que en el ancho no tenemos un valor fijo, sino que el ancho va a estar guiado por los puntos de la vida.

Hasta este momento solo hemos mostrado las barras de vida pero no poseen interacción con el player. Para lo cual crearemos el segundo script llamado "PlayerStat" en este script creamos la variable vida que almacenará el total de la vida del player. Aquí realizamos el cálculo del daño, donde la funcion Update valida al momento que vida sea 0 se active la funcion dead (cambio de nivel), y para resetear la variable vida luego le asignamos los 250pts. Este Script se lo ponen al player.

*JS
------------------------------------------------
static var vida = 250;

function Update (){
if(vida <= 0){
Dead();
}
}

function Dead(){
Application.LoadLevel("enemigo 2");
vida = 250;
}
------------------------------------------------

El último script a realizar lo llamaremos "baja_vidas" Este script lo tiene el enemigo, y en este le indicamos cuanto es el daño que va a ocasionar. En mi caso he simplificado el ejemplo usando el OnTriggerEnter a un cubo.
En este script lo único que se realiza es cuando entra a la zona sensible la variable vida es restada por 50pts.

*JS
------------------------------------------------
function OnTriggerEnter () {
PlayerStat.vida = PlayerStat.vida -50;
}
------------------------------------------------


Y con esto hemos elaborado nuestra barra de vida. Debemos de tener claro que cuando llegue "vidas"a cero se cambiará de escena. La misma mecánica se puede usar para restar vidas al enemigo u otros elementos.

Si tienes alguna duda o consulta no dudes en comentar.

miércoles, 16 de julio de 2014

#Script #Unity uso de video como textura

Para usar la opción de video se debe de contar con la versión Pro de Unity. En Unity los videos son considerados como texturas animadas (tiene lógica), los formatos de videos aceptados son: mov, mpg, mpeg, mp4, avi, asf
En el caso de exportar para IOS este usa solo las extensiones de mov, mp4, mpv y 3gp
En el caso de exportar para Android este acepta las siguientes extensiones: H263 , H264 AVC, MPEG-4 SP, VPS

En el caso de Android el sitio web oficial de Unity (Documentacion/Manual) indica que el videoTexture no son compatible y que en lugar de esa opción se ofrece la reproducción de Streaming de pantalla completa utilizando la opción Handheld.PlayFullScreenMovie.

El uso de videos en unity es un poco complejo, hasta el momento no se puede usar de forma fácil el canal alfa de un video, lo único que se puede hacer es cambiar es el "shader" del video y poner "Particles/Aditive" y de esa forma parece que el video tiene la propiedad del alfa.

Una vez cargado el video en nuestro proyecto debemos de probar que se reproduzca el mismo. Para reproducir el video seleccionamos el archivo y en el "Inspector" se habilita la opción de Play (icono).
Si al dar clic en Play el video se reproduce no existe ningún problema, si el video no se reproduce puede ser por incompatibilidad con la extensión del video.


Luego de tener el video en nuestro proyecto el proceso más sencillo es asignárselo a un cubo o a un plano para que en este elemento se reproduzca. El video no se va a reproducir hasta que no usemos un script. Para lo cual he desarrollado algunos ejemplos en Javascript :  para ejecutar el video, cambiar a otra escena al finalizar el video y el ejemplo tradicional de unity que viene en la documentación.

Con esta línea de código indicamos que se reproduzca el video.

renderer.material.mainTexture.Play();


En el Script que visualizaremos a continuación se ha creado una variable de tipo MovieTexture para almacenar el video a ejecutar. A esa variable de video le hemos indicado que el loop (repetición de animación) se encuentra activo o true. A la variable se la activa la opción Play o en su defecto Stop.

Script JS
----------------------------------------------
var movTexture : MovieTexture;

function Update(){
movTexture.loop = true;
renderer.material.mainTexture = movTexture; // Se indica que la textura se asigna a esa variable
movTexture.Play();
}
----------------------------------------------
Se puede realizar una pequeña variación en el Script superior para validar cuando el video se termine de reproducir cambie de escena. Para lo cual usaremos las funciones Start y Update. En la funcion Start indicaremos que se ejecute el video, y en la funcion Update consultaremos si el video no se está reproduciendo cambie de escena. Como se observa en el Script ya no se usa la opción del loop del video.

Script 2 JS
----------------------------------------------
var movTexture : MovieTexture;

function Start(){
  renderer.material.mainTexture = movTexture;
  movTexture.Play();
}

function Update(){
if (!movTexture.isPlaying)Application.LoadLevel("NombreNivel"); //el signo "!" se lee Sino
}
----------------------------------------------

Este es el Script tradicional que encontramos en la página de Documentación de Unity, en el cual por medio de la barra de espacio o tecla "Jump" procedemos a poner Play al video, en el caso de ser presionada de nuevo el botón "Jump" el video se pondrá en pausa. A este mismo script le podemos hacer una variación y cambiar el Update por OnTriggerEnter u OnTriggerExit y aplicarlo a zonas sensibles.

Script 3 JS 
-------------------------------------------
function Update () {
    if (Input.GetButtonDown ("Jump")) {
       if (renderer.material.mainTexture.isPlaying) {
            renderer.material.mainTexture.Pause();
        }
        else {
            renderer.material.mainTexture.Play();
        }
    }
 
}
-------------------------------------------