Animarea cu ajutorul expresiilor poate fi un timp mare, mai ales atunci când vine vorba de obiecte mecanice, cum ar fi un merry-go-round! În acest tutorial, Stephen Ko ne trece printr-un simplu proiect bazat pe expresii, creând un simplu interfață utilizator cu glisoare pentru a controla diferitele părți ale modelului său. Să începem!
Să începem! Mai întâi, deschideți Maya și, dacă vreți să urmați exact, deschideți fișierul scenă furnizat.
Voi descrie pe scurt modelul meu înainte de a începe. Am împărțit modelul în două părți: merry_go_round_move si merry_go_round_stage. Toți caii sunt grupați în interior merry_go_round_move grup și sunt numiți GRP_Horse1 la GRP_Horse12.
Acum înțelegem modelul, permite să începem să ne scriem expresiile. Începeți prin a merge la Fereastră> Editor de animație> Editor de expresii.
Editor de expresii este împărțit în secțiunea de selecție și secțiunea expresie. După ce ați terminat de scris ceva în secțiunea de expresie, denumim expresia în Numele de expresie , apoi faceți clic pe butonul "creați" pentru a salva expresia. Apoi va apărea în secțiunea de selecție gata de utilizare, rechemare sau modificare.
NOTĂ: Dacă nu puteți vedea expresiile pe care le creați, mergeți la Selectare filtr> După nume expresie. Aceasta va arăta toate expresiile pe care le-ați creat anterior, ordonate după numele lor (de aceea denumirea expresiilor noastre este atât de importantă!)
Mai întâi de toate, trebuie să rotim merry_go_round_move grup. Introduceți în secțiunea expresie următoarele:
merry_go_round_move.rotateY = merry_go_round_move.rotateY-1;
Acum dă-ți expresia un nume și o loveste Crea pentru al salva. Deci, ce face acest cod? Ei bine, pe fiecare cadru al animației noastre, această expresie se va uita la merry_go_round_move grupului curent Y rotirea, scade unul din el și face ca noua rotație Y valoare. Este clar pentru a vedea că, așa cum se repetă în fiecare cadru pe măsură ce jucăm prin animația noastră, grupul se va roti încet, dar sigur în -Y direcție, la o viteză de 1 grade pe fiecare cadru. Ceea ce nu este suficient de rapid!
NOTĂ: Acest model este proiectat să se rotească în sensul acelor de ceasornic, motiv pentru care scădem un grad de la 1 grad Y rotație pe fiecare cadru. Dacă adăugăm 1 grad pe fiecare cadru, grupul se rotește în direcția opusă!
Pentru a ne da mai mult control asupra vitezei de rotație, vom adăuga un nou atribut grupului. Pentru aceasta, mai întâi selectați merry_go_round_move grup, apoi în caseta de canal faceți clic pe Editați> Adăugați atribut.
În Adăugați un atribut , adăugați setările afișate în imaginea de mai jos:
Dacă faceți clic pe O.K veți vedea că noul nostru atribut este disponibil în partea de jos a casetei de canale. Cu toate acestea, acum nu este conectat la nimic și, prin urmare, nu are nici un efect asupra vitezei de rotație. Pentru a le conecta, trebuie să ne întoarcem la editorul de expresie și să ne editați expresia. Deschideți astfel editorul expresiei, alegeți expresia din secțiunea de selecție și modificați-o la:
merry_go_round_move.rotateY = merry_go_round_move.rotateY -merry_go_round_move.rotateSpeed;
Acum, asigurați-vă că faceți clic pe noul Editați | × butonul care a înlocuit Crea butonul din partea inferioară a ferestrei. Acest lucru salvează toate modificările pe care le-ați făcut expresiei dvs..
După cum puteți vedea, am înlocuit-o -1 valoare cu un link către noul nostru merry_go_round_move.rotateSpeed atribut, dar ce face acest lucru? Expresia noastră nouă modificată va scădea acum valoarea pe care o punem în rotateSpeed canal din grupul nostru Y rotație, pe fiecare cadru.
De exemplu, imaginați-ne rotateSpeed valoarea este 1. Pe fiecare cadru, grupul nostru Y valoarea de rotație va scădea cu aceeași valoare - 1 grad. Dacă ne-ar crește pe noi rotateSpeed valoare pentru 10, valoarea de rotație va scădea cu 10 grade pe fiecare cadru - cu alte cuvinte se va roti de 10 ori mai repede! De asemenea, am putea opri rotirea completă prin setarea merry_go_round_move.rotateSpeed la 0.
În timp ce schimbarea valorilor în canalul canalului este relativ ușoară, ar putea fi distractiv pentru noi să realizăm o interfață grafică de bază foarte bună, din care să putem controla Merry-Go-Round. În timp ce acest tutorial nu este un tutorial Maya UI, acest lucru ar trebui să vă ofere informații suficiente pentru a începe să experimentați puțin!
Vom face o singură fereastră, care conține un cursor care va controla atributul rotateSpeed. Deci începe prin deschiderea Script Editor accesând fereastra> Editorii generali> Editorul scriptului sau făcând clic pe Script Editor în partea din dreapta-jos a ferestrei Maya. După deschidere, tastați următoarele în caseta de introducere:
titlul ferestrei "Controale" - lățimea 400 - înălțimea 200; frameLayout - se poate inscripționa cu adevărat - "Merry-go-round"; columnLayout; floatSliderGrp - eticheta "viteză" - câmp adevărat -minValue 0 -maxValue 5 viteză; viteza conexiuniiControl merry_go_round_move.rotateSpeed; setParent ...; ShowWindow;
Bine, să aruncăm o privire la linia respectivă. Această primă secțiune creează o nouă fereastră UI cu o dimensiune de 400 x 200 pixeli și stabilește bara de titlu pentru a afișa textul Controale. Acesta nu va apărea tocmai totuși, așa cum trebuie să-i spunem în mod specific să se arate mai târziu în cod.
titlul ferestrei "Controale" - lățimea 400 - înălțimea 200;
Această secțiune de cod adaugă ceva numit aspect în interiorul ferestrei noastre. În esență, este nevoie de un aspect pentru a adăuga glisoare și butoane în interfața dvs. grafică, iar aceasta, fiind a Cadru layout, va adăuga un cadru în jurul valorii de tot ce adăugăm în interiorul acestuia. Veți observa că am adăugat și o etichetă numită Călușei, și setați cadrul Collapsable, ceea ce înseamnă că ne putem rafina glisierele pentru a ne îngriji dacă GUI-ul nostru devine mai complicat în continuare.
frameLayout - se poate inscripționa cu adevărat - "Merry-go-round";
Această linie adaugă un alt aspect în interiorul aspectului nostru de cadre. De ce? Este un aspect al coloanei foarte util pentru adăugarea rapidă și ușoară a controalelor deasupra celeilalte în interfața dvs. utilizator și este adesea folosit pentru crearea ușor de UI! Dacă nu l-am adăugat, ar fi trebuit să poziționăm manual fiecare control, care ar lua o mult mai lung!
columnLayout;
Această linie este locul în care adăugăm primul nostru control! E o floatSliderGrp care este o combinație a unui cursor și a unei casete de intrare, ambele actualizând valoarea conectată. Am etichetat-o Viteză, Seteaza MINVALUE a cursorului la 0 și MAXVALUE a cursorului la 5. Foarte important, am numit controlul viteză. Acesta este modul în care vom accesa cursorul prin MEL - dacă nu ar avea un nume, ar fi extrem de dificil să urmăriți și să utilizați în codul nostru!
floatSliderGrp - eticheta "viteză" - câmp adevărat -minValue 0 -maxValue 5 viteză;
Acesta este locul în care conectăm noul nostru cursor până la atributul rotateSpeed pe care l-am creat mai devreme. Este un proces foarte simplu și este acoperit cu multă detaliu în ajutor. În esență, spunem să ne folosim viteză comanda cursorului, pentru a seta valoarea rotateSpeed atribut (care, la rândul său, controlează viteza de rotație a jocului nostru merry-go-round).
viteza conexiuniiControl merry_go_round_move.rotateSpeed;
În cele din urmă, folosim SetParent ... care, datorită celor două puncte, ne salută de la lucrul cu ColumnLayout, până la FrameLayout și apoi la fereastra însăși, după care vom arăta fereastra!
setParent ...; ShowWindow;
Cu aceasta, selectați tot codul și apăsați Ctrl + Enter pentru al rula. O fereastră numită "Controale" ar trebui să apară cu un singur cursor. Dacă ați lovit acum jocul, puteți muta cursorul pentru a schimba interactiv viteza de rotație! Minunat!
Deci, acesta este corpul principal care se rotește, acum să ne mișcăm pe cai. Se vor mișca în sus și în jos, așa că va trebui să scriem o expresie care să le modifice valoarea de traducere Y.
Deci, deschideți Editorul de expresii și creați o nouă expresie. Scrieți următoarele în câmpul de text:
GRP_Horse1.translateY = sin (timp);
Păcatul este una dintre funcțiile matematice construite de Maya, iar când vine vorba de o mișcare oscilantă, este a foarte unul util! O curbă sinusoidală (așa cum este prezentată în roșu în partea de sus a acestei pagini) este o curbă netedă care coboară în sus și în jos în timp. Cu o mică editare, putem folosi această mișcare netedă în sus și în jos pentru a ne conduce mișcarea calului nostru.
Cu codul de mai sus introdus, faceți clic pe Crea pentru ao activa. Dacă te joci acum, calul se va deplasa în sus și în jos, dar nu cum vrem. Trebuie să adăugăm câteva atribute personalizate!
Vom adăuga un atribut primului cal de cal, pentru a schimba frecvența mișcării în sus și în jos. Puteți adăuga acest atribut oricăror obiecte din scenă sau chiar un localizator, dacă preferați, dar amintiți-vă că va trebui să actualizați expresiile de mai jos, astfel încât acestea să conțină calea corectă a atributului, altfel nu vor au vreun efect!
Selectați GRP_Horse1, iar în caseta de canal faceți clic pe Editați> Adăugați atribut. Dați-i setările prezentate în imaginea de mai jos:
Cu noul nostru atribut creat, trebuie să ne întoarcem la editorul expresiei pentru a modifica expresia păcatului. Editați expresia astfel încât să corespundă codului de mai jos:
GRP_Horse1.translateY = sin (timpul * GRP_Horse1.frequency);
După cum puteți vedea, înmulțim valoarea timpului cu noul atribut de frecvență, care afectează accelerarea sau încetinirea vitezei mișcării oscilante. Destul de la moda.
Cu ajutorul celui de-al doilea atribut, vom avea nevoie de un alt cursor în interfața noastră! Deschideți editorul de script-uri și creați-le înapoi, și editați mel script-ul, după cum se arată mai jos:
titlul ferestrei "Controale" - lățimea 400 - înălțimea 200; frameLayout - se poate inscripționa cu adevărat - "Merry-go-round"; columnLayout; floatSliderGrp - eticheta "Frecventa" - camp adevarat - minValue 0 - max Valoare 10; conectați Frecvența de control GRP_Horse1.frequency; floatSliderGrp - eticheta "viteză" - câmp adevărat -minValue 0 -maxValue 5 viteză; viteza conexiuniiControl merry_go_round_move.rotateSpeed; setParent ...; ShowWindow;
După cum puteți vedea, avem două noi linii. Primul creează un slider nou numit frecvență, iar al doilea conectează acest lucru frecvență glisați la noul nostru frecvență atribut. Ambele linii folosesc aceleași comenzi ca și Viteză slider. Dacă ați lovit jocul, puteți modifica interactiv viteza mișcării în sus și în jos a lui Horse. Suntem acolo!
E timpul sa facem si ceilalti cai sa se miste! Faceți încă 11 copii ale expresiei anterioare Sin, amintiți-vă să actualizați numele HorseGrps după cum se arată mai jos. Așa cum vrem să controlam viteza tuturor cailor de la single frecvență atributul, ultima parte a fiecărei expresii rămâne aceeași. Amintiți-vă să loviți Editați | × când ați terminat, apoi loviți redarea și mutați cursorul pentru a vedea rezultatul!
Sclipitor! Cu excepția cailor, toate se mișcă în sus și în jos, ceea ce nu este foarte realist. Trebuie să compensăm valoarea timpului pentru unii cai, astfel încât să ajungă la vârful saltului lor la momente diferite. Să vedem cum arată:
După cum puteți vedea, am adăugat 45 la unii din cal Timp valori. Aceasta poate fi o valoare aleatorie, cu toate acestea am folosit 45 deoarece compensează mișcarea acelei cai cu exact jumătate - ei vor fi în partea de jos a saltului lor în timp ce restul sunt în partea de sus! Un exemplu pentru unul dintre cai este dat mai jos:
GRP_Horse2.translateY = păcat ((timp + 45) * GRP_Horse1.frequency);
NOTĂ: Aveți grijă să adăugați brațele suplimentare în!
În cele din urmă, deschideți editorul de script-uri de rezervă, selectați tot codul, și middlemouse-glisați-l într-un loc gol de pe raft! Acest lucru salvează scriptul ca pe un buton de raft, permițându-vă să deschideți ușor fereastra fără a re-scrie tot codul. Acum, faceți clic pe buton, apăsați pe redare și vedeți rezultatele expresiei.
Si asta e! Sper că ți-a plăcut acest tutorial. Dacă aveți întrebări, spuneți-mi și voi încerca să vă întorc. Mulțumiri!