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 
 
 
 
 
			 
        

