John Lemon tutoretzan pertsonaia inplementatu duzunean, ibiltzeko edo korrika egiteko animazioa normala izan arren, joko-objektuaren kokapena ez bada aldatzen eta biraketa bakarrik egiten badu, ia ziur Unityren Root Motion (Erro Mugimendua) ezarpenarekin arazo bat duzu.
๐ Arrazoi Nagusia: Animazioaren 'Mugimendu Informazioa' Baztertua
Pertsonaiaren animazio fitxategiek (normalean FBX) pertsonaiak egin duen kokapen aldaketaren (Transform) informazioa dute. Baina Unityk erabakitzen du informazio hori automatikoki aplikatu ala ez joko-objektuaren Transform-ean.
| Fenomenoa | Ezarpenaren Arrazoia |
| Animazioa lekuan geldituta ikusten da | Root Motion Ez Dago Aplikaturik edo 'Baking' Egin Da |
| Pertsonaiaren Transform kokapena ez da aldatzen | Script edo Unity Ezarpenak Mugimendua Baztertzen Dute |
| Biraketa normala da | Script-ak Biraketa modu independentean kudeatzen du |
๐ ๏ธ Arazoa Konpontzeko 3 Urratsak
John Lemon tutoretzan, pertsonaiaren mugimendua Script bidez Root Motion eskuz kontrolatuz kudeatu ohi da. Hori dela eta, Unityk mugimendua automatikoki kudeatu ala script-ak kudeatu behar duen aztertu behar da.
1. Urratsa: Pertsonaiaren Animator Osagaia Egiaztatu
Lehenik eta behin, pertsonaiaren joko-objektuari atxikitako Animator osagaia aztertu behar duzu.
- Apply Root Motion laukia aztertu.
- Markatuta badago (Aktibatuta): Unityk animazioaren mugimendu informazioa automatikoki aplikatuko du. Hala ere, mugitzen ez bada, 2. urratsera pasa behar duzu.
- Markatu gabe badago (Desaktibatuta): Script-ak (normalean OnAnimatorMove() funtzioa) du mugimenduaren ardura osoa. Kasu honetan, 3. urratseko Script arazoa aztertu.
๐ก John Lemon Tutoretzako Ohiko Modua: Tutoretzan, normalean, Apply Root Motion desaktibatu eta Animator.deltaPosition erabiliz mugimendua eskuz kudeatzen duen script bat erabiltzen da.
2. Urratsa: Animazio Kliparen Ezarpenak (Funtsezkoa)
Mugimendu informazioa baztertzearen arrazoi ohikoena animazio kliparen ezarpenetan "mugimendua jarreran laberatzea" (Bake Into Pose) hautatu izana da.
- Proiektu Leihoan (Project Window), hautatu pertsonaiaren animazio fitxategia (FBX).
- Inspektore leihoan, Animations fitxara joan eta erabiltzen ari zaren animazio klipa (adibidez, "Walk", "Run") hautatu.
- Beheko Root Transform Position (XZ) sekzioa zabaldu.
| Ezarpenaren Izena | Arazoa Konpontzeko Gomendatutako Balioa | Azalpena |
| Root Transform Position (XZ) | Original edo Based Upon (Start) | Balio hau Bake Into Pose bada, animazioaren benetako mugimendu horizontala (XZ ardatza) baztertzen da. Original moduan ezarri behar duzu mugimendu informazioa atera dadin. |
Ezarpenak aldatu ondoren, ezinbestekoa da beheko Apply botoia sakatzea aldaketak aplikatzeko.
3. Urratsa: Scriptaren (OnAnimatorMove) Egiaztapena
- urratsean Apply Root Motion desaktibatu eta script bidez kontrolatzea aukeratu baduzu (tutoretzako modua), mugimendua kudeatzen duen script-aren OnAnimatorMove() funtzioa aztertu behar duzu.
Funtzio honetan pertsonaiaren mugimendua kudeatzeko funtsezko kodea honen antzekoa izango da:
void OnAnimatorMove()
{
// Mugimenduaren tratamendua hemen bakarrik egin behar da.
// m_Animator.deltaPosition Root Motion bidez ateratako animazioaren mugimendu kopurua da.
m_Rigidbody.MovePosition(m_Rigidbody.position + m_Animator.deltaPosition);
// Biraketa script-ean aparte kudeatu daiteke.
// m_Rigidbody.MoveRotation(m_Rotation);
}
๐จ Arazketa Puntua: Animator.deltaPosition Balioa Egiaztatu
OnAnimatorMove() funtzioaren barruan, Debug.Log(m_Animator.deltaPosition); gehituz, balio honek animazioa erreproduzitzean 0 ez den beste balio bat itzultzen duen ala ez egiaztatu.
- deltaPosition 0 bada: Animazio kliparen ezarpenak (2. urratsa) gaizki daude, eta mugimendu informazioa ez da ateratzen. (2. urratsa berriro aztertu!)
- deltaPosition 0 ez bada: Script-ak m_Rigidbody.MovePosition erabiliz kokapena behar bezala eguneratzen duela egiaztatu behar duzu kodearen logika aztertuz.
๐ก Azken Laburpena: Mugitzen Den Pertsonaia Lortu
Pertsonaia mugitu gabe biraketa bakarrik egitearen arrazoia animazioaren mugimendu informazioa Unityren Transform-era pasatzeko prozesua blokeatuta dagoelako da.
| Egoera | Konponbidea |
| Mugimendu automatikoa nahi denean | Animator osagaiaren Apply Root Motion aktibatu. |
| Script bidez eskuz kontrolatu nahi denean | 1. Animazio Kliparen Ezarpenetan Root Transform Position (XZ) Bake Into Pose ez den balio batean ezarri. 2. OnAnimatorMove() funtzioan Animator.deltaPosition erabiliz Rigidbody.MovePosition deitu. |
Goiko 3 urrats hauek jarraituz, John Lemon tutoretzako pertsonaiak azkenean gela barruan pozik ibiltzen ikusi ahal izango duzu!
๋๊ธ