J'ai fait un script rattaché à chaque entité (slim) qui va lire les actions qu'il doit faire, et un autre non MonoBehaviour où sont répertoriés les actions (je sais pas si c'est comme ça qu'il faut faire mais bon j'essaye ).
Aucun problème pour l'action de destination aléatoire, mais pour la rotation aléatoire il y a un problème.
Aucun message d'erreur, ils font les rotations correctement mais au bout d'un moment ils se bloquent et n'arrive plus à atteindre la rotation voulue.. Du coup l'action est toujours en cours. Ce n'est jamais au même moment, et avec des rotations différentes. J'ai déjà testé de changer les degrés aléatoire de la rotation, le Slerp en Lerp etc... mais sans succès car je ne sais même pas a quel moment ca merde.
Le fait que le problème survienne qu'après avoir laissé tourner le jeu un moment me perturbe et je bloque depuis un moment là dessus... Si quelqu'un a une idée j'en serai ravie!
Script sur le slim ( MonoBehaviour )
Code : Tout sélectionner
void ActionsMaker()
{
//S'il a des actions a faire et qu'aucune n'est en cours
if (actions.Count > 0 && currentAction == false)
{
//S'il doit faire une action aléatoire, choisit aléatoirement un angle
if(actions[0] == "randomRotate")
{
randomDegrees = Random.Range(10,91);
}
//Action en cours
currentAction = true;
}
} //Appelé dans la fonction Update()
Code : Tout sélectionner
void UpdateCurrentAction()
{
//Si une action est en cours
if (currentAction == true)
{
//Met a jour les actions
SlimActions.UpdateActions(transform, actions[0]);
}
} //Appelé dans la fonction Update()
Code : Tout sélectionner
public static void UpdateActions(Transform slim, string action)
{
//Definitions
SlimMotor slimMotor = slim.GetComponent<SlimMotor>();
if(action == "randomRotate")
{
Debug.Log("rotating...");
//Rotation
Quaternion randomRotation = Quaternion.Euler(slim.rotation.x, slimMotor.randomDegrees, slim.rotation.z);
slim.rotation = Quaternion.Slerp(slim.rotation, randomRotation, 2 * Time.deltaTime);
//Si la rotation est terminée
if (slim.rotation == randomRotation)
{
//Supprime l'action
slimMotor.actions.Remove(action);
//Plus d'action en cours
slimMotor.currentAction = false;
}
}
}