J'essaie de produire la chose suivante :
Comme vous pouvez le voir dans l'image jointe, j'ai une sorte de catapulte.
L'animation se jouera sur mobile.
Le fait de taper sur l'écran revient à exercer une force verticale sur la partie de droite.
La catapulte bascule donc.
Mais, je souhaite que si je garde mon doigt sur l'écran, la catapulte reste basculée et ce n'est que lorsque j'enlève mon doigt qu'elle revient dans sa position initiale.
Voici ce que j'ai fait:
- la catapulte est constituée d'un seule sprite
- Rigidbody 2D
- Hinge Joint placé au niveau de la boule qui permet la bascule
- je défini des "Angles limites" sur le Hinge Joint (lower 24 / upper 1)
- j'active le motor pour avoir un retour automatique : speed = -1000 / max force = 100
Dans mon code j'utilise addTorque()
ça fonctionne presque : la rotation est bien appliquée et la catapulte se limite bien dans son mouvement
Lorsque je relâche l'écran, le motor remet la catapulte dans sa position initiale.
Pour maintenir la catapulte basculée, je teste la phase de touch et si on est sur "Stationary", je continue à envoyer un addTorque()
Malheureusement, sur un mobile, avec le framerate, on voit la catapulte trembler légèrement lors du maintien.
Ma question est donc :
Comment faire en sorte de bloquer dans sa position "basculée" ma catapulte ?
Est-ce que je dois utiliser un freezeRotation sur le Rigidbody pendant la phase Touch.Stationary ou un trick de ce genre ?
Merci par avance de votre aide
Code : Tout sélectionner
public float torqueSpeed = 1000f;
private Rigidbody2D rb2D;
// Start()
rb2D = GetComponent<Rigidbody2D>();
// FixedUpdate()
Touch touch = Input.GetTouch(0);
switch (touch.phase) {
case TouchPhase.Began:
rb2D.AddTorque(-torqueSpeed);
break;
case TouchPhase.Stationary:
rb2D.AddTorque(-torqueSpeed);
break;
}