Zoeken…


Basisanimatie voor hardlopen

Deze code toont een eenvoudig voorbeeld van animatie in Unity.

Voor dit voorbeeld moet u 2 animatiefragmenten hebben; Rennen en inactief. Die animaties moeten stand-in-place-bewegingen zijn. Nadat de animatiefragmenten zijn geselecteerd, maakt u een Animator-controller. Voeg deze controller toe aan de speler of het spelobject dat u wilt animeren.

Open het Animator-venster vanuit Windows. Sleep de 2 animatiefragmenten naar het Animator-venster en er worden 2 staten gemaakt. Eenmaal gemaakt, gebruik het linker parameter tabblad om 2 parameters toe te voegen, beide als bool. Noem er een als "PerformRun" en de andere als "PerformIdle". Stel "PerformIdle" in op true.

Maak overgangen van inactieve status naar Uitvoeren en Uitvoeren naar inactieve (zie de afbeelding). Klik op Niet actief-> Overgang uitvoeren en schakel in het venster Inspector HasExit uit. Doe hetzelfde voor de andere overgang. Voor Idle-> Run transition, voeg een voorwaarde toe: PerformIdle. Voeg voor Run-> Idle een voorwaarde toe: PerformRun. Voeg het onderstaande C # -script toe aan het spelobject. Het moet met animatie worden uitgevoerd met de knop Omhoog en roteren met de knoppen Links en Rechts.

using UnityEngine;
using System.Collections;

public class RootMotion : MonoBehaviour {

//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;


Animator animator;

void Start()
{
    /**
    * Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
    */
    animator = GetComponent<Animator>();
}

void Update()
{
    /**
    * The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
    * Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
    */
    
    if (Input.GetKey (KeyCode.UpArrow)) {
            animator.SetBool ("PerformRun", true);
            animator.SetBool ("PerformIdle", false);
        } else {
            animator.SetBool ("PerformRun", false);
            animator.SetBool ("PerformIdle", true);
        }
}

void OnAnimatorMove()
    {
        /**
         * OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined 
         * using this fucntion.
         */
        if (Input.GetKey (KeyCode.UpArrow)){
            transform.Translate (Vector3.forward * RunSpeed);
            if (Input.GetKey (KeyCode.RightArrow)) {
                transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
            }
            else if (Input.GetKey (KeyCode.LeftArrow)) {
                transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
            }
        }

    }


   
}

voer hier de afbeeldingsbeschrijving in

Animatieclips maken en gebruiken

In dit voorbeeld wordt getoond hoe animatiefragmenten voor spelobjecten of spelers moeten worden gemaakt en gebruikt.

Let op, de modellen die in dit voorbeeld worden gebruikt, worden gedownload van Unity Asset Store. De speler is gedownload via de volgende link: https://www.assetstore.unity3d.com/en/#!/content/21874 .

Om animaties te maken, opent u eerst het animatievenster. U kunt het openen door op Venster te klikken en Animatie selecteren of Ctrl + 6 te drukken. Selecteer in het hiërarchievenster het spelobject waarop u de animatiefragment wilt toepassen en klik vervolgens op de knop Maken in het animatievenster.

voer hier de afbeeldingsbeschrijving in

Geef je animatie een naam (zoals IdlePlayer, SprintPlayer, DyingPlayer etc.) en sla deze op. Klik nu in het animatievenster op de knop Eigenschap toevoegen. Hiermee kun je de eigenschap van het spelobject of de speler met betrekking tot de tijd wijzigen. Dit kan Tranforms omvatten, zoals rotatie, positie en schaal en elke andere eigenschap die aan het spelobject is gekoppeld, bijvoorbeeld Collider, Mesh Renderer etc.

voer hier de afbeeldingsbeschrijving in

Om een lopende animatie voor een spelobject te maken, hebt u een humanoïde 3D-model nodig. U kunt het model downloaden via de bovenstaande link. Volg de bovenstaande stappen om een nieuwe animatie te maken. Voeg een eigenschap Transform toe en selecteer Rotatie voor een van de tekenpoten.

voer hier de afbeeldingsbeschrijving in

Op dit moment zouden uw Play-knop en Rotation-waarden in de eigenschap van het spelobject rood zijn geworden. Klik op de vervolgkeuzepijl om de X-, Y- en Z-waarden voor rotatie te bekijken. De standaard animatietijd is ingesteld op 1 seconde. Animaties gebruiken keyframes om tussen waarden te interpoleren. Om te animeren, voegt u sleutels op verschillende tijdstippen toe en wijzigt u de rotatiewaarden vanuit het Inspectievenster. Bijvoorbeeld, de rotatiewaarde op tijdstip 0,0s kan 0,0 zijn. Op tijdstip 0,5 s kan de waarde 20,0 zijn voor X. Op tijdstip 1,0 s kan de waarde 0,0 zijn. We kunnen onze animatie om 1.0 sec beëindigen.

