Unitatea - manual de animație scripting (moștenire)

Sistemul de animație în Unitate vă permite să creați personaje animate frumos. Aceasta susține amestecare, amestecare, adăugarea de animații ciclu mers sincronizare, straturi de animație, controlul tuturor aspectelor legate de redare (timp, viteza, greutate amestec) ochiuri jupuire cu 1, 2 sau 4 oasele la partea de sus, și de asemenea, bazat pe cârpă-păpuși Fizică ( păpuși de cârpă) și animație procedurală. Pentru rezultate optime, este recomandat pentru a citi despre abordări practice și principii pentru a crea caractere cu performanțe optime în unitate pe pagina optimizat caracterele de modelare.

Puteți încerca exemple care arată caracterele finite de animație. Mai târziu, atunci când înveți lucrurile de bază, puteți arunca o privire la descrierea clasei de animație.

amestecarea animație

În jocurile de astăzi, animație de amestecare este o funcție necesară pentru a asigura animații netede de caractere. Animatori crea animații separate, de exemplu, ciclul de mers pe jos, ciclul alerga, animația în repaus sau de condițiile de fotografiere. În orice moment în timpul jocului, ar trebui să poată să meargă cu animație de liniște în ciclul de mers pe jos și vice-versa. Desigur, doriți să faceți această tranziție a fost lină și fără labagii bruște în mișcare.

În acest caz, amestecarea animație devine util. În unitate, puteți avea orice număr de animații care sunt redate pe același caracter. Toate animație amestecate sau adăugate împreună pentru a crea animație finală.

În primul rând face o tranziție lină între animații calme și de mers pe jos. Pentru a facilita activitatea de a scrie script-ul, trebuie să modificați mai întâi animație Mod Wrap Loop. Apoi, aveți nevoie pentru a opri în mod automat pentru a Redare a vă asigura că nici o altă orientare decât script-ul nostru nu va juca animația.

Primul nostru script pentru animație de caractere este destul de simplu; avem nevoie de o modalitate de a determina viteza de deplasare a caracterului, și apoi face tranziția între animații și restul de mers. vom testa acest lucru simplu de utilizat axa de intrare standard: -

Pentru a utiliza acest script în proiect: -

După ce faceți clic pe butonul de redare, caracterul începe să meargă în locul în timp ce țineți apăsată săgeata în sus, și revine la poziția de așteptare atunci când este eliberat.

straturi de animație

Straturi este un concept incredibil de util, care permite animație să clasifice și să acorde prioritate în greutate.

Sistemul de animație Unitatea poate combina mai multe animații, în funcție de dorințele dumneavoastră. Aveți posibilitatea să atribuiți manual greutăți sau pur și simplu utilizați animation.CrossFade (). care va anima automat greutatea.

Greutate amestecare întotdeauna normalizat înainte de utilizare

Să presupunem că aveți un ciclu de mers pe jos și un ciclu alerga cu greutate egală cu 1 (100%). Când unitatea generează animație finală, greutate normalizat, adică contribuția ciclului de mers va fi de 50% din animație, și contribuția ciclului rula și va fi de 50%.

De obicei, veți dori să specificați ce animație devine greutate mai mult atunci când pierzi două animații. Desigur, puteți face manual siguri că greutatea adăugată până la 100%, dar este mai ușor de utilizat doar pentru acest strat.

Exemplu de straturi

Ca un exemplu, puteți utiliza împușcarea animațiile, așteptările și mers pe jos ciclică. mers pe jos și așteptările de animație sunt amestecate, în funcție de viteza jucătorului, dar atunci când jucătorul are pentru a trage, pe care doriți să joace numai animația de ardere. Deci, de fapt, trăgând de animație are o prioritate mai mare.

