Rigidbody2D + velocity bugs [résolu]
Rigidbody2D + velocity bugs [résolu]
Bonjour,
J'ai un problème étrange, depuis que je suis passé sur Unity 2019.4.2f1, le fais d'utiliser le rigidbody.MovePosition, bloque toutes les vélocités. Par exemple si mon personnage utilise de la vélocité pour tout ce qui de tomber ou autres et qu'il bouge de gauche à droite à l'aide de .MovePosition alors la velocité du personnage pour tomber bloqué et le personnage reste dans les airs.
Par-contre si à la place de rigidbody.MovePosition, j'utilise le transform.localPosition (ou position), + le vector de mouvement alors ici je n'ai aucun soucis.
Je suppose que c'est choisis et non un bug puisqu'on retrouve ceci est également sur la version 2020, mais du coup j'ai quelques questions.
- J'ai l'impression que maintenant faire bouger tes objets avec transform directement effectue les mêmes calcules qu'avec le rigidbody.moveposition, à savoir empêcher que tes collisions se chevauche et avoir l'impression que tes objets saccadent contre un mur par exemple, est-ce réellement le cas du coup?
- Le fais que movePosition maintenant bloque la vélocité, qu'est ce qu'il se passe du coup? est ce que la vélocité est mis en "pause" et reprend de la ou elle en était une fois qu'il n'y ait plus de movePosition? ou elle est-ce qu'elle se cumule / s’arrête en fonction du drag ou autre?
Merci,
J'ai un problème étrange, depuis que je suis passé sur Unity 2019.4.2f1, le fais d'utiliser le rigidbody.MovePosition, bloque toutes les vélocités. Par exemple si mon personnage utilise de la vélocité pour tout ce qui de tomber ou autres et qu'il bouge de gauche à droite à l'aide de .MovePosition alors la velocité du personnage pour tomber bloqué et le personnage reste dans les airs.
Par-contre si à la place de rigidbody.MovePosition, j'utilise le transform.localPosition (ou position), + le vector de mouvement alors ici je n'ai aucun soucis.
Je suppose que c'est choisis et non un bug puisqu'on retrouve ceci est également sur la version 2020, mais du coup j'ai quelques questions.
- J'ai l'impression que maintenant faire bouger tes objets avec transform directement effectue les mêmes calcules qu'avec le rigidbody.moveposition, à savoir empêcher que tes collisions se chevauche et avoir l'impression que tes objets saccadent contre un mur par exemple, est-ce réellement le cas du coup?
- Le fais que movePosition maintenant bloque la vélocité, qu'est ce qu'il se passe du coup? est ce que la vélocité est mis en "pause" et reprend de la ou elle en était une fois qu'il n'y ait plus de movePosition? ou elle est-ce qu'elle se cumule / s’arrête en fonction du drag ou autre?
Merci,
Dernière édition par Warcza le 14 Juil 2020 18:55, édité 1 fois.
(╯°□°)╯︵ ┻━┻
Re: Rigidbody2D + velocity bugs
Bonjour,
on parle bien de Rigidbody2D, et non pas de Rigidbody (dans la description de ton problème, cela sème un peu le doute).
Sinon, poste ton code, pour y voir plus clair.
on parle bien de Rigidbody2D, et non pas de Rigidbody (dans la description de ton problème, cela sème un peu le doute).
Sinon, poste ton code, pour y voir plus clair.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Rigidbody2D + velocity bugs
Oui, c'est bien rigidbody2D,
Pour le mouvement je fais juste ceci dans un fixeUpdate :
J'execute cette ligne seulement quand la magnitude de currMove est supérieure a 0, et lorsque c'est le cas peut importe de ou et quand on applique de la vélocité (même celle par défaut du rigidbody2D), la vélocité est bloqué en quelques sorte, comme si le MovePosition écrasé la position que devrait avoir l'objet avec la vélocité.
Mais par-contre dans le cas de la gravité, la vélocité se cumule.
Mais si je remplace cette ligne de code par
Je n'ai aucun problème, et pas de problème étrange lié aux collisions avec une grande vitesse, donc je sais pas trop ce qu'Unity à fais comme modification, mais voila
Pour le mouvement je fais juste ceci dans un fixeUpdate :
Code : Tout sélectionner
thisRig.MovePosition (thisTrans.localPosition + (Vector3)currMove);
Mais par-contre dans le cas de la gravité, la vélocité se cumule.
Mais si je remplace cette ligne de code par
Code : Tout sélectionner
thisTrans.localPosition += (Vector3)currMove;
(╯°□°)╯︵ ┻━┻
Re: Rigidbody2D + velocity bugs
je viens d'essayer l'exemple de la doc, et cela semble bien fonctionner (Unity 2019.4)
Ceci dit, dans la doc, il est bien spécifié: During the move, neither gravity or linear drag will affect the body. This causes the object to rapidly move from the existing position, through the world, to the specified position.
Ceci dit, dans la doc, il est bien spécifié: During the move, neither gravity or linear drag will affect the body. This causes the object to rapidly move from the existing position, through the world, to the specified position.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Rigidbody2D + velocity bugs
MMh, ben si j'utilise l'exemple ici : https://docs.unity3d.com/ScriptReferenc ... ition.html en changeant le rigidbody par le rigidbody2D et que je vire le "kinematic = true", si je le place en hauteur et que je play, alors j'obtiens le même résultat.
L'objet descend très lentement, beaucoup plus que si je désactive le script, mais je suppose que du coup c'est lié à l'extrait de la doc que tu as mis.
J'ai record un petit exemple si jamais:
https://www.dropbox.com/s/v241rci1iiq9u ... 2.mp4?dl=0
Du coup pour le code au-cas ou j'ai ceci :
L'objet descend très lentement, beaucoup plus que si je désactive le script, mais je suppose que du coup c'est lié à l'extrait de la doc que tu as mis.
J'ai record un petit exemple si jamais:
https://www.dropbox.com/s/v241rci1iiq9u ... 2.mp4?dl=0
Du coup pour le code au-cas ou j'ai ceci :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{
public Rigidbody2D rb;
void Awake()
{
// Creates the floor.
GameObject floor = GameObject.CreatePrimitive(PrimitiveType.Plane);
floor.transform.localScale = new Vector3(6.0f, 1.0f, 6.0f);
floor.transform.position = new Vector3(0.0f, -0.5f, 0.0f);
Material matColor = new Material(Shader.Find("Standard"));
matColor.color = new Color32(32, 32, 128, 255);
floor.GetComponent<Renderer>().material = matColor;
Camera.main.transform.position = new Vector3(6.0f, 4.0f, 6.0f);
Camera.main.transform.localEulerAngles = new Vector3(26.0f, -135.0f, 0.0f);
}
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
rb.MovePosition(transform.position + transform.right * Time.fixedDeltaTime);
}
}
(╯°□°)╯︵ ┻━┻
Re: Rigidbody2D + velocity bugs
je parlais de l'exemple de Rigidbody2D.MovePosition (quitte à faire).
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Rigidbody2D + velocity bugs
pour moi, tant que MovePosition s"exécute, tu n'aura pas de valeur de vélocité sur ton RB, comme spécifié dans la doc. Ce qui parait logique dans la mesure où un MovePosition est un déplacement en "dur" si je puis dire, et qui s'affranchis de la gravité.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Rigidbody2D + velocity bugs [résolu]
Ouai surement, c'est bizarre du coup que sur les versions d'avant la combinaison des deux marchés, ça veut dire que c'était bugué depuis tout ce temps? x).
Mais ouai ok ça marche,
Merci bien tout cas
Mais ouai ok ça marche,
Merci bien tout cas
(╯°□°)╯︵ ┻━┻
Re: Rigidbody2D + velocity bugs [résolu]
Non je ne pense pas. Il faudrait regarder la doc de MovePosition au niveau des version précédentes d'Unity et voir si effectivement il y a des différences qui pourraient expliquer ce changement de fonctionnement apparent.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