[RESOLU]Mouvement de rotation dans un torus
[RESOLU]Mouvement de rotation dans un torus
Bonjour à tous.
Je commence un nouveau petit projet et pour vous expliquer mon problème je pense qu'il faut que je vous montre.
Voici une petite image de mon projet (ne faites pas attention aux matériaux c'est vraiment moche)
J'aimerai que la capsule (qui sera à terme le joueur) tourne à l'intérieur du torus. Je pense que le script de déplacement ne sera pas compliqué car c'est un mouvement constant. Mais c'est au niveau de la gravité. J'aimerai que la capsule sois attiré par le torus en tout points.
Malgrès toute mes recherches je n'y arrive encre pas c'est pour cela que je fais appelle à vous.
Merci beaucoup si vous pouvez m'aider !
Je commence un nouveau petit projet et pour vous expliquer mon problème je pense qu'il faut que je vous montre.
Voici une petite image de mon projet (ne faites pas attention aux matériaux c'est vraiment moche)
J'aimerai que la capsule (qui sera à terme le joueur) tourne à l'intérieur du torus. Je pense que le script de déplacement ne sera pas compliqué car c'est un mouvement constant. Mais c'est au niveau de la gravité. J'aimerai que la capsule sois attiré par le torus en tout points.
Malgrès toute mes recherches je n'y arrive encre pas c'est pour cela que je fais appelle à vous.
Merci beaucoup si vous pouvez m'aider !
Dernière édition par Exsize le 27 Juil 2020 12:10, édité 1 fois.
Re: Mouvement de rotation dans un torus
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: Mouvement de rotation dans un torus
Bonjour.
Malgrès le code donné dans l'autre topic, impossible de faire bouger ma capsule à l'intérieur du torus. Néanmoins la gravité fonctionne tout autour du torus même si la capsule "tremble" un peu.
Auriez-vous une solution pour que la capsule se déplace toute seule dans le torus seulement sur l'axe x, y ?
Merci d'avance !
Malgrès le code donné dans l'autre topic, impossible de faire bouger ma capsule à l'intérieur du torus. Néanmoins la gravité fonctionne tout autour du torus même si la capsule "tremble" un peu.
Auriez-vous une solution pour que la capsule se déplace toute seule dans le torus seulement sur l'axe x, y ?
Merci d'avance !
Re: Mouvement de rotation dans un torus
Poste le code que tu utilises, cela peut servir de base et voir ce qui pourrait être corrigé pour que cela soit plus fonctionnel.
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: Mouvement de rotation dans un torus
Voilà voilà
Code : Tout sélectionner
public class MovementPlayer : MonoBehaviour
{
public float speedMove = 4; //vitesse de déplacement
public float speedRot = 120; //vitesse de rotation
public float smoothRot = 10; //amortissement dans les angles du sol
public float jumpHeight = 1f; //Hauteur pour le saut
public float jumpForce = 40000; //Force pour le saut
public float gravity = 50; //Force pour la gravité
bool onGround = false;
float distanceToGround;
Vector3 groundNormal;
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.freezeRotation = true;
}
private void FixedUpdate()
{
//Envoie un rayon verticalement vers le bas
RaycastHit hit = new RaycastHit();
Ray ray = new Ray(transform.position, -transform.up);
//le layer 8 correspond à tout ce qui représente un "sol"
int mask = 1 << 8;//ne réagit qu'au layer 8
if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
{
//si le player est tout près du sol = true
distanceToGround = hit.distance;
onGround = distanceToGround < 0.1f;
//applique la rotation pour que le player soit perpendiculaire au "sol"
groundNormal = hit.normal.normalized;
Quaternion targetRot = Quaternion.FromToRotation(transform.up, groundNormal) * transform.rotation;
transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, smoothRot * Time.deltaTime);
}
else
//on est dans le vide
onGround = false;
if (!onGround)
{
//si on touche pas le sol on applique la gravité
rb.AddForce(groundNormal * -gravity);
}
else
{
//si on est au sol on peut sauter
float j = Input.GetAxis("Jump");
if (j != 0)
rb.AddForce(transform.up * jumpForce * jumpHeight );
}
//et dans tous les cas on peut avancer
float x = Input.GetAxis("Vertical") * Time.deltaTime * speedMove;
transform.Translate(x, 0, 0);
}
}
Re: Mouvement de rotation dans un torus
petite question : as-tu besoin de la physique ? est-ce que cela fait parti de ton gameplay
Parce que sinon, si c'est juste pour déplacer une capsule à l’intérieur d'un torus, pas besoin de la physique, juste d'un peu de trigo
Parce que sinon, si c'est juste pour déplacer une capsule à l’intérieur d'un torus, pas besoin de la physique, juste d'un peu de trigo
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: Mouvement de rotation dans un torus
Malheureusement oui...
Le joueur va courir dans le torus et éviter des obstacles. La physique de mon jeu est dans le même style que le jeu « run around »
https://play.google.com/store/apps/deta ... rena&gl=FR
J’aurai peut être du commencer par là pour vous expliquez
Le joueur va courir dans le torus et éviter des obstacles. La physique de mon jeu est dans le même style que le jeu « run around »
https://play.google.com/store/apps/deta ... rena&gl=FR
J’aurai peut être du commencer par là pour vous expliquez
Re: Mouvement de rotation dans un torus
Dans ce cas, le code que tu fournis semble être une base de départ, moyennant quelques ajustements.
A la louche et en le reprennant:
A la louche et en le reprennant:
Code : Tout sélectionner
void Start()
{
rb = GetComponent<Rigidbody>();
rb.useGravity = false;
rb.constraints = RigidbodyConstraints.FreezeRotation;
}
private void FixedUpdate()
{
//et dans tous les cas on peut avancer
float x = Input.GetAxis("Vertical") * Time.deltaTime * speedMove;
transform.Translate(x, 0, 0);
//Envoie un rayon verticalement vers le bas
RaycastHit hit = new RaycastHit();
Ray ray = new Ray(transform.position, -transform.up);
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
//si le player est tout près du sol = true
onGround = hit.distance < ((sizeCapsule/2.0f)+0.1f);
//applique la rotation pour que le player soit perpendiculaire au "sol"
groundNormal = hit.normal.normalized;
Quaternion targetRot = Quaternion.FromToRotation(transform.up, groundNormal) * transform.rotation;
transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, smoothRot * Time.deltaTime);
}
else
{ //on est dans le vide
onGround = false;
}
if (!onGround)
{
//si on touche pas le sol on applique la gravité
rb.AddForce(groundNormal * -gravity);
}
else
{
//si on est au sol on peut sauter
float j = Input.GetAxis("Jump");
if (j != 0)
{
rb.AddForce(transform.up * jumpForce);
Debug.Log("JUMP");
}
}
}
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: Mouvement de rotation dans un torus
Merci de tes réponses !
Néanmoins ma capsule est seulement attiré par le torus donc la gravité marche mais la capsule ne se déplace pas autour. dès lors que la capsule touche le torus plus rien ne se passe. De plus il y a toujours ce petit tremblement de la capsule qui survient même quand cette dernière est dans les aires.
Tout cela est bien compliqué et peut être irréalisable en 3d je ne sais pas.
Je cherche moi aussi de mon coté une solution mais si tu as une idée je suis preneur !
Néanmoins ma capsule est seulement attiré par le torus donc la gravité marche mais la capsule ne se déplace pas autour. dès lors que la capsule touche le torus plus rien ne se passe. De plus il y a toujours ce petit tremblement de la capsule qui survient même quand cette dernière est dans les aires.
Tout cela est bien compliqué et peut être irréalisable en 3d je ne sais pas.
Je cherche moi aussi de mon coté une solution mais si tu as une idée je suis preneur !
Re: Mouvement de rotation dans un torus
Bonjour,
je viens de tester vite fait, et cela fonctionne pas mal (code que j'ai posté plus haut). Peut-être une histoire de réglage de ton coté.
(après, gérer la physique, on le répète souvent, c'est pointu)
je viens de tester vite fait, et cela fonctionne pas mal (code que j'ai posté plus haut). Peut-être une histoire de réglage de ton coté.
(après, gérer la physique, on le répète souvent, c'est pointu)
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