Actualización del antiguo código de Unity a Unity 5

El código para reproducir la animación en el botón de disparo no parece funcionar. Vi un video en Youtube y con una animation.Play(); simple. animation.Play(); funcionó en ese video, pero aún así, no pude hacerlo funcionar en mi computadora. ¿Qué hice mal o la unidad lo cambió? por favor ayuda No puedo encontrar una solución en la red. Toda la “solución no funciona tampoco”.

Este es el error que obtuve:

Escriba UnityEngine.Component no contiene una definición para jugar y no se puede encontrar ningún método de extensión Play del tipo UnityEngine.component

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class animationtrigger : MonoBehaviour { void Start() { } int speed = 10; // Update is called once per frame void Update () { if (Input.GetKeyDown("N")) { animation.Play("Cube|moving side"); //transform.Translate(1 * Vector3.forward * Time.deltaTime * speed); //Animator anim = GetComponent(); //if (null != anim) // { // anim.Play("Cube|moving side"); // } } } } 

¿Qué hice mal o la unidad lo cambió?

Unidad cambiada He visto preguntas similares en las últimas semanas. Aunque no creo que sean duplicados, tendría sentido responderlos aquí para futuras preguntas.

La variable de animation se define en Component como una variable public que MonoBehaviour hereda. Su código luego hereda de MonoBehaviour y usted tiene acceso a la animation .

Estas son la lista completa de variables de la clase Component que están en desuso:

 public Component animation { get; } public Component audio { get; } public Component camera { get; } public Component collider { get; } public Component collider2D { get; } public Component constantForce { get; } public Component guiElement { get; } public Component guiText { get; } public Component guiTexture { get; } public Component hingeJoint { get; } public Component light { get; } public Component networkView { get; } public Component particleEmitter { get; public Component particleSystem { get; } public Component renderer { get; } public Component rigidbody { get; } public Component rigidbody2D { get; } 

Nueva forma de acceder al componente adjunto al mismo script :

Use GetComponent() . Ponga en mayúscula la primera letra de esa variable para que sea su clase de componente. Una excepción es el audio que se convierte en AudioSource lugar de Audio.

1 . animation.Play("Cube|moving side"); se convierte en GetComponent().Play("Cube|moving side");

2 . rigidbody2D.velocity convierte en GetComponent().velocity

3 . rigidbody.velocity convierte en GetComponent().velocity

4 . renderer.material convierte en GetComponent().material

5 . particleSystem.Play() convierte en GetComponent().Play()

6 . GetComponent().bounds convierte en GetComponent().bounds

7 . GetComponent().bounds convierte en GetComponent().bounds

8 . audio.Play("shoot"); se convierte en GetComponent().Play("shoot");

9 . camera.depth convierte en GetComponent().depth

No tengo que ponerlos todos porque el ejemplo a continuación debería guiar a cualquiera a hacer esto. Estos son los componentes más solicitados y solicitados en SO.

Componente de caché :

Puede almacenar el componente en caché para que no tenga GetComponent cada vez.

 Animation myAnimation; void Start() { //Cache animation component myAnimation = GetComponent(); } void Update() { if(somethingHappens) { //No GetComponent call required again myAnimation.Play("Cube|moving side"); } } 

Si está usando un animador y quiere jugar un estado específico, puede hacer lo siguiente:

 animator.Play("stateName"); 

Lo veo en el código comentado a continuación. Eso debería estar funcionando. Si no ocurre nada, asegúrese de que el “Cubo | lado móvil” es un nombre ESTATAL y no el nombre ANIMACIÓN. También asegúrese de que el estado realmente contenga una animación, y que la animación realmente tenga datos de marco.

(A continuación, tengo 2 estados (Mover y Idle). El nombre de estado es “Mover” mientras que el nombre de la animación es “prueba”). enter image description here

Si quisiera cambiar al estado de movimiento, llamaría a animator.Play (“Move”) .

Además, no recomendaría estados de juego explícito. Si puede administrar, generalmente es mejor crear un árbol de estado y desencadenar animaciones usando parámetros. Usted ve en la imagen de arriba cómo tengo dos estados y transiciones entre ellos. Puede asignar parámetros que pueden hacer que mi animador cambie de uno a otro.

enter image description here

Aquí uso el “Ejemplo Anim Trigger” para hacer que el animador cambie del estado inactivo al movimiento. Podría hacer esto en código con:

 animator.SetTrigger("ExampleAnimTrigger"); 

Esta es la forma más moderna de usar animaciones de Unity, por lo que recomiendo encarecidamente que lo recoja.

¡Aquí está la documentación!