Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Detectar cambio de animación en Animator (Unity 4.6)

Iniciado por Ítizhor, 07 de Junio de 2015, 03:22:03 AM

« anterior - próximo »

Ítizhor

¡Hola!

Veréis, llevo ya varias semanas rompiéndome la cabeza con lo mismo, y por más que busco, nada. El caso es que tengo un objeto que empieza con una animación, y la idea es que al entrar en contacto con otro en particular salte (cambie) una variable booleana en el Animator y, suponiendo el estado "true" al que cambia la condición de transición, cambiar la animación.
Básicamente: colisión de trigger -> cambio de booleano -> transición de animación.

El script es el siquiente:

using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour
{
   Animator explosion;

   // Connect to the animator
   void awake ()
   {
      explosion = GetComponent<Animator> ();
   }

   // Detect the impact
   void OnTriggerEnter2D (Collider2D other)
   {
      if (other.gameObject.tag == "Missile")
      {
         Debug.Log ("Set explosion");
         explosion.SetBool ("Impact", true);
         // Explosion sound
         Destroy (other.gameObject);
      }
   }
}


La consola reporta el "Set explosion" del Debug.Log, así que queda confirmado que sí se detecta la colisión con el trigger. Ahora bien, al ejecutar explosion.SetBool ("Impact", true); (siendo "Impact" la variable del Animator) me sale el error

NullReferenceException: Object reference not set to an instance of an object
Explosion.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/Scripts/Explosion.cs:20)
.

He buscado tanto sobre el error en concreto como sobre temas como el uso de animaciones, pero sigo igual de encasquillado. Se supone que estoy haciendo referencia a algo que no existe... pero no entiendo por qué  ^_^'.
¿Alguna sugerencia?

Muchas gracias de antemano,
Ítizhor.

Darago_malaga

#1
Por ir eliminando cosas...

1) Has comprobado que realmente la linea que falla es: explosion.SetBool ("Impact", true); ? (eliminala o comentala con //)

2) Has probado a cambiar momentáneamente la linea

explosion.SetBool ("Impact", true);

por

GetComponent<Animator> ().SetBool ("Impact", true);

?


Ítizhor

#2
Madre mía, Darago... ¿Cómo lo haces? Ya son tres veces (si no me equivoco) las que me sacas sin despeinarte de un apuro que me tenía arrinconado contra el muro de la desesperación. De nuevo, tu sabio consejo ha disuelto mi problema como el agua el azúcar, ¡rápidamente y con un final dulce!

Pronto tendré que empezar a pagarte, lo sé. ¿Aceptas oros de Azeroth, rupias de Hyrule, favs en alguna red social...?  ;)

Otra vez, gracias.
Ítizhor.

FANatiko

Si lo que te dice Dargo ha funcionado, lo que tiene pinta es que debas inicializar el animator en el OnEnable o, al menos, en OnStart.

En vez de usar una variable booleana tienes los Trigger que vienen a servir precisamente para eso.

Darago_malaga

Aqui estamos para eso. Es lo que tiene la comunidad. A la vez que solucionamos problemas todos aprendemos algo.

No dudes en pasarte por aqui si te surge algo o para enseñar tus progresos.

El pago sera en cerbecitas si alguna vez nos vemos por algun evento.

Fanatiko!!! Yo la verdad es que nunca uso el awake()...casi siempre solo uso el start()






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.