Je vais pas tout mettre le code mais juste ce qui est important et décrire le reste.
Pour commencer j'ai déclaré tout mes bones en Transform, la Methodes qui s'appelle MapBones() me rentre les bones déclaré dans un tableau (les lies après en drag and drop avec les bones du perso)
Code : Tout sélectionner
void Start(){
// !!!! A faire !!!!: Mapping des articulationsIRL au depart
bones = new Transform[ARRAYLENGTH];
initialDirections = new Quaternion[ARRAYLENGTH];
boneDirections = new Quaternion[ARRAYLENGTH];
MapBones();
GetInitialDirections();
}
Code : Tout sélectionner
void GetInitialDirections() { // Initialise les directions de Bones (voir pour un reset)
for(int i = 0 ; i < bones.Length ; i++) {
initialDirections[i] = bones[i].localRotation; // Envoie la position actuel pour initialisation
boneDirections[i] = bones[i].localRotation; // Retient la position actuel
}
}
void UpdateDirections() { // Mets a jours la direction des bones après une rotation
for(int i = 0; i < bones.Length; i++) {
boneDirections[i] = bones[i].localRotation;
}
}
void RotateJoint(int bone, float angle) { // effectue la rotation puis envoi vers la mise a jours de la direction du bones
if(bones[bone] != null) {
Quaternion target = Quaternion.Euler(0, 0, angle); // Definie l'angle cible (sur Z)
bones[bone].localRotation = target * boneDirections[bone]; // Effectue la rotation
UpdateDirections(); // Envoie vers la mise a jours du Bones
}
}
Code : Tout sélectionner
void Update(){
if(Input.GetKey ("a") == true){ //Teste
RotateJoint(2,50);
print ("rotation effectué");
}
}
qui me cible la méthodes GetInitialDirections () a la ligne "initialDirections = bones.localRotation;"NullReferenceException: Object reference not set to an instance of an object
Pantin.GetInitialDirections () (at Assets/Scripts/Pantin.cs:127)
Pantin.Start () (at Assets/Scripts/Pantin.cs:53)
Si je passe outre et que j'appuie sur la touche A, la nuque pivote bien comme demandé mais une fois seulement après vient une autre erreur qui me cible cette ligne "boneDirections = bones.localRotation;"
Pas sorcier de comprendre qu'il y a un problème dans les tableau qui stock les données quelque part la dedans
Code : Tout sélectionner
private Transform[] bones; // Tableau de stockage des Bones
private Quaternion[] initialDirections; // Stock les directions initiale des Bones (pour un eventuel reset)
private Quaternion[] boneDirections; // Stock les directions des Bones
private int ARRAYLENGTH = 3;
void Start(){
// !!!! A faire !!!!: Mapping des articulationsIRL au depart
bones = new Transform[ARRAYLENGTH];
initialDirections = new Quaternion[ARRAYLENGTH];
boneDirections = new Quaternion[ARRAYLENGTH];
MapBones();
GetInitialDirections();
}
Pour information le code est pas de moi je me suis grandement inspiré de ca http://answers.unity3d.com/questions/43 ... as-in.html