๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

๐Ÿšถ Pertsonaia Dabil, Baina Zergatik Lekuan? Unity Root Motion Arazoak Konpontzeko Gida

by LemonDKel 2025. 10. 5.
๋ฐ˜์‘ํ˜•

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.

  1. Proiektu Leihoan (Project Window), hautatu pertsonaiaren animazio fitxategia (FBX).
  2. Inspektore leihoan, Animations fitxara joan eta erabiltzen ari zaren animazio klipa (adibidez, "Walk", "Run") hautatu.
  3. 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

  1. 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:

C#
 
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!

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€