Noticias

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

Animacioón recarga...

Iniciado por ramunda, Julio 21, 2015, 08:29:38 AM

Tema anterior - Siguiente tema
Buenoooo, despues de la ayuda hace unas semanas he avanzado terriblemente bien en mi proyecto , gracias a todos de nuevo por las ayudas/ideas me fueron geniales. Pero...llego el parche using UnityEngine;
using System.Collections;
public class disparosyrecargos2 : MonoBehaviour {
public Rigidbody Bala;
public float Velocidad = 80;
public float municion = 10;
public Animation reload;
float municionderecargo = 10;
public float municiontotal = 200;
///public static float municiontotal = 150;
public disparosyrecargos2 MyScriptShoot;
public float Conteo = 0;
public GUIText guimuni;
public GUIText guitotal;
public GameObject destello;
//public GameObject manoanim;
public GameObject expulsabalas;
//GameObject municionanim;
//AudioClip sonido;
public AudioClip recarga;
public AudioClip gunShot;
public AudioClip vacio;
void Start (){

destello.active = false;
}

void Update (){

guimuni.text = "Balas " + municion.ToString();
guitotal.text = "Total Balas " + municiontotal.ToString();

    //if (Input.GetButton("Fire1")){
if(Input.GetMouseButtonDown(0)){   
        Conteo = Conteo + 1;
       
    if(Conteo > 1){
    
     Conteo = 0;
}   
    if(Conteo == 1 && municion > 0 && municiontotal >= 0){
          
        //var clona=Instantiate(Bala, transform.position, transform.rotation);
   //clona.velocity = transform.TransformDirection(Vector3(0, 0, Velocidad));
   Rigidbody clone;
   clone=Instantiate(Bala, transform.position, transform.rotation) as Rigidbody;
   clone.velocity = transform.TransformDirection(Vector3.forward * 400);
   municion -= 1;
         Destroy (clone,1.0f);
   GetComponent<AudioSource>().PlayOneShot(gunShot);
   //AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);//AudioListener.volume = 0.2f;
}
}
if(Input.GetKeyDown("r") && municiontotal > 0 && !Input.GetMouseButton(0) && !Input.GetMouseButton(1)){
reload.Play("reload");
municion = 0;
    Invoke ("recargando",2);
    AudioSource.PlayClipAtPoint(recarga, transform.position, 1);
 
}

if(Input.GetMouseButtonDown(0)){
///AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
destello.active = true;
}
else
if(Input.GetMouseButtonUp(0)){
//AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
destello.active = false;
}   
if (municion <= 0){
if(Input.GetMouseButtonUp(0)){
expulsabalas.SetActive(false);
AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
destello.active = false;
}   
}
}
void recargando (){

expulsabalas.SetActive(true);
if(municiontotal > 0){
municiontotal -= municionderecargo;
municion += municionderecargo;

}
if (municion > municionderecargo){
municion = municionderecargo;
}
}
Linea 7:public Animation reload; animación publica que me pide en el inspector que tengo en un gameobject , se la pongo.linea 55:reload.Play("reload"); le digo que me reproduzca despues de apretar al "r" la animación que tengo metidilla dentro de el gameobject que me lo reconoce como animación y se llama reload. por si las moscas y para descartar he puesto un animator....con esa animación tambien pero....ni errores ni animación. Ideas por favor? Gracias de antemanooooo

Mare de deu de senyor.... vaya longaniza de script....

Er si.. hahahhaa pero ya sabes , lo conseguí a base de mil pruebas y 4000 fracasos.....pot fer res?, :() 

Julio 21, 2015, 01:31:06 PM #3 Ultima modificación: Julio 21, 2015, 01:35:00 PM por cazagavilan
Hola!Falla la recarga de las balas en los digitos tambien o solo falla la animacion?Osea te hace el cambio de municion de (ejemplo): 0 a 100?Por ir descartando cosas xD

Nono la recarga la hace bien , se queda sin balas, y chasquea cundo no tiene y hasta que no aprietas la r no recarga ni dispara.Luego sigue disparado normalmente y descontando balas  Gracias !!   

Julio 21, 2015, 02:08:10 PM #5 Ultima modificación: Julio 21, 2015, 02:08:39 PM por Antonio
Animator no, si lo que estás intentando activar es una animación en legacy con el componente animation, lo que tienes que usar es el propio componente animation, el animator sobraría ahí.

En Animation reload, ¿estas poniendo el propio componente "animation" que hay en el game object? es decir, si el componente está en el mismo objeto donde está este script, eso significa que tendrías que arrastras el propio objeto sobre su variable reload en el inspector. (Es que no entendí si estás haciendo eso o si estás arrastrando otro).

Como usas el sistema de animación legacy, ¿estás seguro de que el modelo usa ese sistema (elige el modelo en la ventana de assets del proyecto, en el inspector, la 2º pestaña llamada "Rig", mira que esté puesto en modo legacy, no Generic ni Humanoid.

Estimado @Adngel, gracias por responder y si, la animación esta en legacy, y el objeto con la animación lo arrastro en el ispector como dijistes. Aquí te dejo unas screens para que veas lo que digo y te agas la idea.  



Julio 21, 2015, 06:23:51 PM #7 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
El nombre de la animación es "Reload" en vez de "reload", ¿puede ser eso? 
 
reload.Play("Reload"); 

Acababa de verlo, porque me tiro un fallo en el script, lo cambie para probar cosas ya esta puesto bien el nombre y.... sin cambios , no hace nada...ni errores ni nada pero la animación no se ejecuta (

Julio 21, 2015, 06:56:18 PM #9 Ultima modificación: Julio 21, 2015, 06:57:16 PM por Antonio
Hola Ramunda, he probado el script, reduciendo las cosas que no tengo pero dejando sólo la animación, y me funciona correctamente.
  
using UnityEngine;
using System.Collections;
public class disparosyrecargos2 : MonoBehaviour {
public Rigidbody Bala;
public float Velocidad = 80;
public float municion = 10;
public Animation reload;
float municionderecargo = 10;
public float municiontotal = 200;
///public static float municiontotal = 150;
public disparosyrecargos2 MyScriptShoot;
public float Conteo = 0;
public GUIText guimuni;
public GUIText guitotal;
public GameObject destello;
//public GameObject manoanim;
public GameObject expulsabalas;
//GameObject municionanim;
//AudioClip sonido;
public AudioClip recarga;
public AudioClip gunShot;
public AudioClip vacio;
void Start (){
   
   //destello.active = false;
}

void Update (){
   
   /*guimuni.text = "Balas " + municion.ToString();
   guitotal.text = "Total Balas " + municiontotal.ToString();*/
   
   //if (Input.GetButton("Fire1")){
   /*if(Input.GetMouseButtonDown(0)){   
      Conteo = Conteo + 1;
      
      if(Conteo > 1){
         
         Conteo = 0;
      }   
      if(Conteo == 1 && municion > 0 && municiontotal >= 0){
         
         //var clona=Instantiate(Bala, transform.position, transform.rotation);
         //clona.velocity = transform.TransformDirection(Vector3(0, 0, Velocidad));
         Rigidbody clone;
         clone=Instantiate(Bala, transform.position, transform.rotation) as Rigidbody;
         clone.velocity = transform.TransformDirection(Vector3.forward * 400);
         municion -= 1;
         Destroy (clone,1.0f);
         GetComponent<AudioSource>().PlayOneShot(gunShot);
         //AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);//AudioListener.volume = 0.2f;
      }
   }*/
   if(Input.GetKeyDown("r") && municiontotal > 0 && !Input.GetMouseButton(0) && !Input.GetMouseButton(1)){
      reload.Play("Reload");
      //municion = 0;
      Invoke ("recargando",2);
      //AudioSource.PlayClipAtPoint(recarga, transform.position, 1);
      
   }
   
   /*if(Input.GetMouseButtonDown(0)){
      ///AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
      destello.active = true;
   }
   else
   if(Input.GetMouseButtonUp(0)){
      //AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
      destello.active = false;
   }   
   if (municion <= 0){
      if(Input.GetMouseButtonUp(0)){
         expulsabalas.SetActive(false);
         AudioSource.PlayClipAtPoint(vacio, transform.position, 1);
         destello.active = false;
      }   
   }*/
}
void recargando (){
   
   /*expulsabalas.SetActive(true);
   if(municiontotal > 0){
      municiontotal -= municionderecargo;
      municion += municionderecargo;
      
   }
   if (municion > municionderecargo){
      municion = municionderecargo;
   }*/
}
}
[/quote]¿Puede ser un problema de la animación en si?, se me ocurre in tentar probarla en otro objeto a ver qué le puede pasar.

Adngel, gracias de nuevo por el interes, he provado lo que me has dicho , he puesto la animación Reload en un objeto vacio nuevo......la he arrastrado a su casilla y nada sigue igual sin dar fallo pero sin ejecutarse. Con que animación has provado tu?, esque estoy por tirarme a un pozo :), y has usado dices mi mismo script?, no lo entiendo.... Aver explicare mas detalles...este script el que tu tienes y yo he puesto, esta metido en Bocaarma que es el cubo de donde sale todo las balas el diaparo etc....mi jugador tiene unas manos puestas con su pistolita su recoil y tal. Y este dichoso anim que no funciona XDD espero que tengas mas ideas....o si no te es molestia súbeme una animación que te funcione aver si ami tambien me resulta esque no se que hacer  
te dejo el link de donde pille el arma y las animaciones el script no lo use.He probado con otra animación....no funciona igualmente pero veo que el puntero de el mouse parpadea como si algo pasara y yo n lo viera...no tendra que ver que le tenemos que dar unos segundos o algo asi??En fil el packhttps://mega.nz/#!1EkhgThJ!3jA_HjJAHPSwQsQPSVyLCaHQTMBgy9ayJxgJpKhXOEU" rel="external nofollow">https://mega.nz/#!1EkhgThJ!3jA_HjJAHPSwQsQPSVyLCaHQTMBgy9ayJxgJpKhXOEU    

Julio 21, 2015, 07:44:41 PM #11 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
La animación que he usado, pues es una que he hecho sin pensar mucho con el animador de Unity (Ctrl+6) ahí creé una animación llamada Recargar, y roté algunos huesos de mi personaje para reconocerla.

Después, esa animación, la puse dentro del componente animation, y el componente animation, dentro de la variable Reload de tu script. (Como se ve en tu captura). Pensando, a ver si lo que necesitas es ponerle el componente Animation a tu objeto "Arms" que es el modelo que se anima, y de ahí, pasarlo a la variable Reload del script del objeto bocarama. O.ò

Si no, intenta eso, crear una animación para el objeto Arms en el Ctrl+6 o en 3ds max o donde ves más cómodo (algo rápido, estirar un brazo o cualquier cosa). A ver si es que es problema de la animación en sí.

Si es Legacy, necesito saber los nombres y jerarquía de los huesos de tu objeto Arms para poder hacer una animación que sirva en él.

 

Julio 21, 2015, 08:21:21 PM #12 Ultima modificación: Julio 21, 2015, 09:25:33 PM por ramunda
Aver he echo una cosa ...he cojido el arma y los brazos que estan juntos y he creado una animación ctrl+6 , muy basica arriba y abajo ok? La cosa esque me ha creado un controller y la animación bien, esto es nuevo   si arrastro la animación a el inspector me crea un animator que lleva la animación que he creado.....Pero esto no puedo arrastrarlo a ninguna parte....Vale, algo he hecho no lo que queria..pero algo , he puesto la animación en un Animator, he arrastrado el controller a el inspector...y bueno cuando coje el arma se ejecuta seguidamente la animación que he grabado...pero solo hace eso anula todo y solo se mueve arriba y abajo XD Vale i si lo enfocamos de otra manera....como seria para llamar a una animación en c#? GetComponent<animator>(); algo asi??? Siguiendo tus pasos:He creado animación , la he puesto en legacy, tengo la animación que se llama ahora : armamueve y el animator o controller o como se diga que se llama:. bocaarma ,meta donde lo meta no anima. mando foto!!y....he puesto la animación dentro de un empty y la he cargado en el inspector.....y nanay de la china       


Julio 21, 2015, 09:28:32 PM #13 Ultima modificación: Julio 21, 2015, 09:31:03 PM por Antonio
Unity tiene 2 sistemas de animaciones (bueno, 3, pero sin mucho lio) Mecanim y Legacy.

Legacy es el original, se controla mayormente mediante scripts y para utilizarlo, necesitas el componente "Animation".

Mecanim es el nuevo sistema que incorporaron con Unity 4, es al que le dan soporte ahora y tiene varias cosas que lo hacen interesante, aunque se controla mayormente mendiante gráficos y modificación de varialbes, para ello, se usa el componente "Animator".

Son dos compenente diferentes para dos sistemas diferentes, no deberían tener que mezclarse.

Al crear una animación en un objeto (Ctrl+6), cuando no tienen ninguna, Unity automáticamente le crea un pequeño sistema para que la animación se pueda autoejecutar al pulsar play, en un juego esto lo quitarías y lo adaptarías para tu código, pero bueno a lo mejor para testear la animación o una flyby camera, pues viene bien. Ahora. la cosa es que ese sistema que crea, lo hace en base al sistema de animación del objeto. Si el objeto está en Legacy, unity automáticamente debería haber añadido un Animation y haber organizado las cosas por ahí, el hecho de que le ponga un Animator y le cree un controller para ejecutar la animación, es una pista de que algo no esta bien con ese objeto. XD
(Si es un objeto de mecanim, por muchas instrucciones de animation que le mandemos, no se moverá).


A ver, para animar algo en Legacy, lo básico sería:
 
using UnityEngine;

public class animationTest : MonoBehaviour
{
public Animation anim;

void Start ()
    {
        anim = GetComponent<Animation>();
    }

void Update ()
{
   if(Input.GetKeyDown("r"))
   {
      anim.Play("Reload");
   }
}
}
Esto se pondría en un gameobject cuyos hijos sean, mesh renderers, y huesos. El objeto también tiene que tener el componente Animation, y dicho compenente, tiene que tener la animación a ejecutar, en la lista, (no hace falta que esté en ejecutar automáticamente, sólo tiene que estar en la lista). La animación que se le aplica, al ser de Legacy, tiene que se una animación de ese objeto (una que tenga una jerarquía de huesos similar y con los mismos nombres). Pero el modelo, en la pestaña rig tiene que ser Legacy. 



 

Vale, he simplificado y leido atentamente lo que me has dicho.He cojido la pistola, le he creado una animación.....pero la pistola no es legacy ni es nada XDDD es un objeto sin mas el cual le he creado una animación y ...se ha vuelto a crear una animación y un Mecanim de esos qu ecomentas, si cojo la animación a solas la convierto en legacy.....bastara?, le pondre el animation....la pondre dentro...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA FUNCIONA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!TIO!!! TE QUIEROOOO has tenido la paciencia , las ganas y el aguante!!!, y te has explicado como una enciclopedia!!! y la cosa ahora funciona!!!1 Espera repasemos hahahhah que demonios he echo ... aver docuemntare para posibles vistas de este milagro... He creado una animación desde 0 de el arma...que a la vez lleva los brazos pegados.Al terminarla me ha creado 2 archivos:un mecanim y una animación.A la animación la he convertido en Legacy:Como lo he echo:seleccionas la animación en si, vas arriba derecha de el inspector alli hay un canadadito y unas rayitas, pues las rayitas cambias el estado de Normal a Debug,Se despliegan opciones y alli un cuadrito que pone "Legazy" lo seleccionas lo pones en normal de nuevo y yata.Seguidamente, he puesto un Animator a la pistola, la cual hemos creado la animacion....y dentro de el la animación    A    

Etiquetas: