Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Encender una vela

Iniciado por eliasdixon, Agosto 04, 2015, 05:54:27 AM

Tema anterior - Siguiente tema
hola gente, miren no soy muy experimentado en esto, recien arranco y eh visto juegos que podes interactuar con velas,por ejemplo encontrar una caja de fosforos y encendes esa velasi alguien sabe como hacerlo se lo agradeceria mucho!saludos

Agosto 04, 2015, 12:05:06 PM #1 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
No se me ocurre manera de explicarlo con brevedad. O.ò

Parto desde el punto de que ya tienes un personaje que se mueve por el escenario y su cámara, entonces necesitas:
- Hacer que el personaje pueda coger la cerilla.
- Hacer que esa cerilla se pueda usar para activar la vela.

Para ello, necesitarás programar.

1º Crea por ejemplo algún script con la variable para la vela, como si fuera un script de inventario, la variable de la vela hazala de tipo bool, y ponla en false. Y ese script pues ponlo en el objeto del jugador. 
2º Después, crea otro script, para la vela, este script tendrá la función OnTriggerEnter ( http://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html ) esa función se activa cuando un objeto con collider, entra en su área. (Por ejemplo, el jugador tiene un collider).
3º Lo siguiente es verificar si el collider que ha entrado, es el jugador o no, (también puede ser un enemigo, una caja, un aliado, etc...), para ello, habría que mirar el objeto que entra (en el script de ejemplo lo han llamado "other") con algo como:
if (other.transform.tag == "Player")
{
  //Mas instrucciones aqui...
}
4º Lo que pongamos dentro de las llaves, sólo se activará si el collider que entro es el jugador (porque sólo el jugador debería tener el tag "Player" puesto), ahora lo que tenemos que hacer es acceder a su script de inventario, por lo que accede dicho script con un GetComponent, no sé si lo harás en Javascript o en C#, pero aqui tienes ejemplos en los formatos (http://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html ).
5º Ya con el enlace al script, pues cambias la variable de la vela y la pones en true, y después pues ya destruyes el objeto de la vela del suelo con un Destroy (http://docs.unity3d.com/ScriptReference/Object.Destroy.html )  , Con ello guardas  y aplicas el script.
6º Como este script usa el OnTriggerEnter, también necesitaremos definir el área, así que a las cerillas, ponle también un componente Collider (Sphere collider o box collider) para marcar el área en la que tiene que entrar el jugador para cogerlo, pero también activa la opción "IsTrigger" para que el jugador pueda atravesar la colisión.

Ahora el siguiente paso es crear el script que irá en la vela, sería algo parecido al script de las cerillas, es decir, otro collider para definir el área y otro OnTriggerEnter con el if para ver si es el jugador y acceso al script de inventario, lo que cambia es lo que viene después, en vez de poner la variable de la vela en true y destruir el objeto, lo que habrá que hacer es otra condicional que mire si la variable de la vela, es true. Si lo es, entonces tendrás que activar la luz y la llama de la vela, esto puedes hacerlo creando una variable  pública (Antes de entrar en la función OnTriggerEnter).de tipo GameObject, para activarla en la condicional con un SetActive ( http://docs.unity3d.com/ScriptReference/GameObject.SetActive.html ). 

El objeto que activará, tienes que montarlo en la escena, se trataría de la luz y la llama, que las pondrías como hijos de otro objeto vacío, y este objeto vacío lo desactivas en el inspector y lo pones en la variable GameObject que creaste en el script de la vela.

Con ello, al ejecutarlo, debería funcionar, si te acercas a la vela no pasará nada, pero si te acercas a las cerillas, estás desaparecerán (y quedarán en tu inventario), por lo que si te vuelves a acercar a la vela con las cerillas, entonces la vela se iluminará.

Es algo bastante rústico y puede añadirse muchísimas mejoras, pero creo que lo mejor es que intentes llevar esto a cabo antes de dar el siguiente paso. O.ò

gracias, ya tengo un inventario, osea q agarrar los cerillos no es el poblema, si no q al presionar por ejemplo en la bela, la llama se prenda y solo una vez 

Agosto 05, 2015, 11:33:09 AM #3 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Ah bueno, pues entonces mejor, ya tienes algo más avanzado.

Para que sea al pulsar un botón, puedes usar OnTriggerStay en vez de OnTriggerEnter, el Stay se repite como el update, y dentro, pues mirar si el usuario está pulsando la tecla que corresponde. if (Input.GetButtonDown ("Action"))  Para que se active sólo 1 vez,deberías ponerle también una variable bool que lo controle, quedando la línea algo así.

 
if ((Input.GetButtonDown ("Action")) && (!completado))
{ }

Dentro del if, tendrías que acceder a tu inventario, con un GetComponent, y comprobar si tienes ese objeto mediante la manera que hayas programado en tu script de inventario.En caso afirmativo, a parte de activar el efecto de la vela, tendrías que cambiar también la variable "completado" a true, así ya no se podrá volver a encender la vela al pulsar la tecla.

Etiquetas: