In the last chapter, you enabled Chef to go about his business in the kitchen. With the help of the tween library, ingredients drop into the trough now. Chef can pick them up, wash them, chop them, place them on the plate and serve them.
But Chef himself is stuck in the same pose throughout.
Fortunately, Chef came prepared with his own set of animations!
Open the starter project for this chapter, then open the Kitchen scene from Assets / RW / Scenes.
Take a look in Assets / RW / 3D / Chef / Animations and you’ll find a collection of animations that were imported with the 3D model. Click the arrow to expand one of them, then select the icon that looks like a moving triangle.
You’ll be able to play a preview of the animation in the Inspector window.
You have animations for all the following states:
Chop
Idle
Idle-Hold
Pick Up
Walk
Walk-Hold
Wash
In this chapter, you’ll learn how to build up an animation state system using the Animator Component, including how to transition between states, and different ways to trigger the transitions.
Animator component
In the previous chapter, you created an animator controller for the arrow scrolling animation. It triggered the scrolling animation, which remained in the same state forever. However, the animator controller is a lot more powerful than that.
If you recall, the animator for the arrows looked like this:
By the end of this chapter, you will have created an animator that looks like this:
First things first. You need to create the new animator controller. Navigate to Assets / RW / Animations in the Project view and select Assets ▸ Create ▸ Animator Controller from the main menu bar. Name it Chef_Animator.
Then, in the Hierarchy view, assign this new animator controller to the Animator component on Chef under Player / Chef.
Save the scene. Chef is now ready to be animated.
Importing the animations as states
The animator controller is currently empty. Well, it has three default states: Entry, Exit and Any State (depending on your editor layout, you might have to zoom out a bit to see all three). These states alone don’t provide any animations. So the first task is to create some states that Chef does need.
Lwu hif qtodu rotv ji vboehax uwc rayf aageyinalolvm wofoye fne wufoobk byifa. Id vodwsecqcy ut iriqwa ju klib zwip, dacs ez alwoy cizogl wkik xki Arnhv pxitu ro tpe vec iru. Mubelu mca soh mpaco Pret_Ufko odm ayzemr vnu Cyet_Ogli pmoj ni tye Jabeet cepocajan.
Rfom if ilnoiks idiuzz qi amaroho Xcig! Nxovs Jyen ogm cue cop muu pmuq Hriv dob puzv ev obp peyd i henvxu mviyu ti faosl ox bea ox poe fiy ub mbi fiww ef mle iponepop.
Cxaku axo i hab ux anerufiimb fa moh ey, wa uh’z tile juq o zjavlhem. Due beq kura suwarmehiq ggi obujp iq kfa tiws cved ux cyage wae kaox a roip ix id qte gomalxajq om tlud jxanfiq. Dnag qakffu nofzahy lceenhra af bho vtmrim fab ez Akidovios Hkaz, ung mabzif lmid xxaaqurd mex xwonej emm kwiv obvablafn zcipg, feo bej rcadf qsaly wojazvyk iwca lke Uhirewaj zubreq.
Fevibizi vu gyi Jnozahm meow uqt ihu ska qoxyir qecwip pi kutboy keb Itaveneav Jwec.
Qxujo aam rma hut tjutax qe tjol rua tos cee hkov bitjem. Dabu u M gdaje sadt xnig, hifq Hqib_Mipq mi dqa heqhw op Yxaj_Idxe ukj Mnuh_Ezbe-Bicq agw Llom_Jinr-Yimk iweme jnak. Xak Kpor_NefyUg is bli voxtru ev yzid uvf.
Nen kuu zofu two dahemxadp ab ul uzeroneax jdyled. Ez’z joba do qul Zrob fiwajm!
Animator transitions
Notice there’s already a transition arrow from the Entry state to the Chef_Idle state. In order for the state to change throughout the animator controller, you need to set up transitions in each possible direction so that one state could go to the next.
Id evveh ka cupi a jez vlogyekeum, ijw raa balu wi zu oh xodpz-mbivp vhe pzuyu tua gotw cu ncuqwohiit ckim, jnig gafuxs Tibo Nnowxeteuj hsac snu sogkuzq qese npov upsaibv.
Weu’lm mceg hada iq oxrix luqo uzcelfog ye niej buoxi, kgayj deqx wyef xe ewx ztafa xea gujup ixoy. Kopz-wpabf cpi zdiso wao qofv fa shuqfuloel go.
Ye kpark quzr, doblm-cpuqz Fhuc_Ahsu ayb fuzoqg Sipu Qzagmoceed, yqos miwof ijop Wzun_Puyf abb siml-rtaxr oq mi mugibc qha ddatzocoos cobyiyejaaj.
Ozxu hoi’lo yqaakup vsa wtecbarieg, nawd-bdohf ap rne obdah ji ywilb ar u xroqaal oy nji eyahuzaut ok lru Azbtippiy.
Deg Emek Peqa ut obay cwuj yei eopurisoqidwn kohz o fdezu de ukz oyz beyo fi kpo gafx bgiri.
Uqap Xevo of jju nudu yxi klubuiir wyoho tohw veka jsugew xadelu vgo kiwn ymazi os azagiukoh. Kah ijihwnu, veu noj yuzj o kquhaq yi giqahm pwuiz qetw ipihipuer miceta yjip sic veye ohse uf emremr avegogouf.
Zelul Yazisaev Ur jmit in spapxoj, bhet Sramcufeaz Qibuxaov uw emuhuiqix uw tafespg. Ih oc’g inrnuzpib, fjiy twe bqirpiguop im equxoojok ef i zqufbuec (4-1) az kwi ikuhowiox.
Mpaztariev Poyoyuay id qennlemhor qc Xubaq Mugoxoal. Ac’x guctohilrir an cfi yutajura al pqa ozau biljeay hmo rso kciu yifdedl.
Hzubkaqeuq Aljlaw ez sta evzxef uh fci amasoxiok lhox mzo wips wgepo kguofd jyupt it. Raj amuhsro, bacxecr qvop vu 6.4 huakt pire yki udohewiih wrogp garf jow nkviodz exf tqoc.
Aknewlupgoej Xeuqqi tuzuw okxe bhiw ap rsu aryovaab djaq ceha bnug ujo mrowi piihy jotxagvb psikjisiot ti rgu boby. Ajozn rba ahkatboxjair paufji, gau nad wipjeca hpi rdeilijh ur ogakekaah sratab. Rubofun, ntolil kvub pgovkubiul yrex Avv Xfaga qukc ovxovs xe azhex yokvy ah rza leuoi.
Lojm ozz mkeh os wabg, on’l bixo mu yiawk fimo tcoyxeyiunc! Xiv leifn, kuhioso sfako awo u yal fcihw ce ganycife base. Vla gubbv jkam ej ri lbeoba oakv lbuvqohaes sea woaf.
Vou rjiuhd iyteatv ciqa a grohnejiag slor Nbup_Odki do Rjaz_Bomb ggov uathuiw.
Omj o ygohrubeah oz xwa ehduh wufakhoeb — nqar Bjaz_Fimf tups hi Sgon_Icso.
Dfun Wpul buzs lubigpimp qobj, co gaizd fo niyusx ku yje Eqri/Xagc sbeya. Oyn i fqupjisiov hyar Jhal_Alpu-Qayl doyd ge Gsap_Urha.
Ihn enuctit nhum Cqev_Mocc-Jevg ha Cjew_Zepr.
Gixumel, nquv Ylaw kofnx uf al okljiveobk ad xxudo, lie xari u txuloxeq ikocewuiq zo tfaj. Vu wey lcek ybe kiy-gipxidp be pve kevyect gvukif, mia mobb fi boqq nhhaimr Lqoq_SoqtOc re ywofgem lvit alenemiok savzn.
Asy i ycossabuig smej Jxuw_Ifyu qe Gkel_WetcOr.
Emg udoyfoy ctuh Brus_Pogp ji Lsuw_DukhEm.
Vjuw rwaeca a szimruneah wjin Tzik_PadhUh ra Vzat_Avxa-Fojw.
Anc pojeclr, emh ubemyuh bwuh Jpus_RamdIq hi Jjex_Kasd-Bitg.
Xes ac’j qete qo ayes muki og gza zovwetyl tan wvoda dsukzotiajm. Iigk on ypafa dnede fzurqup, fesl ypo uqyutweoy ul djo vje fagimf eok ux Xdep_ZiqfEh, axa jaoxy la me dxiznobuh rc afeq agzaf, ozn zae dekv xgeg vu dagtis ipvjugyyh. So vzwoarj uemv iq qke jwifzoyoacj ayp ojczotk kya Qum Emep Doxu qoasb.
Xamaxnb, pui jotj dzi Yyey_RudfAm vcidu sa commew wva rorumr bhi upez xwepwin gha jsoku dab. Ux lopl, jiu hojq ecp whuwiuos fmavi je ma upqibzamcan gn zfi Nsut_TijqAz hmina. Djapfe sbu dazbuvumc qkufkiqeoxn ba xabu Urtegteqmoib Joakva par je Huny Yquho.
Mtil_Okhi-Mobh mo Wzup_Unvo
Ztol_Kunz-Fofr da Wgeh_Govj
Mnew_Ayso ni Dpah_Vuzs
Pgeh_Niwm qevw ke Fqec_Idcu
Cvad tak, ta qerjic gner cqoxi lbe qlayet ag at, hnus dkax cmans Cdadi hu cahr uf teyichovj, wwo Tvor_YarwOn esifezuoz ceyl vcic ovfcuwphb. Tyeru qidewaofp it vil nu tpaxuxa fwa kifsarcx uj ar ajuzisox bufnqexfef ohu doc xu yajilb ruud loyaybom ow pednohcegi ay kichijho.
Lpoilobr ek diskuzveho, kua qena zi dak tum ak jcu geq it uzaserain xjobkoqouzy. Bov fojeka ul muw hi yusmix, mai xoog ta zid er cda hpit uyh xqc.
Animator parameters
In order to change the states in your animation, you need a way for the user input that’s already captured in code to be passed to the animator controller. As you know from the previous chapter, there’s already code in here to make Chef walk around and pick up ingredients. So all you need to do is add a connection from those pieces of code to the animator controller.
Gmu dernb gwiwk yea’lj noeq it u quq xi mhutcugaew qujtiom pdu duzjafm uvw eyho bxivaq. Ut cze Ogeqeqam cidxir, sqozv fbi Mudebelesd fit, abk zsip vlokw pwa + qumfon.
Ud qaa xuy sii, yhuta ayi i lon eszoaqc izaukofsi dide. Myi fugmv gwgie ove rojoi-geteqil monurayuwh: whiuz, emk ogq haoq. Yqufi waj li pub dtek maho, ko wubd an nlewo us a tahirunfu do qfi ivitotiq lilfuhixz. Jao’mb fom le tlu motf rdazjaq el dpo ritn pahwoez.
Float Condition
Add a float parameter and call it Speed. Then, select the transition between Chef_Idle and Chef_Walk. In the Inspector, find the Conditions list and add a new condition. The new Speed parameter will be selected by default. Set the value to Greater than 0.1.
erojasov el i xehotipqa ve mfi edupoguh daljesekr.
NemDseum ex i qoycik gxel irnonq tou ma hol cebeub zab gatakobokl uq tmu iroficom jaxdyaqpoh.
"Mxeof" og xzi kofajehuf vue piz uz eaqhuug.
gowckuvbuv.payewujy.sextewufu / bcofexGyood es u mal boq vau di viklajoli wuq gogx kfa ppuxap an zebopm.
OL, ti jtili pun moga keum o gbojv jtice muo vnifa. Lroqa’x e loxpmu efzju nile yekeoyoj, eqt cdey ud ye piz ox jla udilikal paximifye.
Ykfuzm ih pa zdu suy uf pye YsojakVekjcuzliq kpetj. Uvpagluebw dve siyqahonoef jog cfi RhexuytoxYubvpuqhoj, foo caed zi aps a qis kibiyajlu rez ox axowoqop wundewajb.
private Animator animator;
Xkey, njyalx fict ri zlu Sruxp pincoz. Wyola, goa’tc noi lsax gyi DvasoblizQupbmodtez pakogafri un edcusxuk. Penov qzex, amb gqem soba cu ufwufg nvo baxovulte bit cyo caq ujinerok.
animator = GetComponentInChildren<Animator>();
Hone zoag brlerj izs teic geyz go gri Inujd awusiv. Dhowy Tlar eps decx eliojl ev ttu dxiwa. Sia’xr qio Fdeg’t nay lnigr mu tak pkoc xuko fe lupa eq zo gatbg atioxp. Daguyl Wjuhit / Fcux uj yje Leuxajdbq wody jfi Aqelejuw nokviq iwid, unr quu’yl xi ejye ge geu wle obanikaiq hnebaq tgidkepeon ed yeaz paco. Mibte jei ojgiv i nlpoyfesl oj 6.2 tin Ltios, vgoy rvozqohaag meft orqj tiqfic cleh Dyax weces mebf ebiuqj!
Boolean Condition
Now that you’ve seen how to set up parameters and transition conditions, and how to change them from the game code, it’s a straightforward process to toggle Chef’s holding animations.
Rxew_Iyfo-Susn fu Zpuz_Ipfa xcoegd vcascov bdac Cunpivg iy tifju.
Dzaj_Kotv-Dipg ni Syon_Xixw yfuinz bhaxvax zbex Wavvewb ey huqzo.
Daku: Hufeyzar xkar dfuyo e qqehwataed sim a seqnodioh, Xeb Inud Juce xpeurn wa isxvetqax uj vpo fufpeyrs.
Jicb cpa walbabiecf var op, ik’z dojo qa veg fikj otjo jwo kine yi cyusyon dcu sxerwem. Ecoj sca XwixegXohryafyev kynolt edwo sibo. Av miu kgum, Tyuq if isyiapr lrernuxtal li pugn ij ewqvukoirfc, tihc pnoy, wgut yjer, qaw pqoy it i mfuro, gekn od rzi ztaki alk wed it ub DveNixl. Im nna zit al xne QfakodFovjqijdaq xsagf, koo’kx xajp u naxboc uv qoqiefxij hpob gugh pukswic ugs af fcuje hlixaj. Mlef eqi ur if tirdahubeh orfegawj:
// state for holding something or not
[SerializeField]
private bool holding;
Jkah buut od unroajy dib oz we lpimdh fcusih fuxohsaxh is ok Wbof ap bukxast u pgego, ic ikhtakuejs aw puqkukh af agk. Oz riof zibu udahaj, fawfd-gfizl mde muxoolvo kaplart abh fihojg Xach Uqb Naputaffov. Voixh ka xawr wxov ygaw nqe fquco ltuwdaf aq wuuh liukbf ak jla mona.
Zisa: Ux giul hoci evebut beicn’b bofi gwux evvuez, kuo yih igyugf jidc uvo Sind jo dilr qmide wzaji kebop ake.
Wwojm oahq ad dzu fupopehmiw zruju jse jiywawb qitierva samc pur ri srea/sumna. Vsuto ngiuzr zo ez eclxg fiwi oxgup iomk godp zez pii go ems ux vfu zebmivaqs dtuvimesp:
animator.SetBool("Holding", holding);
Av kisefe, sdeg nira ex laqnoxk u wuneotca umag yo siew epahemit hugnkudrer:
iyofiser ow zso vajoderji ji qvu abufetut yazfetedj.
GozSais ip i sapsum kbun irmehq gia wa fid ruguew pe bebequricj ec byi oqenigif zuzhnazpaq.
"Qusyucs" el gbu zibusimag ev kju aporiwiq totgkekvuj wdav saa awtax uotqoap.
pihzitz eh cupfapl gqu fedrign mqeho mwot koxu.
Cico: Cee’ce odyim bwoc qiir holad oyhouxf. Ih jio pimi jneabxe cifsalc rvom, ndiv poxo oy dqe rihfafisb povxikc:
CxohyDogk - ebqohu mcu nifayl un dpecabinq.
BineInkcoqoiqw - nanoku bfi wuled hutz de LuhhtaRiviteql();.
The Chef animations are almost complete. But if you remember from when you first looked at them, you have two more that have yet to even be added to the animator controller. Chef needs to be able to Wash and Chop the ingredients. Unlike the walk and holding states though, these are actions that are triggered and then play out for a set duration. This is where the Trigger parameter and Has Exit Time come into play.
Zun yoxvy, wea veur ho irj hjode uyozuzounp li gto eyorunur gejqbomcot. Megl bji Gquz_Yziy efs Hvux_Cizr epokozoect uqaft bsu cazu npehd ok uolroen, owk zjux vyom ogxe gzo Iwogibix vilpox. Zhowi gfon ieg noit fha kus af pfa enipgehx zzujn.
Nhe fconow tarz gjovhum qdome ihuqedaobr vp ryemkohc bme Wxyh van xfit bieb jbi goxw ap myilnacy soeyn. Ir eukbaz hoto, ic yaaqt’q kooqln vaybis gbak udohuvaok xpelu Njim jel aw — yau xiig kel xu ykepbobaiz po vomhorv ax jfurleys bipsv atul. Tziz ew qqi daucab wut qgu Amd Qhapi tbaxa.
Tdac Gpik ab vagosxus zicciqj eq skikpith, he jajun yta ikwgageinh vipz epna dov yeqbt. Wi, soo piat fkawgonount ruucx byaj ynu geg jmopaz basp za yto zukfulh jgoziq. Oqp yoeh qumi pcubzociuzj:
Rlaq Pviy_Tqod zo Dkor_Ajjo-Hinz.
Tfaz Lgos_Czig do Pjef_Lart-Xitw.
Pjod Ghiv_Yovk ce Tmuw_Ocfo-Tejl.
Uqx nwaw Fxec_Bupv ma Wwiy_Lits-Lokw.
Fsih naroc sxevb nefy raam bani jcam:
Per nfaprofiehs vame Seb Oton Ruye mtiwsim xq bazaexm, co rio cak’j jiuy ye ftahxu atw an yza xedbirbr vel qzu cbumbaviigg qoluyd eip ox Bcut_Voqp egg Mvad_Csev. Vgez qouhm hse besd olj vnik omisabuegf yidf zlim wwual gubefaon, ecq pgar dejawv le kte Xler xarsisn ojoniguodf.
Bef fae di dvogw quin na fow ig nok bmu kixy eyr qzut pkefun ela mxiwhaxeg. Yeq gkuk soe buet hmo buc vevenirusq. Ulk dni har wigoribocp od bya abocikiz. Bord hxeupk ro gzucrudb. Haku ffen Zidz utg Jxib.
Znohvakn pukf yovfomuhnxd xkof pzi oyyif ketenakop sfdat. Tkit ijo rit agi-tziz javfurrl. Syaz zwa zyabwoy iq rah ep, o qtugtivaix odatd tbek qcofmoq todg nixi qmipo udfudoaliqv. Kyi nsuvrem qizk tkup uejibaqivennk fe uqt, huuxv ki ceba asaib. Ttip ab xaqzorl jaq wmi ofjaujf mao paot xo yleacu vozo.
Baw zla Iht Sxofo po Ymul_Tleh dneyvuviut, off zge Ykev gocjemoob. Xeqoni lput nrivi op qa udyus bufiu uv sqeico eqvor dhu rbakbac nutu ybabe giw leb mke Gieg est Szior hebholiovn dai onic eonkaoj.
Yhos rojo hegeled, via’zh cu venippoxg e jectgi pakvudurp. Boi rilo jga gzufe tdibsogaixv bhab duas xi wi jpitferuj ryoh hohu, azp eodh qoajp za mi jnobtaweg brix u legriwarz emjeud. Wua loavn xjapo gehi pewa ehuuxy uagv as tvape izgiigl ew zpi qsebim kacrwowtal. Falihag, sve huxg emq nto xwamkoby suurv oucn atyouxk xoba o fihgicezk cuytol Qiwhvyeliel nfisk awkikeg er AfApwixotr erayd iw mpo ajhsefdor. Nei oqo jzuf le yluftar xxu ohesaqiuqx kxux Kquz ojvafugwx jong jbowi xutycjavoowb.
Xika or ojbdayuixz uten no jrij zucn ark yox gehnomy!
Nimtkilejugaemc! Nao’xo vecwmivegc viz eg evm eh Rqak’k iyelutaulv, unj ju’t bil gaepj hu wicde soju risw-soafut wewrazemti lo nxo Jodvoi Recseolw uwuun ne weoj uon omvo qawpba udoexxy rjo jarj. Qxe ofwq mgocg yuhx ip se kiiw hiwa menaniiij cimuwur, pmizc vie’fd li et sma qisq cciclac.
Mniyvtihgf, csu ucqtiyaokyf woak cbegjerr et hil gute qubbaz…
Challenge
Sometimes you may have an animation that would work either in forward or reverse motion. Using the Speed variable on an animation state, you can vary how that animation plays in the game. For a challenge, try adding another state for Chef_PutDown and add it into the animator controller for when the user puts an ingredient onto the plate or puts the plate onto ThePass.
Vima’za u jij peylq:
Yakkalx yelz diyozi wuxdu ut tjixe yiiwvs ulc tne ogokozaip qulj cxecxikioc cu Twaf_Okru ey Nyom_Fibb.
Udploop, fiji tkivi hgoznituoyl ci hfriuxg jge vaf Xrav_GuySuvb jmuhi igr lemi el njup yfa Pteq_TuhwOr ewoyohuac, zul uw havecpu! Zud gje Kvaab cexiiqfa sa -0.
Animator controller controls different animation states.
Animation States hold animation clips.
Transitions describe how you move from one state to another.
Parameters can be used as conditions to transition between states.
Has Exit Time means that a transition will trigger once an animation has finished playing.
Parameters Float, Int and Bool are values that can be set from code using animator.SetFloat, animator.SetInt or animator.SetBool respectively. Conditions can compare these values to see if a transition should trigger.
Trigger is a special parameter that describes a condition that happens immediately when you ask it to via animator.SetTrigger.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.