Animere en Merry

Animating en Merry-Go-Round bruker uttrykk i Maya 2009

animere bruker uttrykk kan være en stor tidsbesparende, spesielt når det gjelder mekaniske objekter som en merry-go-round! I denne opplæringen, går Stephen Ko oss gjennom en enkel uttrykk-basert prosjekt, lage et enkelt brukergrensesnitt med glidere å kontrollere de ulike delene av sin modell. La oss komme i gang



Tilleggsfiler /Plugins:

Last ned prosjektfiler for denne opplæringen


Trinn 1

La oss begynne! Først åpen Maya, og hvis du ønsker å følge med nøyaktig, åpne scene-filen som følger.



Trinn 2

Jeg skal kort beskrive min modell før vi starter . Jeg har delt modellen inn i 2 deler: merry_go_round_move Hotell og merry_go_round_stage
. Alle hestene er gruppert inne i merry_go_round_move
gruppe, og er oppkalt GRP_Horse1
til GRP_Horse12
.



Trinn 3
< p> nå forstår vi modellen, kan begynne å skrive våre uttrykk. Start med å gå til Vindu > Animasjon Editors > Expression Editor.


Trinn 4

Expression Editor
er delt inn i utvalget delen og uttrykket delen. Etter ferdig med å skrive noe i uttrykket delen vi nevne uttrykket i Expression Navn
feltet, og klikk deretter på "Create" -knappen for å lagre uttrykket. Det vil da dukke opp i utvalget delen klar til bruk, tilbakekalt eller redigeres

MERK: Hvis du ikke kan se de uttrykkene du oppretter, gå til Velg Filter > Ved Expression navn.. Dette vil vise alle uttrykkene du tidligere har opprettet, organisert etter sitt navn (som er grunnen til at navngi våre uttrykk er så veldig viktig!)



Trinn 5

Først av alt, vi trenger å rotere merry_go_round_move
gruppe. Skriv inn følgende i uttrykket seksjonen:
merry_go_round_move.rotateY = merry_go_round_move.rotateY-en;

Nå gi uttrykk et navn, og trykk på Opprett
å lagre det. Så hva er denne koden gjør? Vel på hvert enkelt bilde av vår animasjon, vil dette uttrykket se på merry_go_round_move
konsernets nåværende Y
rotasjon, trekke en fra det, og gjør at den nye rotasjons Y
verdi. Det er lett å se at så dette gjentas på hver ramme som vi spiller gjennom vår animasjon, vil gruppen sakte men sikkert rotere i Y
retning, med en hastighet på 1 grad hver ramme. Som ikke er helt rask nok

NB: Denne modellen er designet for å rotere med klokken, og det er derfor vi trekke en grad fra Y
rotasjon verdi på hver ramme. Hvis vi lagt en grad på hver ramme i stedet, ville konsernet rotere i motsatt retning!



Trinn 6

For å gi oss mer kontroll over rotasjonshastighet Vi re kommer til å legge en ny attributt til gruppen. For å gjøre dette, velger du først merry_go_round_move
gruppe, og deretter i kanalen boksen klikker du på Rediger > Legg Egenskap

