Bonsoir,
il est tard, je vais faire court :
- pour déplacer/pivoter un objet, il y a plusieurs façons de faire : sans la physique (par le transform), avec la physique (par le rigidbody), les animations (pour mémoire), ... Comme cela a été indiqué plus haut, il faut éviter de mélanger physique et non physique, car cela provoque des comportements étranges.
- avant de choisir l'une ou l'autre des manières, il y a des questions à trancher, comme "mon jeu a-t-il besoin de la physique ?", ou autrement dit, "des objets vont-ils s'entrechoquer ?" ou "ai-je besoin de la gravité ?".
Une fois que tu auras choisi, ce sera plus aisé de t'indiquer le bon chemin. Ton dernier billet ne parle plus de murs et de faire tomber la boule : as-tu vraiment besoin de la physique ?
Si tu persistes dans la physique, il y a une méthode supplémentaire utilisée par Unity : en plus d'Update à chaque frame, il y a
FixedUpdate dans laquelle s'effectuent les calculs de physique. Et leur fréquence d'appel n'est pas la même.
Personnellement, quand je ne peux pas éviter la physique, je fais en gros ceci :
Code : Tout sélectionner
[SerializeField] private float force = 10f; // Dépend de la masse de la boule, de la friction...
[SerializeField] private float rotationForce = 5f; // A régler selon la masse et la friction angulaire.
private Vector3 playerInputs;
private Rigidbody rigidbody;
private void Start () {
rigidbody = GetComponent<Rigidbody> ();
}
private void Update () {
playerInputs = new Vector3 (Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
}
private FixedUpdate() {
Vector3 drection = playerInputs.normalized;
Vector3 forceApplied = direction * force;
// En utilisant AddForce, on applique la force dans le référentiel du monde.
// Les rotations de la boule ne comptent pas.
rigidbody.Add(forceApplied);
// Pour que la boule tourne sur elle-même.
rigidbody.AddTorque(rotationForce);
}
Difficile d'aller plus loin : je ne sais pas pourquoi ta boule tourne sur elle-même (j'ai supposé que c'était pour le fun, comme certaines soucoupes volantes tournent en se déplaçant),
De plus dans ton dernier billet ta boule doit avancer par palier : je ne comprends pas trop. Elle disparaît et réapparaît 1 unité plus loin ?
Si la boule est sur une plaque, et qu'il n'y a pas de murs, pourquoi utiliser la gravité ? (Dans ton premier message, il y a un mur, on ne sait pas trop où, et dans le dernier, tu n'en parles plus. Dans le premier, quand la boule rencontre un mur, la boule se déplace toujours normalement : elle rebondi quand même, elle s'arrête, ou elle traverse le mur ?)
Pour la caméra, il me parait plus simple de la traiter quand le problème de la boule sera réglé.
Pour résumer ce que j'ai compris :
- le terrain est un plane. Il y a 4 murs qui délimitent le terrain. Ces murs empêchent la boule de sortir du terrain (pas de rebond).
- la boule avance (flèche haut) recule (flèche bas), tourne de 90° (flèches gauche et droite). Ces mouvements sont discrets (avance et recule par pas d'une unité).
- pour faire joli, la boule tourne sur elle-même.
Pour moi, la physique est inutile. En plus, ce n'est pas vraiment le premier truc à faire quand on débute.
J'attends une réponse avant d'aller plus loin.