Cel mai simplu mod de a face acest lucru este doar pentru a continua să joace animații de mers pe jos și de odihnă în timpul fotografierii. Pentru a face acest lucru, trebuie să ne asigurăm că animația de fotografiere este în stratul superior peste animațiilor de odihnă și de mers pe jos, ceea ce înseamnă că animația de ardere va primi o greutate de amestec, în primul rând. plimbare de animație și de odihnă vor primi greutatea numai atunci când fotografiați de animație nu utilizează toate 100% din greutatea. Deci, atunci când tranziția începe în animațiilor de fotografiere, greutatea se va porni de la zero, și într-un timp scurt, va fi de 100%. Inițial, un strat de distanță, iar restul vor primi în continuare greutatea, dar atunci când finalizat complet trecerea la animația de ardere - nu vor primi greutatea deloc. Si asta este exact ceea ce avem nevoie!

Implicit, animation.Play () și animation.CrossFade () sau oprire lin fi eliminate într-o animație sunt același strat. Acest lucru este ceva care este necesară în cele mai multe cazuri. În exemplul nostru, fotografiere, pace, și alergare, jogging si joaca restul nu va afecta animațiilor de fotografiere, și vice-versa (dacă este necesar, acest comportament poate fi schimbat parametru opțional funcția animation.CrossFade).

amestecarea animație

Amestecarea animație vă permite să taie în jos numărul de animații pe care doriți să le creați pentru joc. Acest lucru se realizează prin faptul că unele dintre animații afectează doar o parte a corpului. Aceasta înseamnă că o astfel de animație poate fi utilizat împreună cu alte animații în diverse combinații.

Adăugarea animațiilor de transformare de amestecare se face prin apelarea AddMixingTransform metoda () disponibilă AnimationState.

EXEMPLU amestecare

Ca un exemplu, amestecarea poate duce la ceva ca o animație fluturare de mână. Poate doriți să facă o fluturare de mână sau atunci când un caracter este în repaus, sau atunci când merge. Fără amestecare animații, va trebui să facă unele animație fluturare de mână într-o stare de repaus și de mers pe jos. Dar, dacă adăugați transformarea umerilor ca transformarea de amestecare într-o animație fluturare de mână, ea va avea control deplin numai la articulația umărului la mână. Având în vedere că restul corpului nu va fi influențată de animație fluturare de mână, acesta va continua să joace o animație de odihnă sau de mers pe jos. Ca urmare, va dura doar o animație pentru a face fluturare de mână, în timp ce restul corpului va folosi animația de repaus sau de mers pe jos.

Un alt exemplu de utilizare căi.

Aditiv (aditiv) animații

Aditiv de animație și de animație tehnologia de amestecare poate reduce numărul total de animații care aveți nevoie pentru a crea pentru joc, și aceste tehnici sunt de asemenea importante pentru crearea de animație faciale.

Să presupunem că a vrut să creeze un personaj care este înclinat spre partea în timpul unui viraj, când se plimbă sau se execută. Acest lucru conduce la patru combinații (du-te-macră stânga-go-macră-dreapta run-lean-stânga, a alerga, îndoiți în jos și la dreapta), fiecare dintre care au nevoie de animație. Crearea unui animație separat pentru fiecare combinație, în mod evident, conduce la o mulțime de muncă în plus, chiar și în acest caz simplu. Dar numărul de combinații crește cu fiecare efect adăugată. Din fericire, adăugarea de animație și de amestecare evită necesitatea de a crea animații separate pentru combinații de mișcări simple.

EXEMPLU animațiile aditiv

Aditive efecte de animație vă permit să aplice aceeași animație pe partea de sus a oricăror alte animații care rulează. Când adăugarea de animație generate, unitatea calculează diferența dintre primul și actualul clip animație cadru. Apoi, diferența se va aplica pe partea de sus a tuturor celorlalte devin animate.

Referindu-se la exemplul anterior, ați putea crea animație pentru pante la dreapta și la stânga, iar unitatea ar putea să le impună pe ciclul de mers pe jos, restul sau funcționare. Acest lucru poate fi realizat prin utilizarea codului, după cum urmează: -

Indicație: Atunci când se utilizează animații aditive, este important să se joace, de asemenea, unele alte animații non-aditiv pe fiecare transformare, care este, de asemenea, utilizat ca un aditiv de animație. În caz contrar, animația va fi adăugată în partea de sus a rezultatului ultimului cadru. Acest lucru nu este exact ceea ce ai nevoie.