I Legg Egenskap
dialogboksen legger i innstillingene som vises i bildet nedenfor.

  • Long navn: Dette er navnet på vår nye attributt

    data~~POS=TRUNC:.. Innstilling av datatype til flyter tillater oss å bruke tall med desimaler (for eksempel 1,7) for rotateSpeed ​​verdi


    Minimum: Dette er den minste verdien vi vil gi rom for vår rotateSpeed ​​

    Maksimum:.. Dette er den største verdien vi vil tillate


    standard:. Endelig, dette er standardverdien for attributtet


    Trinn 7

    Hvis du klikker OK
    vil du se at vår nye attributt er på plass på bunnen av boksen kanaler. Men akkurat nå er det ikke er koblet til noe og derfor ikke har noen effekt på hastigheten på vår rotasjon. For å koble den opp, må vi gå tilbake til uttrykket redaktør og redigere vår uttrykk. Så åpner uttrykk redaktør, velg din uttrykk fra utvalget delen, og endre den til:
    merry_go_round_move.rotateY = merry_go_round_move.rotateY -merry_go_round_move.rotateSpeed;

    Nå må du klikke på den nye Rediger
    knappen som har erstattet den Opprett
    knappen nederst i vinduet. Dette lagrer eventuelle endringer du har gjort i ditt uttrykk.

    Som du ser har vi erstattet -1
    verdi med en link til vår nye merry_go_round_move.rotateSpeed ​​
    attributt, men hva betyr dette? Vårt nylig endret uttrykk vil nå trekke uansett verdi vi satt i rotateSpeed ​​
    kanal fra vår gruppe Y
    rotasjon verdi, på hver ramme.

    For eksempel, tenk deg vår < em> rotateSpeed ​​
    verdi er 1. på hver ramme, vår gruppe Y
    rotasjon verdien reduseres med samme verdi - 1 grad. Hvis vi skulle øke vår rotateSpeed ​​
    verdien til 10
    , rotasjonen verdien vil reduseres med 10 grader på hver ramme - med andre ord vil det rotere 10 ganger raskere! Vi kunne også stoppe det roterende helt ved å sette merry_go_round_move.rotateSpeed ​​
    til 0.



    Trinn 8

    Mens endre verdier i kanal Box er relativt enkelt, det kan være morsomt for oss å sette sammen et helt grunnleggende GUI som vi kan styre merry-Go-Round. Mens dette ikke er et omfattende Maya UI opplæringen, bør dette gi deg nok informasjon for deg å begynne å eksperimentere litt!

    Vi kommer til å lage et enkelt vindu, som inneholder en skyveknapp som skal styre vår rotateSpeed ​​attributt . Så begynne med å åpne Script Editor
    ved å gå til Window > Generelle Editors > Script Editor, eller ved å klikke på -knappen Script Editor
    nederst til høyre på Maya-vinduet. Når åpnet, skriver du følgende inn i boksen:
    vindu -title "Controls" -Bredde 400 -Høyde 200; frameLayout -collapsable sant label "Merry-go-round"; columnLayout; floatSliderGrp-label "Speed" Felt sant -minValue 0 -maxValue 5 hastighet; connectControl hastighet merry_go_round_move.rotateSpeed, setParent ..; Showwindow;

    Ok, la oss ta en titt på det linje for linje. Denne første delen oppretter et nytt UI vindu 400x200px i størrelse, og setter tittellinjen for å vise tekst Controls
    . Det vises ikke ennå men som vi har å spesifikt fortelle det vise senere i koden
    vindu -title "Controls" -Bredde 400 -Høyde 200;.

    Denne delen av koden legger noe som kalles en layout innsiden av vinduet vårt. I hovedsak en layout er nødvendig for at du skal legge glidere og knapper inn i GUI, og dette, som en Frame
    layout, vil legge en ramme rundt alt som vi legger på innsiden av det. Du vil merke at vi har også lagt til en etikett som heter Merry-go-round
    , og setter rammen for å være collapsable
    , noe som betyr at vi kan brette opp våre glidere for ryddighet hvis vår GUI blir mer komplisert lenger ned linjen
    frameLayout -collapsable sant label "merry-go-round";.

    Denne linjen legger til en annen layout i vår ramme layout. Hvorfor? En kolonne layout er veldig
    nyttig for raskt og enkelt å legge til kontroller den ene over den andre inn i UI, og det er ofte brukt for enkel UI skapelsen! Hvis vi ikke legge den inn, ville vi ha å posisjonere hver kontroll, noe som ville ta en mye
    lenger
    columnLayout manuelt!

    Denne linjen er der vi legger i vår første kontroll ! Det er en floatSliderGrp
    som er en kombinasjon av en glidebryter og en tekstboks, som begge oppdatering tilkoblet verdi. Vi har merket det Speed ​​
    , sett MINVALUE
    av glidebryteren til 0 og MAXVALUE
    av glideren til 5. Veldig viktig, vi har navngitt kontroll fart
    . Dette er hvordan vi skal få tilgang glidebryteren gjennom MEL - hvis den ikke har et navn, ville det være svært vanskelig å spore opp og utnytte i vår kode
    floatSliderGrp-label "Speed" Felt sant -minValue 0 -maxValue 5 trinns;

    det er der vi kobler vår splitter nye glidebryteren opp til rotateSpeed ​​tilskriver vi opprettet tidligere. Det er en veldig enkel prosess, og er dekket i en rekke detaljer i hjelp. Hovedsak vi sier å bruke vår hastighet
    skyvekontrollen, for å sette verdien av rotateSpeed ​​
    attributt (som i sin tur styrer rotasjonshastighet på vår merry-go-round. Simple! )
    connectControl hastighet merry_go_round_move.rotateSpeed;

    til slutt bruker vi SetParent ..
    kommando, som på grunn av de to prikkene, hopp oss fra å arbeide med ColumnLayout, opp til FrameLayout, og deretter til vinduet selv, etter som vi vise vinduet
    setParent ..;! Showwindow;

    med det gjort, velge all koden og trykke Ctrl + Enter for å kjøre den. Et vindu som heter "kontroller" skal dukke opp med en enkel skyveknapp. Hvis du nå trykker på play, kan du flytte glidebryteren til interaktivt endre rotasjonshastigheten! Awesome!



    Trinn 9

    Så det er hoveddelen roterer, nå la oss gå videre til hestene. De vil være på vei opp og ned, så vi er nødt til å skrive et uttrykk for å endre sin sette Y-verdien.



    Trinn 10

    Så åpner Expression Editor tilbake opp, og la oss lage et nytt uttrykk. Skriv følgende i tekstfeltet:
    GRP_Horse1.translateY = sin (tid);

    Synd er en av Maya innebygde matematiske funksjoner, og når det kommer til oscillerende bevegelse, det er en veldig
    nyttige ett! En sinuskurve (som vist i rødt på toppen av denne siden) er en jevn kurve som går opp og ned over tid. Med litt redigering, kan vi bruke dette glatt opp og ned bevegelse for å drive bevegelsen av vår hest.

    Med koden ovenfor angitt, klikker du Opprett
    å aktivere den. Hvis du spiller nå, vil hesten gå opp og ned, men ikke hvordan vi ønsker. Vi må legge i noen tilpassede attributter!



    Step 11

    Vi kommer til å legge til et attributt til den aller første hesten grp, å endre frekvensen av det er opp og ned bevegelse. Du kan legge dette attributtet til et objekt i scenen, eller til og med en markør hvis du foretrekker, men husk at du må oppdatere uttrykkene under slik at de inneholdt riktig bane til attributtet, ellers vil de ikke har noen innvirkning!

    Velg GRP_Horse1, og i kanalen boksen klikker du på Rediger > Legg attributt. Gi det innstillingene som vises i bildet nedenfor:



    Step 12

    Med vår nye attributt opprettet, må vi gå tilbake til uttrykket editor for å endre Sin uttrykk. Redigere uttrykket slik at det passer inn koden under:
    GRP_Horse1.translateY = sin (tid * GRP_Horse1.frequency);

    Som du ser, vi multiplisere tidsverdien av vår nye frekvensen attributt, som har virkningen av å påskynde eller bremse ned hastigheten av den oscillerende bevegelse. Ganske kult.



    Step 13

    Med vår andre attributt på plass, vi kommer til å trenge en skyveknapp i vår UI! Åpne script editor tilbake opp og redigere mel script som vist nedenfor:
    vindu -title "Controls" -Bredde 400 -Høyde 200; frameLayout -collapsable sant label "Merry-go-round"; columnLayout; floatSliderGrp-label "Frequency" Felt sant -minValue 0 -maxValue 10 frekvens; connectControl frekvens GRP_Horse1.frequency; floatSliderGrp-label "Speed" Felt sant -minValue 0 -maxValue 5 hastighet; connectControl hastighet merry_go_round_move.rotateSpeed; setParent. ., Showwindow;

    Som du ser har vi to nye linjer. Den første skaper en ny skyveknapp som heter frekvens
    , og den andre kobler dette frekvens
    glideren til vår nye frekvens
    attributt. Begge linjene bruke de samme kommandoene som Speed ​​
    glidebryteren. Hvis du nå trykker på play, kan du interaktivt endre hastigheten på hestens opp og ned bevegelse. Vi får det!



    Trinn 14

    Tid for å gjøre de andre hestene flytte så vel! Gjør 11 flere eksemplarer av den forrige Sin uttrykk, huske å oppdatere navnet på HorseGrps som vist nedenfor. Som vi ønsker å kontrollere hastigheten på alle hester fra den eneste frekvens
    attributt, den siste delen av hvert uttrykk forblir den samme. Husk å trykke Rediger
    når du er ferdig, og deretter trykke play og flytt glidebryteren for å se resultatet!



    Step 15

    Brilliant! Bortsett hestene er alle beveger seg opp og ned sammen som ikke er veldig realistisk. Vi trenger å oppveie tidsverdien for noen av hestene, slik at de når toppen av sin hoppe til forskjellige tider. Kan se hvordan det ser ut:

    Som du ser har jeg lagt 45 til noen av hestens Tid
    verdier. Dette kan være en tilfeldig verdi, men jeg har brukt 45 som det oppveier de hestene bevegelsen etter nøyaktig halvparten - de vil være på bunnen av deres hoppe mens resten er på toppen! Et eksempel på en av hestene er gitt nedenfor:
    GRP_Horse2.translateY = sin ((tid + 45) * GRP_Horse1.frequency);

    MERK: Pass på at du legger de ekstra parentes i
    < hr>
    Trinn 16

    til slutt åpner script editor opp igjen, velg alle av koden, og middlemouse-dra den til et tomt område på sokkelen! Dette sparer skriptet som en hylle knapp, slik at du kan åpne vinduet lett uten omskrivninger hele koden. Nå klikker på knappen, trykke play og se resultatene av uttrykk-arbeid.


    Og det er det! Jeg håper du likte denne opplæringen. Hvis du har noen spørsmål, gi meg beskjed og jeg skal prøve å komme tilbake til deg. Takk!