Jump to content
RankDown

Script de mivimiento al pasar por un sitio

Recommended Posts

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.:D

Share this post


Link to post
Share on other sites

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.:D

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.

por último, pero muy importante es que el personaje este configurado con el sistema legacy en el import, el componente Animator no funcionará con este script si no el componente Animation, el Animator es del sistema mecanim, y el Animation es del sistema legacy. 

Por cierto el objeto o personaje que posee este script, debe poseer un collider con isTrigger activado... no recomendable si no deseas que atraviese suelo y paredes.

Edited by Oak Human Flesh
Teléfono cambiar palabras xD

Share this post


Link to post
Share on other sites

Pero 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: Puerta

trigger: script

 

y me da este error:, a ver si me puedes ayudar xD.

 

Un saludo.

error.thumb.png.cf85a502afe0244a98981a5543018925.png

Share this post


Link to post
Share on other sites

Vale, hay un pequeño vacío de conceptos aquí... jaja

Tu 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");

 

Share this post


Link to post
Share on other sites

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.

Edited by Oak Human Flesh

Share this post


Link to post
Share on other sites

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.

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.error.thumb.png.cf85a502afe0244a98981a55

Vale, hay un pequeño vacío de conceptos aquí... jaja

Tu 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");

 

Meda errores y por si acaso, estoy en unoty 4.x xD

Share this post


Link to post
Share on other sites

Hola mi script es solo una muestra, el resto debes hacerlo por tu cuenta:huh:.

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.

 

 

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...