vendredi 27 janvier 2012

Faire marcher le Pawn Anim et le Root Motion

C'est cette partie qui m'as volé ma semaine car elle touchait au code... Je suis ignorante du UnrealScript : je suis parvenue à mes fins en copiant les partie de code trouvés ça et là qui me semblaient avoir un effet.

La première chose était de faire fonctionner le node Pawn Anim de Kismet. NADPawn est dérivé du Pawn très de base de UDK qui ne comprend pas cette action Kismet.
Il faut ensuite setter le root motion. Oui dans le code, je vais vous expliquer pourquoi.

Pawn Anim va chercher dans le Anim Tree de l'actor target un AnimNodeSlot. Comme celui là :
L'animation spécifiée dans Pawn Anim utilise les Channel vide de ce node. 
Pour setter le root motion il faut aller dans un AnimNodeSequence. Comme celui là : 
Bref, comme Pawn Anim n'utilise pas ce genre d'animnode il faut stter le root motion dans le code qui s’exécute lorsque Pawn Anim est appelé. 

Pour plus d'info sur le Root Motion allez sur la page de l'UDN, c'est très clair : http://udn.epicgames.com/Three/RootMotion.html


Bref : pour que tout marche correctement, il faut ajouter ces parties au code de NADPawn :


var AnimNodeSlot FullBodyAnimSlot;

simulated event PostInitAnimTree(SkeletalMeshComponent SkelComp)
{
if (SkelComp == Mesh)
{
FullBodyAnimSlot = AnimNodeSlot(Mesh.FindAnimNode('FullBodySlot'));
}
}

function enableRootMotion()
{
        // tell mesh to use Root Motion to translate the actor
        Mesh.RootMotionMode = RMM_Translate;

        // Tell mesh to notify us when root motion will be applied,
        // so we can seamlessly transition from physics movement to animation movement
        Mesh.bRootMotionModeChangeNotify = TRUE;
}


 //Fonction appelé par Pawn Anim
function OnPlayAnim( UTSeqAct_PlayAnim InAction )
{
if( FullBodyAnimSlot != None )
{
FullBodyAnimSlot.PlayCustomAnim(InAction.AnimName, 1.0, 0.2, 0.2, InAction.bLooping, true);
Mesh.RootMotionMode = RMM_Translate;
FullBodyAnimSlot.SetRootBoneAxisOption(2, 2, 0);
}
}


Ça doit paraître très simple pour quiconque s'y connais un minimum en UnrealScript mais bon... j'apprendrait un jour :P

Aucun commentaire:

Enregistrer un commentaire