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 Expression Editor 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!) Først av alt, vi trenger å rotere merry_go_round_move Nå gi uttrykk et navn, og trykk på Opprett NB: Denne modellen er designet for å rotere med klokken, og det er derfor vi trekke en grad fra Y 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 I Legg Egenskap Hvis du klikker OK Nå må du klikke på den nye Rediger Som du ser har vi erstattet -1 For eksempel, tenk deg vår < em> rotateSpeed 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 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 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 Denne linjen legger til en annen layout i vår ramme layout. Hvorfor? En kolonne layout er veldig Denne linjen er der vi legger i vår første kontroll ! Det er en floatSliderGrp 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 til slutt bruker vi SetParent .. 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! 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. Så åpner Expression Editor tilbake opp, og la oss lage et nytt uttrykk. Skriv følgende i tekstfeltet: Synd er en av Maya innebygde matematiske funksjoner, og når det kommer til oscillerende bevegelse, det er en veldig Med koden ovenfor angitt, klikker du Opprett 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: 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: 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. 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: Som du ser har vi to nye linjer. Den første skaper en ny skyveknapp som heter frekvens 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 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 MERK: Pass på at du legger de ekstra parentes i 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!
. 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
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
Trinn 5
gruppe. Skriv inn følgende i uttrykket seksjonen:
merry_go_round_move.rotateY = merry_go_round_move.rotateY-en;
å 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
rotasjon verdi på hver ramme. Hvis vi lagt en grad på hver ramme i stedet, ville konsernet rotere i motsatt retning!
Trinn 6
gruppe, og deretter i kanalen boksen klikker du på Rediger > Legg Egenskap
dialogboksen legger i innstillingene som vises i bildet nedenfor.
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
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;
knappen som har erstattet den Opprett
knappen nederst i vinduet. Dette lagrer eventuelle endringer du har gjort i ditt uttrykk.
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.
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
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;
. Det vises ikke ennå men som vi har å spesifikt fortelle det vise senere i koden
vindu -title "Controls" -Bredde 400 -Høyde 200;.
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";.
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!
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;
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;
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;
Trinn 9
Trinn 10
GRP_Horse1.translateY = sin (tid);
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.
å 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
Step 12
GRP_Horse1.translateY = sin (tid * GRP_Horse1.frequency);
Step 13
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;
, 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
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
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);
< hr>
Trinn 16