personaje de animație de procedură

Uneori ai nevoie pentru a anima oasele personajului tău procedural. De exemplu, doriți capul personajul tău se uită la un anumit punct în spațiu 3D. Această acțiune este cel mai bine pus în aplicare cu un script care urmărește punctul țintă. Din fericire, Unitatea aceasta o sarcină foarte simplu face, deoarece oasele sunt doar transformări care controlează pielea (mesh jupuit). Puteți controla oasele personajului din scenariu precum și transformări GameObject.

Unul dintre cele mai importante lucruri pe care trebuie să știți este că sistemul de animație actualizează după transformarea funcției de actualizare (). și la LateUpdate () funcția. Prin urmare, dacă aveți nevoie pentru a apela funcția lookat (). ar trebui să facă acest lucru în LateUpdate (). asigurați-vă că suprascrie de fapt animație.

păpușă (Ragdolls) sunt create în același mod. Trebuie doar să adăugați componente, caracterul solid rigid in comun capsula Collider și diferitele oase. Acest lucru vă permite să creați animații din caracterul tău bazat pe fizica.

Redare și animație cemplirovanie

Această secțiune vorbește despre modul în care se întâmplă în timpul animației de eșantionare Unitatea motorului de redare.

Jocurile funcționează în mod obișnuit, cu o rată de cadru variabilă. Rata de cadre pe computer poate fi mai mare decât altele, și poate, de asemenea, varia în funcție de complexitatea obiectelor de redare în câmpul vizual al camerei. Practic, acest lucru înseamnă că nu putem face nici presupuneri, cu o rată de cadre a jocului va funcționa. Acest lucru înseamnă că, chiar dacă animația a fost creată pentru 60 de cadre pe secundă, acesta poate fi jucat pe alte rate de cadre - de exemplu, 56.72 sau 83.14 de cadre pe secundă, sau orice altceva.

Ca rezultat, unitatea trebuie să eșantion o animație cu diferite rate de cadre, și nu poate garanta rata de cadru la care este creat animația. Din fericire, animatii pentru diagrame 3D nu constau din cadre discrete și de curbe continue. Deci, în cazul în care jocul oferă o mai mare rată de cadre decât rata de cadre de animație, animația va arăta mai lin în joc, cum arăta în software-ul de animație.

Pentru cele mai multe aplicații, este posibil să ignore faptul că unitatea probe animație pe rata de cadru flotant. Cu toate acestea, în cazul în care există un joc de logică, care se bazează pe Animațiile care animă transformarea și proprietățile într-o configurație foarte specifice - trebuie să știți că în spatele scenei reeșantionare folosite. De exemplu, dacă aveți o animație care se rotește obiectul de la 0 la 180 de grade pentru 30 de cadre, si doriti sa stiti de la codul, atunci când jumătate a trecut de drum, ar trebui să nu facă acest lucru cu o expresie condițională în codul care verifică dacă curentul rotația este de 90 de grade. Deoarece Unitatea mostre de animație pe rata de cadre plutitoare a jocului, poate fi prelevată proba atunci când rotația un pic mai mic de 90 de grade, iar eșantionul următor - când rotația puțin mai mare de 90 de grade. Dacă doriți să primiți o notificare atunci când un anumit punct în animație, utilizați a fost atins AnimationEvent (eveniment de animație).

De asemenea, rețineți că, ca urmare a animației frame rate plutitor care este jucat cu ajutorul WrapMode.Once. Prelevarea de probe nu poate fi la momentul exact al ultimului cadru. Într-o scenă de joc, animația poate fi prelevarea de probe chiar înainte de sfârșitul animației, iar cadrul următor, timpul ar trebui să meargă lungimea de animație, atunci animația este dezactivată, și nu vor mai fi incluși în eșantion. În cazul în care este foarte important pentru tine la ultimul cadru al animației eșantionate cu precizie, utilizați modul WrapMode.ClampForever. care va continua să proba ultimul cadru pe termen nelimitat, până când a opri animația.