je suis sur un petit projet en ce moment et j'ai un petit soucis :
je souhaite faire tourner un joueur autour d'une sphère dans un premier temps, ce qui est relativement simple.
Cependant, lorsque je clique sur le touche "espace", je veux que celui-ci saute d'une sphère à l'autre, et que lorsqu'il touche cette deuxième sphère, qu'il se mette à tourner autour de celle-ci.
Alors j'ai testé pas mal de choses comme faire ça directement avec Transform.RotateAround, mais les résultats n'étaient pas concluants. Alors je me suis orienté vers le Physics2D.gravity qui m'avait l'air d'être la bonne solution. Mais, alors, je dois faire tourner le joueur autour de la sphère d'une différente manière. J'ai donc pensé à appliquer une force au joueur dans la direction de la tangente à la sphère. Et pour que le joueur saute, je lui appliquerai une force contraire à la force de gravité. Cela parait simple, mais dans mon script ... rien ne fonctionne. Le joueur ne saute pas dans la bonne direction, je ne trouve aucun moyen d'appliquer une force tangente à un sphère (il faudrais alors que j'applique cette force de sorte à ce qu'elle soit perpendiculaire à la force de gravité, donc produit scalaire entre les deux vecteurs = nul (?) ), et enfin il y a un problème évident au niveau de la gravité mais je ne sais pas lequel.
Pour que vous compreniez mieux mon problème je vous fait un schéma vous résumant ce que j'attends de mon joueur, je vous montre mon script puis je vous met un lien afin que vous puissiez voir par vous même le résultat.
Voici un schéma de ce que j'attends : Voici l'unique script de la simulation :
Code : Tout sélectionner
public GameObject grav;
public bool isGrounded;
public float jumpForce = 200;
// Use this for initialization
void Start () {
isGrounded = false;
}
// Update is called once per frame
void Update () {
if (grav)
{
Vector2 newGravity = grav.transform.position;
Physics2D.gravity = grav.transform.position - transform.position;
}
if (Input.GetKeyDown(KeyCode.Space))
{
isGrounded = false;
Vector2 jumpDirection = - Physics.gravity * jumpForce;
GetComponent<Rigidbody2D>().AddForce(jumpDirection);
}
if(!isGrounded)
Physics2D.gravity = new Vector2(0, -9.8f);
}
void OnCollisionEnter2D (Collision2D info)
{
if (!isGrounded)
{
isGrounded = true;
grav = info.collider.gameObject;
}
}
public void ReloadScene()
{
SceneManager.LoadScene(0);
}
Fichier ZIP du rendu
Pouvez-vous me dire si le problème vient de l'idée ou du script ? Avez-vous une autre idée de comment faire cela ?
Merci d'avance.