J'ai une petit problème pour lequel je n'arrive pas à trouver une solution:
Dans mon jeu,
Mon player est équipé d'un rigidbody, pour la gravité.
et je peux le déplacer en cliquant sur le sol.
pour préciser sa position, ou reculer un peu je peux le déplacer avec la roulette de la souris,
Dans les déplacements vers le clic les collisions sont respectées, et mon player glisse le long des obstacles quand c'est possible pour contourner l'obstacle.
Par contre, à la commande avec la roulette, si j'arrive contre un obstacle, il continue son déplacement.
voici le script que j'utilise:
Code : Tout sélectionner
private void FixedUpdate()
{
if (move)
{
//réveil
rb.WakeUp();
//respecte la position verticale du player. dest est la position cible à atteindre
dest.y = transform.position.y;
Vector3 dif = dest - transform.position;
//si la distance est plus grande que 1 on avance simplement
if (dif.magnitude > 1f)
rb.MovePosition(transform.position + dif.normalized * speed * 0.2f * Time.deltaTime);
else
{
//Si on est presque arrivé on amorti le déplacement
rb.MovePosition(transform.position + dif * speed * Time.deltaTime);
if (dif.magnitude < 0.2f)
{
//quand on est arrivé, on précise la position et on stoppe
transform.position = dest;
move = false;
}
}
}
else
{
//si on actionne la roulette
float rol = Input.GetAxis("Mouse ScrollWheel");
if (rol != 0)
{
//réveil
rb.WakeUp();
//on déplace selon la valeur de la roulette. Je pense que c'est là que ça coince
rb.MovePosition(transform.position + transform.forward * rol);
}
}
}
J'utilise MovePosition dans les 2 cas. Ce que je ne comprends pas c'est que les collisions sont respectées dans un cas et pas dans l'autre.
Si quelqu'un peut m'apporter quelque précision, ce serait avec plaisir.
merci