Problème Script montgolfières

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
paulqno
Messages : 2
Inscription : 29 Oct 2024 13:45

Problème Script montgolfières

Message par paulqno » 29 Oct 2024 14:31

Bonjour à tous.

Je veux créer un jeu de montgolfière (compétition)
J’ai déjà créer la montgolfière et une windarea et cela fonctionne. Le ballon se déplace correctement.
J’aimerais juste que le ballon rallentisse quand il touche le sol (ou tout autre futur objet comme arbre ect…) mais je n’y arrive pas….

Voici mon code :

Code : Tout sélectionner

using UnityEngine;
 
public class myHotAirBalloon : MonoBehaviour
{
    private Rigidbody rb;
    private bool isGrounded = false;
    private float originalDamping; // Pour stocker la valeur de damping d'origine
 
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.useGravity = false; // La gravité ne doit pas affecter la montgolfière directement
        originalDamping = rb.linearDamping; // Sauvegarde de la valeur de damping d'origine
    }
 
    void Update()
    {
        if (isGrounded)
        {
            // Réduire la vitesse lorsque le ballon est au sol
            rb.linearVelocity /= 3f; // Diviser la vitesse par 3 pour simuler un ralentissement
        }
    }
 
    private void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("WindArea"))
        {
            WindArea windArea = other.GetComponent<WindArea>();
            if (windArea != null)
            {
                // Applique la force de levage
                rb.AddForce(Vector3.up * windArea.strength, ForceMode.Acceleration);
 
                // Appliquer une force horizontale dans la direction du vent
                rb.AddForce(windArea.direction.normalized * windArea.strength, ForceMode.Acceleration);
            }
        }
    }
 
    private void OnCollisionEnter(Collision collision)
    {
        // Vérifie si le collisionneur est un Rigidbody
        if (collision.rigidbody != null)
        {
            isGrounded = true; // On considère que le ballon touche un autre Rigidbody
            rb.linearDamping = 200f; // Appliquer 200 de damping au Rigidbody
        }
    }
 
    private void OnCollisionExit(Collision collision)
    {
        // Vérifie si le collisionneur est un Rigidbody
        if (collision.rigidbody != null)
        {
            isGrounded = false; // Quitte le contact avec le Rigidbody
            rb.linearDamping = originalDamping; // Rétablir le damping d'origine
        }
    }
}




si vous pouvez m’aider. Merci par avance

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6420
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème Script montgolfières

Message par boubouk50 » 29 Oct 2024 15:45

Tu pourrais augmenter le drag du rigidBody, tu pourrais limiter la vélocité du rigidbody, tu pourrais empêcher d'ajouter la force du vent dans le OnTriggerStay (), tu pourrais ajouter une force inverse à la vitesse du vent, etc.

Les solutions ne manquent pas.

Qu'est-ce qui te freine à les mettre en place ?
OnTriggerStay () est une bonne solution, puisqu'elle te permet de gérer à chaque instant le frein.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

paulqno
Messages : 2
Inscription : 29 Oct 2024 13:45

Re: Problème Script montgolfières

Message par paulqno » 29 Oct 2024 15:54

Merci pour le retour !

Ce qui me freine c’est que je suis très novice et je galère a trouvé le bon codage ! :gene: mais Content d’être sur la bonne voie :roll:

Par contre j’ai déjà essayé de modifié le Drag, cela ralenti le ballon même en l’air, moi je voudrais que cela ralentisse qu’une fois en contact avec le sol, et je n’arrive pas à trouve le bon code à implémenter dans OnTriggerStay()

Désolé si je ne suis pas très clair, je débute en code et j’essaye d’apprendre au fur et à mesure 😅

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6420
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème Script montgolfières

Message par boubouk50 » 30 Oct 2024 09:37

Tu as 3 fonctions préimplémentées qui te permettront de gérer le drag :
OnTriggerEnter () -> Appelée une seule fois lors de l'entrée dans un trigger
OnTriggerStay () -> Appelée à chaque frame, tant que tu es dans un trigger
OnTriggerExit () ->Appelée une seule fois à la sortie du trigger

Ainsi, tu peux définir un booléen "Frein" dans le Start et Exit pour déterminer si tu es freiné ou non. (ou plutot un compteur si jamais tu peux être dans plusieurs triggers)
OU (ET ?), tu peux décider d'ajouter un frein dans le OnTriggerStay ().
Il faut (presque) toujours conditionner tes actions pour être sûr qu'elles soient effectuées quand tu veux. Ex en pseudo-code :

Code : Tout sélectionner

OnTriggerEnter ()
    if (trigger.tag = "obstacle") then trigObstacle++

OnTriggerStay () //Attention OnTriggerStay sera appelé une fois pour chaque trigger, les forces s'accumuleront dans cet exemple.
    if (trigObstacle > 0) then AddForce (ReverseForce)

OnTriggerExit ()
    if (trigger.tag = "obstacle") then trigObstacle--
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripting »