Animering ved bruk av uttrykk kan være en stor timesaver, spesielt når det kommer til mekaniske gjenstander som en god tur! I denne opplæringen går Stephen Ko oss gjennom et enkelt uttrykksbasert prosjekt, og oppretter et enkelt brukergrensesnitt med skyveknapper for å kontrollere de ulike delene av modellen. La oss komme i gang!
La oss begynne! Først, åpne Maya, og hvis du vil følge med nøyaktig, åpner du scenefilen.
Jeg skal kort beskrive modellen min før vi starter. Jeg har delt opp modellen i 2 deler: merry_go_round_move og merry_go_round_stage. Alle hestene er gruppert inne i merry_go_round_move gruppe, og er oppkalt GRP_Horse1 til GRP_Horse12.
Nå forstår vi modellen, kan vi begynne å skrive uttrykkene våre. Begynn med å gå til Vindu> Animasjonsredaktører> Expression Editor.
De Expression Editor er delt inn i utvalgsseksjonen og uttrykksdelen. Etter ferdig å skrive noe i uttrykksseksjonen, heter vi uttrykket i Uttrykksnavn feltet, og klikk deretter på "opprett" -knappen for å lagre uttrykket. Det vil da vises i utvalgsseksjonen klar til bruk, tilbakekalling eller redigering.
MERK: Hvis du ikke kan se uttrykkene du lager, går du til Velg filter> Etter uttrykksnavn. Dette vil vise alle uttrykkene du tidligere har opprettet, bestilt av deres navn (det er derfor å navngi uttrykkene våre er så viktig!)
Først og fremst må vi rotere merry_go_round_move gruppe. Skriv inn følgende i uttrykksdelen:
merry_go_round_move.rotateY = merry_go_round_move.rotateY-1;
Gi nå uttrykket et navn, og klikk Skape å lagre det. Så hva gjør denne koden? Vel på hver enkelt ramme av animasjonen vår, vil dette uttrykket se på merry_go_round_move gruppens nåværende Y rotasjon, trekk en fra den, og gjør det den nye rotasjonen Y verdi. Det er klart å se at da dette gjentas på hver ramme mens vi spiller gjennom animasjonen, vil gruppen sakte men sikkert rotere i -Y retning, med en hastighet på 1 grad hver ramme. Det er ikke ganske fort nok!
MERK: Denne modellen er designet for å rotere med klokken, og derfor trekker vi 1 grad fra Y rotasjonsverdi på hver ramme. Hvis vi legger til 1 grad på hver ramme i stedet, vil gruppen rotere i motsatt retning!
For å gi oss mer kontroll over rotasjonshastigheten, skal vi legge til et nytt attributt til gruppen. For å gjøre dette, velg først merry_go_round_move gruppe, og deretter i kanalboksen, klikk Rediger> Legg til attributt.
I Legg til attributt dialogboksen, legg til innstillingene som vises i bildet nedenfor:
Hvis du klikker OK Du ser at vårt nye attributt er på plass nederst i kanalboksen. Men akkurat nå er det ikke knyttet til noe, og har derfor ingen effekt på rotasjonshastigheten. For å koble den sammen, må vi gå tilbake til uttrykkeditoren og redigere vårt uttrykk. Så åpne uttrykkeditoren, velg uttrykket fra utvalgsseksjonen, og endre den til:
merry_go_round_move.rotateY = merry_go_round_move.rotateY -merry_go_round_move.rotateSpeed;
Sørg nå for å klikke på det nye Redigere knappen som har erstattet Skape knappen nederst i vinduet. Dette sparer alle endringer du har gjort i ditt uttrykk.
Som du kan se har vi erstattet -1 verdi med en lenke til vår nye merry_go_round_move.rotateSpeed attributt, men hva gjør dette? Vårt nylig endrede uttrykk vil nå trekke uansett verdi vi legger inn i rotateSpeed kanal fra vår gruppes Y rotasjonsverdi, på hver ramme.
For eksempel, tenk på vår rotateSpeed verdien er 1. På hver ramme er vår gruppe Y rotasjonsverdien vil falle med samme verdi - 1 grad. Hvis vi skulle øke vår rotateSpeed verdi til 10, rotasjonsverdien vil redusere med 10 grader på hver ramme - med andre ord vil den rotere 10 ganger raskere! Vi kunne også stoppe det med å rotere helt ved å sette merry_go_round_move.rotateSpeed til 0.
Selv om endring av verdier i kanalboksen er relativt enkelt, kan det være gøy for oss å sette sammen en veldig grunnleggende GUI som vi kan styre Merry-Go-Round. Selv om dette ikke er en omfattende Maya brukerveiledning, bør dette gi deg nok info for deg å begynne å eksperimentere litt!
Vi skal lage et enkelt vindu, som inneholder en skyveknapp som styrer vårt rotateSpeed-attributt. Så start med å åpne Script Editor ved å gå til Window> General Editors> Script Editor, eller ved å klikke på Script Editor knappen nederst til høyre i Maya-vinduet. Når du har åpnet, skriver du inn følgende i innboksboksen:
window -title "Controls" -bredde 400-høyde 200; frameLayout -capsapsable true -label "Merry-go-round"; columnLayout; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent ...; Showwindow;
Ok, la oss ta en titt på den linjen etter linje. Denne første delen lager et nytt brukervindu 400x200px i størrelse, og setter tittellinjen for å vise teksten kontroller. Det kommer ikke til å se ut ennå, men vi må spesifikt fortelle det å vise senere i koden.
window -title "Controls" -bredde 400-høyde 200;
Denne delen av koden legger til noe som heter et oppsett inne i vinduet. I hovedsak er det nødvendig med et oppsett for at du skal legge til skyveknapper og knapper i GUI, og denne, er en Ramme layout, vil legge til en ramme rundt alt vi legger til i det. Du vil legge merke til at vi også har lagt til en etikett som heter Merry-Go-Round, og sett rammen til å være collapsable, noe som betyr at vi kan kaste opp våre glidere for nøyaktighet hvis vår GUI blir mer komplisert lenger nedover linjen.
frameLayout -capsapsable true -label "Merry-go-round";
Denne linjen legger til et annet layout inne i rammeoppsettet. Hvorfor? En kolonneoppsett er veldig nyttig for raskt og enkelt å legge til kontroller over hverandre i brukergrensesnittet ditt, og det brukes ofte til enkel UI-opprettelse! Hvis vi ikke legger til det, må vi manuelt plassere hver kontroll, som ville ta en mye lenger!
columnLayout;
Denne linjen er der vi legger til i vår første kontroll! Det er en floatSliderGrp som er en kombinasjon av en glidebryter og en innboks, som begge oppdaterer den tilkoblede verdien. Vi har merket det Hastighet, sett MINVALUE av glidebryteren til 0 og MAXVALUE av glidebryteren til 5. Veldig viktigere, vi har kalt kontrollen hastighet. Slik får vi tilgang til skyvekontrollen via MEL - hvis den ikke hadde et navn, ville det være ekstremt vanskelig å spore opp og bruke i vår kode!
floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed;
Her kobler vi vår helt nye glidebryter til rotateSpeed-attributtet vi opprettet tidligere. Det er en veldig enkel prosess, og dekkes i stor detalj i hjelpen. I hovedsak sier vi å bruke vår hastighet skyvekontroll, for å angi verdien av rotateSpeed attributt (som igjen styrer rotasjonshastigheten til vår glede-runde. Enkelt!)
connectControl speed merry_go_round_move.rotateSpeed;
Til slutt bruker vi SetParent ... kommando, som på grunn av de to punktene hopper oss fra å jobbe med KolonneLayout, opp til FrameLayout, og deretter til Vinduet selv, hvoretter vi viser vinduet!
setParent ...; Showwindow;
Med det gjort, velg all koden og trykk Ctrl + Enter for å kjøre den. Et vindu med navnet "Controls" burde dukke opp med en enkelt glidebryter. Hvis du nå treffer, kan du flytte skyveknappen for å endre rotasjonshastigheten interaktivt! Rått!
Så det er hovedrollen som roterer, nå la oss flytte på hestene. De skal bevege seg opp og ned, så vi må skrive et uttrykk for å endre deres oversette Y-verdi.
Så åpne Expression Editor back-up, og la oss lage et nytt uttrykk. Skriv følgende i tekstfeltet:
GRP_Horse1.translateY = sin (tid);
Synd er en av Mayas innebygde matematiske funksjoner, og når det gjelder oscillerende bevegelse, er det en veldig nyttig en! En sinuskurve (som vist i rødt øverst på denne siden) er en jevn kurve som går opp og ned over tid. Med litt redigering kan vi bruke denne glatte opp- og nedbevegelsen for å drive bevegelsen til hesten vår.
Ved å skrive inn koden ovenfor, klikk Skape for å aktivere den. Hvis du spiller nå, går hesten opp og ned, men ikke hvordan vi vil. Vi må legge til noen egendefinerte attributter!
Vi skal legge til et attributt til den aller første hestegrisen, for å endre frekvensen av opp- og nedbevegelsen. Du kan legge til dette attributtet til et hvilket som helst objekt i scenen, eller til og med en lokaliser hvis du foretrekker det, men husk at du må oppdatere uttrykkene nedenfor slik at de inneholder den riktige banen til attributtet, ellers vil de ikke har noen innflytelse!
Velg GRP_Horse1, og klikk på Rediger> Legg til attributt i kanalboksen. Gi det innstillingene som vises i bildet nedenfor:
Med vårt nye attributt opprettet, må vi gå tilbake til uttrykkeditoren for å endre Sin-uttrykket. Rediger uttrykket slik at det samsvarer med koden nedenfor:
GRP_Horse1.translateY = sin (tid * GRP_Horse1.frequency);
Som du kan se, multipliserer vi tidsverdien med vårt nye frekvensattributt, som har innflytelse på å øke hastigheten til oscillerende bevegelse eller redusere hastigheten. Ganske kult.
Med vårt andre attributt på plass, trenger vi en annen glidebryter i vårt brukergrensesnitt! Åpne skripteditoren på nytt og rediger melskriptet som vist nedenfor:
window -title "Controls" -bredde 400-høyde 200; frameLayout -capsapsable true -label "Merry-go-round"; columnLayout; floatSliderGrp -label "Frequency" -field true-minValue 0 -maxValue 10 frekvens; connectControl frekvens GRP_Horse1.frequency; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent ...; Showwindow;
Som du kan se har vi to nye linjer. Den første oppretter en ny skyveknapp som heter Frekvens, og den andre forbinder dette Frekvens skyveknappen til vår nye Frekvens Egenskap. Begge linjene bruker de samme kommandoene som Hastighet glidebryteren. Hvis du nå treffer, kan du interaktivt endre hastigheten på hestens opp og ned bevegelse. Vi kommer dit!
Tid til å få de andre hestene til å flytte også! Lag 11 flere eksemplarer av forrige Sin-uttrykk, husk å oppdatere navnet på HorseGrps som vist nedenfor. Som vi vil kontrollere hastigheten på alle hestene fra singelen Frekvens attributt, den siste delen av hvert uttrykk forblir den samme. Husk å treffe Redigere når du er ferdig, og deretter slå spill og flytte skyvekontrollen for å se resultatet!
Strålende! Bortsett fra at hestene beveger seg opp og ned sammen, som ikke er veldig realistiske. Vi må oppveie tidsverdien for noen av hestene, slik at de når toppen av hoppet deres på forskjellige tidspunkter. Lar se hvordan det ser ut:
Som du kan se har jeg lagt 45 til noen av hestens Tid verdier. Dette kan være en tilfeldig verdi, men jeg har brukt 45 som det kompenserer hestens bevegelse med akkurat halvparten - de kommer til å ligge på bunnen av hoppet mens resten er øverst! Et eksempel på en av hestene er gitt nedenfor:
GRP_Horse2.translateY = sin ((tid + 45) * GRP_Horse1.frequency);
MERK: Pass på at du legger til ekstrabrakettene i!
Til slutt åpner manuskriptredigereren sikkerhetskopier, velg all koden og mellommann - dra den til et tomt sted på hyllen din! Dette lagrer skriptet som en hylle-knapp, slik at du kan åpne vinduet enkelt uten å skrive hele koden. Klikk nå på knappen, klikk på spill og se resultatene av uttrykkene dine.
Og det er det! Jeg håper du likte denne opplæringen. Hvis du har noen spørsmål, gi meg beskjed, og jeg vil prøve å komme tilbake til deg. Takk!