Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Abramelin en Enero 05, 2016, 06:54:55 AM

Título: animator speed
Publicado por: Abramelin en Enero 05, 2016, 06:54:55 AM
var animator : Animator;

function Start()
{
animator = GetComponent.<Animator>();
}
   
function Update()
{
animator = GetComponent.<Animator>();

if(Input.GetButtonDown("accion")){
           
            animator.speed -= 5;
}
if(Input.GetButtonDown("Jump")){
           
            animator.speed += 5;
}
}      
   
Al darle a Play, el recuadro donde se arrastra el GameObject que contiene el animator se queda vacio, como si no lo reconociera. ¿que veis en la forma de acceder al componente que sea erroneo? he duplicado esta linea a update porque pensaba que necesitaba chequearla constantemente pero no parece que sea de eso.
animator = GetComponent.<Animator>();
Título: animator speed
Publicado por: brok en Enero 05, 2016, 05:48:49 PM
Esa linea tiene que solo en el Start
Título: animator speed
Publicado por: ACarranza en Enero 05, 2016, 09:38:29 PM
 tu script esta parcialmente bien, como te dice brok quita el getcomponent del update y dejalo en el star y luego tienes  2 opciones:1. si estas arrastrando un GameObject con su Animator y es el que quieres mani***r, quita de todas partes  animator = GetComponent.<Animator>();2. si no quieres arrastrar el GameObject coloca el script al GameObject que tiene el Animator. te explicare lo que pasa , solo es cuestion de que comprendas cual es el funcionamiento de Getcomponent Resumido:en pocas palabras, asignaste en el editor un animator ajeno al gameobject del script , al iniciar start el script trata de acceder al componente Animator del gameobject del script, como no hay lo deja vacio, lo mismo en el update. Un Poco mas Explicado:GetComponent te permite obtener el componente del GameObject que tiene el script.Ahora tu estas diciendo que arrastras un GameObject con un componente tipo Animator y lo que quieres hacer en el update es mani***r Speed de ese Animator, ahi todo bien.el problema esta en que el script hace es asignar a la variable animator el componente Animator del GameObject que tiene el script, entonces como no ha de tener ninguno, por eso lo deja vacio por que no hay componente a que acceder, aun de todos modos que tu hayas colocado un Animator ajeno.  
Título: animator speed
Publicado por: Abramelin en Enero 06, 2016, 01:56:21 AM
Quitando esa linea en cuestión si me deja arrastrar el animator, pero no he conseguido modificar la velocidad, he probado de varias formas y al final he tirado de chapucerio...He creado 5 estados en el animator, cada animacion con su velocidad correspondiente, del 1 al 5. Esta es la pajarraca que he liado, pero al final he consegudio hacer lo que queria, no sin dar tropecientasmil vueltas al animator.speed sin resultado:
var animator : Animator;
var teclasound : AudioClip;
var estado : int = 5;

function Update(){

if (estado > 5){
estado = 5;
}
if (estado < 1){
estado = 1;
}

if (estado == 1){
animator.SetBool("lento1", true);
animator.SetBool("lento2", false);
animator.SetBool("lento3", false);
animator.SetBool("lento4", false);
animator.SetBool("lento5", false);
}
if (estado == 2){
animator.SetBool("lento2", true);
animator.SetBool("lento1", false);
animator.SetBool("lento3", false);
animator.SetBool("lento4", false);
animator.SetBool("lento5", false);
}
if (estado == 3){
animator.SetBool("lento3", true);
animator.SetBool("lento2", false);
animator.SetBool("lento1", false);
animator.SetBool("lento4", false);
animator.SetBool("lento5", false);
}
if (estado == 4){
animator.SetBool("lento4", true);
animator.SetBool("lento2", false);
animator.SetBool("lento3", false);
animator.SetBool("lento1", false);
animator.SetBool("lento5", false);
}
if (estado == 5){
animator.SetBool("lento5", true);
animator.SetBool("lento2", false);
animator.SetBool("lento3", false);
animator.SetBool("lento4", false);
animator.SetBool("lento1", false);
}
if(Input.GetButtonDown("accion")){
            GetComponent.<AudioSource>().PlayOneShot(teclasound);
            estado += 1;
           
}
if(Input.GetButtonDown("Jump")){
            GetComponent.<AudioSource>().PlayOneShot(teclasound);
            estado -= 1;
           
}
}      
   
es un poco chapuza pero me hace lo que tenia pensado, aunque por otra parte es una ***da no saber acceder al animator.speed y tener que liar estas rayadas...
Título: animator speed
Publicado por: ACarranza en Enero 06, 2016, 02:28:16 AM
igual platica un poco lo que quiers hacer y en realidad no ocupas declarar tantos booleanos si lo que quieres es manipuar la velodidad del animator esta realmente sencillo. llegando a casa te hago una muestra, saludos  
Título: animator speed
Publicado por: yugosama en Enero 06, 2016, 05:14:37 AM
componente animator... te tengo malas noticias: la variable speed en animator es de solo lectura o al menos asi lo era en el 4.5 (no uso version 5, no se si en esa version tambien sea de solo lectura) en la referencia no aparece especificamente que sea read only pero tratando de hacer lo que tu intentas (modificar la velocidad de una animacion en tiempo real) y no poder le di vueltas a los foros oficiales de unity y alli descubri que de momento speed solo esta implementado como solo lectura pero que en alguna version posterior sera modificable via script, te comento esto se aplica a version 4.6 que yo uso no se si alguna version posterior o en 5 ya se cambio eso... por eso sigo usando legacy en vez de mecanim
Título: animator speed
Publicado por: ACarranza en Enero 06, 2016, 07:59:11 PM
Claro que se puede modificar la velocidad del Animator, ya lo he hecho, desde antes de la version 4.6 se puede. 
Título: animator speed
Publicado por: Abramelin en Enero 07, 2016, 05:55:54 AM
Estoy en unity 5.2, si se pudiera hacer me ahorraría todos esos estados en el animator para futuras mecánicas similares. Le di mil vueltas al animator.speed pero como mi conocimiento en programación es muy limitado solo se me ocurrió crear distintos estados con distintas velocidades, si consigues averiguar como se hace postealo por aquí para salir de dudas.