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.