De lengte van uw animatie is afhankelijk van de laatste toetsen die u aan de animatie toevoegt. U kunt meer toetsen toevoegen om de interpolatie soepeler te maken.

2D Sprite-animatie

Sprite-animatie bestaat uit het weergeven van een bestaande reeks afbeeldingen of frames.

Importeer eerst een reeks afbeeldingen naar de activamap. Maak een aantal afbeeldingen helemaal opnieuw of download enkele afbeeldingen uit de Asset Store. (Dit voorbeeld gebruikt dit gratis activum .)

animatie sprites geselecteerd

Sleep elke individuele afbeelding van een enkele animatie van de map Activa naar de scèneweergave. Unity toont een dialoogvenster voor het benoemen van de nieuwe animatieklem.

dialoogvenster met animatienaam

Dit is een handige snelkoppeling voor:

  • nieuwe spelobjecten maken
  • twee componenten toewijzen (een Sprite Renderer en een Animator)
  • animatieregelaars maken (en de nieuwe Animator-component eraan koppelen)
  • animatiefragmenten maken met de geselecteerde frames

de nieuwe game-objectinspecteur die de nieuwe componenten toont

Bekijk een voorbeeld van het afspelen op het tabblad Animatie door op Afspelen te klikken:

2D animatie voorbeeld

Dezelfde methode kan worden gebruikt om nieuwe animaties voor hetzelfde spelobject te maken en vervolgens het nieuwe spelobject en de animatiecontroller te verwijderen. Voeg de nieuwe animatieflip toe aan de animatiecontroller van dat object op dezelfde manier als bij 3D-animatie.

Animatiecurven

Met animatiekrommen kunt u een zwevende parameter wijzigen terwijl de animatie wordt afgespeeld. Als er bijvoorbeeld een animatie met een lengte van 60 seconden is en u een floatwaarde / parameter wilt, noem deze X om door de animatie te variëren (zoals bij animatietijd = 0,0s; X = 0,0, bij animatietijd = 30,0s; X = 1.0, bij animatietijd = 60.0s; X = 0.0).

Zodra u de floatwaarde hebt, kunt u deze gebruiken om te vertalen, roteren, schalen of op een andere manier gebruiken.

Voor mijn voorbeeld zal ik een spel met een spelersspel laten zien. Wanneer de animatie voor uitvoeren wordt afgespeeld, moet de vertaalsnelheid van de speler toenemen naarmate de animatie vordert. Wanneer de animatie zijn einde bereikt, zou de vertaalsnelheid moeten afnemen.

Ik heb een lopende animatiefragment gemaakt. Selecteer de clip en klik vervolgens in het infovenster op Bewerken.

voer hier de afbeeldingsbeschrijving in

Blader daar eenmaal naar Curven. Klik op het + -teken om een curve toe te voegen. Geef de curve een naam, bijvoorbeeld ForwardRunCurve. Klik op de miniatuurcurve rechts. Het opent een klein venster met een standaardcurve erin.

voer hier de afbeeldingsbeschrijving in

We willen een parabolisch gevormde curve waar deze stijgt en vervolgens daalt. Standaard zijn er 2 punten op de lijn. U kunt meer punten toevoegen door te dubbelklikken op de curve. Versleep de punten om een vorm te maken die lijkt op de volgende.

voer hier de afbeeldingsbeschrijving in

Voeg de lopende clip toe in het animatievenster. Voeg ook een float-parameter toe met dezelfde naam als de curve, dwz ForwardRunCurve.

Wanneer de animatie wordt afgespeeld, verandert de floatwaarde volgens de curve. De volgende code laat zien hoe de float-waarde moet worden gebruikt:

using UnityEngine;
using System.Collections;

public class RunAnimation : MonoBehaviour {

Animator animator;
float curveValue;

void Start()
{
    animator = GetComponent<Animator>();
}

void Update()
{
    curveValue = animator.GetFloat("ForwardRunCurve");

    transform.Translate (Vector3.forward * curveValue);
}

}

De curveValue variabele houdt op elk willekeurig moment de waarde van de curve (ForwardRunCruve) vast. We gebruiken die waarde om de snelheid van de vertaling te wijzigen. U kunt dit script aan het spelobject van de speler koppelen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow