lunes, 22 de agosto de 2011

Script Romper Objetos

var fragilidad : float; //cuanto más elevado sea este valor, más fuerte tendrá que ser el choque para que se rompa.
var piedri: GameObject; //Usar el inspector para asignarle aquí el prefab del cacho de piedra que saldrá despues de romperse.

function OnCollisionEnter (collisionInfo : Collision) { // se ejecutará cada vez que colisione con algo
if (collisionInfo.relativeVelocity.magnitude > fragilidad){
//si la fuerza de colisión es mayor que la fragilidad
Instantiate (piedri, transform.position + Vector3(0,1,0), Quaternion.identity); // creamos 2 cachos
Instantiate (piedri, transform.position + Vector3(1,1,1), Quaternion.identity);
Destroy(gameObject); // Y destruimos la antigua
}
}

function Start()//Al inicio a piedri se le asigna directamente el prefab llamado "Piedrita" si no queremos hacerlo manualmente
{
piedri = GameObject.Find("Piedrita");
}


Este script hay que asignarlo a un objeto que tenga un Rigidbody y un Collider. Y aparte tendremos que tener creado en el proyecto un prefab que contenga un objeto igual pero más pequeño y así dará la impresión de que se rompe en dos al chocar.

martes, 16 de agosto de 2011

Mostrar Nombre de Objetos Cercanos

var texto : TextMesh; //creamos un 3dText y lo ponemos como hijo del player

function Update () {

if (Input.GetKey("e")) //si mantenemos pulsado "e"...
{
var hit : RaycastHit;
if (Physics.Raycast (transform.position, transform.forward, hit, 4)) { //lanzo un rayo hacia adelante
if (hit.collider.tag == "Leible") // si choca el rayo con algo marcado como leible (creamos el tag Leible)
{
texto.text = hit.collider.name; // aplicamos el nombre del objeto al texto 3d
texto.gameObject.active = true; // y activamos el texto 3d
}

}
else
texto.gameObject.active = false; // si dejamos de chocar mirar al objeto o nos alejamos...
o
}
else
texto.gameObject.active = false; // si dejamos de pulsar la tecla ... no se muestra el texto
}


function Start() { // al empezar el juego el texto 3d se oculta
texto.gameObject.active = false;
}

viernes, 12 de agosto de 2011

Personaje Low Poly gratis


Es un robot un poco feo pero al menos tiene 4 animaciones y sirve para ir probando cosas en unity.

Es un .fbx igual que la iglesia por tanto metedlo a la carpeta Assets y listo.

http://www.megaupload.com/?d=XGRE3H22





jueves, 11 de agosto de 2011

Leer Toque de Pantalla Táctil y Zoom de Pellizco con 2 Dedos

function LeerToque()
{
if (Input.TouchCount == 1)
var touch : Touch = Input.GetTouch(0);
else if (Input.TouchCount == 2)
{
var touch1 : Touch = Input.GetTouch(0);
var touch2 : Touch = Input.GetTouch(1);
var vectorDifActual : Vector2 = touch1.position-touch2.position;
var vectorDifAntiguo : Vector2 = (touch1.position - touch1.positionDelta)-(touch2.position - touch2.positionDelta);
var touchDelta : float = vecctorDifActual.magnitude - vectorDifAntiguo.magnitude;
}
}

Modelo de Iglesia en FBX

Aquí os dejo un archivo .fbx de una iglesia que modelé inspirándome en la de el pueblo madrileño Torres de la Alameda.

Las ventanas y las texturas las puse desde Unity por lo que no van en el modelo.



http://depositfiles.com/files/8pmra6c9a

miércoles, 10 de agosto de 2011

Seguir a un objeto

var target : Transform; // variable a la que asignaremos el objetivo
var vel_vec : Vector3; // variable donde guardaremos el vector que apunta de uno a otro
var speed : float; // variable para la velocidad de seguimiento

function Update()
{
vel_vec = target.position - transform.position; // Creamos un vector desde el perseguidor
transform.LookAt(target); // hasta el objetivo y cambiamos su direccion
transform.Translate(Vector3.forward * speed * Time.deltaTime); // Anda hacia su objetivo
}

transform.position se refiere al subobjeto Transform del portador del Script, y en concreto a su posicion que es de tipo Vector3.

Time.deltaTime se usa para que no dependa de los fotogramas por segundo, y evitando así que el movimiento sea más rapido en un ordenador más potente.

martes, 9 de agosto de 2011

Script para empujar objetos rígidos

var potencia : float; // variable para definir la potencia de empuje.

function OnControllerColliderHit (hit : ControllerColliderHit) //función que se ejecuta al contacto con un objeto rígido."hit" será el objeto con que choque
{

var cuerpo: Rigidbody = hit.collider.attachedRigidbody;
// a la variable cuerpo le asigno el Rigidbody del objeto con el que he chocado


var direccion: Vector3 = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);
// Creo la variable direccion que será el vector director con el que apliquemos la fuerza.
// Le asignamos las coordenadas de la direccion en la que estabamos en el momento de //chocar.

if(Input.GetKey("e")) //si pulsamos la tecla 'e' ...
{
cuerpo.velocity = direccion* potencia/cuerpo.mass;//aplicamos una velocidad a "cuerpo".
}

}

// una velocity es un vector con 3 dimensiones, por tanto usaremos nuestro vector direccion y lo multiplicaremos por una constante que es la potencia. Con esto tendremos un vector con sus coordenadas multiplicadas cada una por la potencia.

Si dividimos este vector entre la masa del objeto, tendremos una fuerza más realista ya que cuanto más pesado, más costará moverlo.

Este trozo de código en JavaScript lo escribimos en un archivo .js y lo metemos en la carpeta Assets de nuestro proyecto.

Después arrastramos el archivo .js a nuestro Player o carácter principal del juego.

Si ponemos un cubo y le asignamos un Component Rigidbody, ya podremos empujarlo.

Nota: Supongo que tenemos un terreno o plataforma por la que andar, y un carácter principal creado que podamos mover.

Al arrastrarle el archivo .js, selecionamos el protagonista, y en la ventana "inspector", podremos ver que lo tiene asignado. Allí se mostrará la variable potencia con un número editable que tendremos que definir antes de jugar.


Bienvenida


Os doy la bienvenida a todos a este blog que tratará sobre la creacción de videojuegos con Unity 3d, incluyendo noticias, tutoriales y cualquier cosa que se me vaya ocurriendo a partir de mi experiencia con este magnífico engine 3d.