Noticias

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

Script de mivimiento al pasar por un sitio

Iniciado por RankDown, Octubre 02, 2015, 04:12:22 PM

Tema anterior - Siguiente tema
Hola.Quiero hacer un script para que cuando pase por un lugar determinado se ejecute una animacón, tengo este script pero falla y no se como solucionarlo:function OnTriggerEnter (other : Collider) { if(other.gameObject.tag == "Puerta")Animation.play("Prueba");} A ver si saven como solucionar el ploblema, salu2.


Octubre 03, 2015, 07:25:42 PM #2 Ultima modificación: Octubre 03, 2015, 07:32:28 PM por Oak Human Flesh
[quote author=cjadriconejo" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="28145" data-ipsquote-contentcommentid="115535">Hola.Quiero hacer un script para que cuando pase por un lugar determinado se ejecute una animacón, tengo este script pero falla y no se como solucionarlo:function OnTriggerEnter (other : Collider) { if(other.gameObject.tag == "Puerta")Animation.play("Prueba");} A ver si saven como solucionar el ploblema, salu2.[/quote]supongo que la puerta posee el tag Puerta,  luego tu script posee una línea no usada en un lugar que no debería, borra el espacio que separa el if () de la linea que llama a reproducir el clip de animación (esto si deseas reproducir la animación después de que se cumpla el if). Por último estas tratando de acceder a la clase base del componente Animation y no al componente del gameObject asignado... este sistema de animación es el legacy y según recuerdo se llama así:animation.Play ("algun nombre de animación");También para que se reproduzca la animación, esta debe estar asignada en el componente animation del objeto que posee las animacines.

Bye Bye



Cita de: juanma_teso date=1443889549" data-ipsquote="" data-cite="juanma_teso" class="ipsQuotePero no te tira ningún error ni nada?
SI,  a mi no se me da bien lo de hacer script y lo que tiene que hacer es que cuando un objeto entre en el trigger se ejecute la animación, y lo e colocado a si: Objeto: Puertatrigger: script y me da este error:, a ver si me puedes ayudar xD. Un saludo.

Vale, hay un pequeño vacío de conceptos aquí... jajaTu problema es que intentas usar una función cuando no debes, asegúrate de tener una referencia al Animation, luego no te olvides de las mayúsculas!!
var anim : Animation;
function Start () {
   anim = GetComponent<Animation> ();
}

//Cuando entre al trigger
anim.Play("Animacion");
Tienes que tener en cuenta que para usar una función de una clase directamente, ésta tiene que ser una función estática.
//Esto es usar una función de una clase directamente
Animation.Play("Animacion");
//Que no es igual a esto, que es usar una función de un objeto de una clase
anim.Play("Animacion");
 

Octubre 09, 2015, 04:50:36 AM #5 Ultima modificación: Octubre 09, 2015, 04:51:38 AM por Oak Human Flesh
aquí tienes otro ejemplo de un script que usa el método OnTriggerEnter y que llama otro método al ser activado:
using UnityEngine;
using System.Collections;

public class DoorControl : MonoBehaviour {
Animation animationComp;
BoxCollider bxCollider;
AudioSource audioSource;
void Awake ()
{
    // inicializacion de variables
   animationComp = GetComponent<Animation> ();
   bxCollider = GetComponent<BoxCollider> ();
   audioSource = GetComponent<AudioSource> ();
   // asigna el layer 2 al gameobject que posee este script
   gameObject.layer = 2;
}
void OnTriggerEnter (Collider other)
{
    // compara el tag del objeto que entro en colision con el tag Player
   if (other.gameObject.CompareTag ("Player"))
   {
       // si el other GameObject tiene el tag Player llama al metodo AnimDoor
      AnimDoor();
   }
}
public void AnimDoor ()
{
    // aqui puedes poner lo que deseas hacer cuando se llame esta funcion,
    //ejemplo:
   animationComp.Play ();// ejecuta la animacion asignada en el componente Animation del poseedor de este script
   audioSource.Play ();// ejecuta un sonido
   Destroy(bxCollider);// quita el BoxCollider actual
   gameObject.AddComponent<BoxCollider>();// agrega un boxCollider con parametros ajustados al mesh
   gameObject.layer = 19;// cambia el layer para evitar problemas con otros layers (eje layer de los raycast)... XD
   // ahi ves que deseas programar.

}
}
No basta con solo poner este script, la magia culmina cuando en el inspector de Unity asignas los componentes y sus variables.

Bye Bye



[quote author=Oak Human Flesh date=1444359036" data-ipsquote="" data-cite="Oak Human Flesh" class="ipsQuote">aquí tienes otro ejemplo de un script que usa el método OnTriggerEnter y que llama otro método al ser activado:
using UnityEngine;using System.Collections;

public class DoorControl : MonoBehaviour {
Animation animationComp;
BoxCollider bxCollider;
AudioSource audioSource;
void Awake ()
{
    // inicializacion de variables
   animationComp = GetComponent<Animation> ();
   bxCollider = GetComponent<BoxCollider> ();
   audioSource = GetComponent<AudioSource> ();
   // asigna el layer 2 al gameobject que posee este script
   gameObject.layer = 2;
}
void OnTriggerEnter (Collider other)
{
    // compara el tag del objeto que entro en colision con el tag Player
   if (other.gameObject.CompareTag ("Player"))
   {
       // si el other GameObject tiene el tag Player llama al metodo AnimDoor
      AnimDoor();
   }
}
public void AnimDoor ()
{
    // aqui puedes poner lo que deseas hacer cuando se llame esta funcion,
    //ejemplo:
   animationComp.Play ();// ejecuta la animacion asignada en el componente Animation del poseedor de este script
   audioSource.Play ();// ejecuta un sonido
   Destroy(bxCollider);// quita el BoxCollider actual
   gameObject.AddComponent<BoxCollider>();// agrega un boxCollider con parametros ajustados al mesh
   gameObject.layer = 19;// cambia el layer para evitar problemas con otros layers (eje layer de los raycast)... XD
   // ahi ves que deseas programar.

}
}
No basta con solo poner este script, la magia culmina cuando en el inspector de Unity asignas los componentes y sus variables.[/quote]Ahora sale esto, pero no hace nada, el collider contiene el script el layer 2 y el animation, y la "Llave" el tag "Player", y el objete de la animacion no tiene nada xD.
[quote author=juanma_teso date=1444329521" data-ipsquote="" data-cite="juanma_teso" class="ipsQuote">Vale, hay un pequeño vacío de conceptos aquí... jajaTu problema es que intentas usar una función cuando no debes, asegúrate de tener una referencia al Animation, luego no te olvides de las mayúsculas!!
var anim : Animation;function Start () {
   anim = GetComponent<Animation> ();
}

//Cuando entre al trigger
anim.Play("Animacion");
Tienes que tener en cuenta que para usar una función de una clase directamente, ésta tiene que ser una función estática.
//Esto es usar una función de una clase directamente
Animation.Play("Animacion");
//Que no es igual a esto, que es usar una función de un objeto de una clase
anim.Play("Animacion");
 [/quote]Meda errores y por si acaso, estoy en unoty 4.x xD

Hola mi script es solo una muestra, el resto debes hacerlo por tu cuenta.Supongo que después de haber visto estos ejemplos modificaste tu script,  como ha quedado ahora? Una depuración correcta se hace con la consola, el editor de Unity, el editor de código y documentación (ya sea de Unity o msdn o cualquier documento que ayude).El error se debe a que no comprendes el concepto básico, estudiando cada línea llegarás a entenderlo.  

Bye Bye



Etiquetas: