05. Pivot modelu

Do scény pridáme hojdaciu stoličku, ale nebude to obyčajná stolička. Bude nevhodne vycentrovaná. To sa pri importovaných modeloch stáva často, tak si ukážeme ako z toho von.

Otvorte si svoj projekt alebo si stiahnite hotový: CupboardApp_04.zip

Stiahnite si 3D model stoličky: Chair.zip a rozbaľte ho do Models
(Model pochádza z Free3D.com)

Zatiaľ nechajme neposlušné materiál tak, tie doriešime keď ostane čas. Teraz umiestnime stoličku do scény a premenujme novo vzniknutý game objekt na Stolicka:

Je mierne väčšia, ale to vieme upraviť v importe modelu. Keď si v assetoch označíme asset chair, v inšpektore vieme pri importe modelu nastaviť Scale Factor na 0.1 (lebo zjavne bol model vyexportovaný z modelovacieho softvéru, ktorý má iné jednotky). Nezabudnime po zmene importu potvrdiť zmeny cez Apply.

Teraz to už vyzerá lepšie. Stolička proporčne zodpovedná skrinke. Problém však je, že keď túto stoličku skúsime rozhojdať ( rotovať okolo Z ) , otáča sa okolo nesprávneho bodu:

Okolo osi Z vieme jednoducho rotovať v inšpektore. Chyťte písmeno Z a ťahajte ho do strán:

Od hojdacieho kresla chceme, aby stred rotácie bol niekde na podlahe. A tu je stred rotácie v strede stoličky, čiže niekde pol metra nad zemou.

Všetky transformácie (otáčanie, posúvanie, pozícia) sa v Unity dejú vzhľadom na pevný bod v game objekte, ktorý sa volá pivot. Ak tento bod neleží v rámci 3D modelu tam, kde by sme ho chceli, máme problém.

Aby nám vizuálne neprekážala Skrinka, môžeme si ju cez inšpektor dočasne schovať:

Ako zmeniť pivot v Unity

Bežné 3D modelovacie nástroje (napríklad 3DS Max, Maya) umožňujú nastaviť pozíciu pivota vzhľadom na 3D model. Unity ale nie je modelovací nástroj a budeme to tu robiť naopak. Budeme nastavovať pozíciu 3D modelu vzhľadom na nový pivot. A ten nový pivot si vytvoríme pomocou kontajnera, do ktorého stoličku zavrieme.

Vytvorte nový game objekt, nazvite ho StolickaContainer nastavte mu pozíciu na (0,0,0)

To bude náš pivot:

Teraz presuňme game objekt Stolicka v hierarchii dovnútra game objektu StolickaContainer. Stane sa jeho potomkom.

Ak si chcete skontrolovať, kde leží ktorý pivot, prepnite si v editore režim Center na Pivot:



Center ukazuje približný geometrický stred objektov, ale nie je to ten bod, okolo ktorého sa dejú animácie a transformácie. Center je užitočný len v editore. Počas behu hry sa narába už len s pivotom.

Tu je porovnanie, kde leží pivot game objektu Stolicka a kde leží pivot game objektu StolickaContainer:

Pivot game objektu Stolicka leží naďalej pol metra nad zemou, ale pivot StolickaContainer leží tam kde sme ho položili: v 0,0,0.

V Unity platí hierarchia, takže veci, ktoré nie sú vnútri nejakého kontajnera, sa otáčajú každá sama. Veci v kontajneri sa otáčajú spolu v s ním:

Keď teraz skúsime otáčať StolickaContainer okolo osi Z, bude sa otáčať aj Stolicka a bude sa otáčať okolo pivotu StolickaContainera:

Poviete si, načo je nám taký pivot, ktorý leží úplne mimo. Nuž na to, že nevieme síce zmeniť pozíciu vlastného pivota game objektu Stolicka, ale vieme meniť pozíciu game objektu Stolicka vzhľadom na nadradený pivot StolickaContainer.

Presuňte game objekt Stolicka tak, aby bol nad pivotom StolickaContainera.

Dôvod, pre ktorý sme si dali pivot do 0,0,0 je ten, že keď hýbeme Stolickou, tak nevidíme pivot StolickaContainera. Ale v bode 0,0,0 má Unity biele vodiace čiary, a to nám pomôže.

Teraz, keď je už Stolicka v rámci StolickaContainer správne umiestnená, môžeme rotovať StolickaContainer okolo osi Z a kreslo sa rozhojdá správne:

V ďalšej lekcii pridáme stoličke animáciu hojdania a spustíme animáciu klikaním na stoličku.

Dokončime stoličku

Ešte nám ostáva napraviť materiály na stoličke. Tento importovaný model je neštandardný tým, že každá jeho súčiastka obsahuje vlastný materiál. Je to otrava, ale našťastie Unity na toto myslí a vieme cez inšpektor upravovať viacero assetov či game objektov naraz.

  • Z assetu chair vyextrahujte materiály do adresára Assets > Models > Chair
  • Označte si všetky tieto materiály

Inšpektor ukazuje spoločné vlastnosti pre tieto materiály:

Takže čokoľvek tu teraz zmeníme, bude sa týkať všetkých označených materiálov naraz. Skúste si napríklad zmeniť Albedo farbu.

  • Priraďte do Albedo textúru chair_initialShadingGroup_BaseColor
  • Priraďte do Metallic textúru chair_initialShadingGroup_OcclusionRoughnessMetallic
  • Priraďte do Normal textúru chair_initialShadingGroup_Normal

Po priradení normálovej mapy (textúry) nás Unity upozorní, že textúra nebola naimportovaná ako normálová mapa. Máme možnosť zmeniť toto vo vlastnostiach importu textúry, ale Unity nám dáva aj rýchlu možnosť Fix now:

Stolička získala pekný materiál lakovaného dreva:

A my môžeme zapnúť naspäť Skrinku a potešiť sa z hotovej scény:

A keďže sa nám Stolicka teraz pretína so Skrinkou, musíme stoličku posunúť trochu bokom.

POZOR. Teraz už posúvame-otáčame game objekt StolickaContainer. Ak by sme manipulovali so samotnou Stolickou, menili by sme jej polohu v rámci kontajnera a tým aj jej polohu voči pivotu.

Podobný postup ako je opísaný v tejto lekcii vieme použiť na to, keď naimportovaný model napríklad leží na boku alebo je inak zle natočený. Vnútri kontajnera ho pomocou jeho vlastných lokálnych transformácií natočíme do správnej polohy a následne už manipulujeme len s kontajnerom.

Na domácu úlohu

  • Odstráňte z hierarchie buttony Open a Close, už ich nebudeme potrebovať.
  • Pridajte do scény nejakú peknú dlážku

Hotový projekt na stiahnutie: CupboardApp_05.zip