Page 1 sur 2

[RESOLU] Runner à étage

Publié : 10 Août 2019 16:01
par bloodfang
Bonjour,

Je débute sur Unity, j'aimerai crée un mini jeu où le personnage court tout seul et on tape sur l'écran pour sauter.
Jusque là j'ai réussis à faire un personnage qui avance, la camera le suis, et il saute quand on lui demande.

C'est pas mal le soucis c'est que je peux créer le design sur qu'une seule ligne c'est à dire que quand je veux faire monter mon perso sur une montée, il ralenti, recule, la camera ne monte pas vers le haut. Pareil si je veux le faire descendre la camera ne suit pas.

Tout se que j'ai pu trouvé sur google jusqu'à présent c'est des jeu comme là où j'en suis c'est à dire un personnage qui progresse sur une seule ligne(au pire le faire sauter sur une plateforme plus haute mais la camera reste au même point).

Bref je suis un peux bloqué car j'aimerai bien rajouter un peux plus de contenu qu'une seule ligne à mon jeu. Donc je voudrais savoir si c'est possible de faire ca, et comment m'y prendre pour orienter mes recherches parce que là je bloque.

Merci à vous :)

Re: Runner à étage

Publié : 10 Août 2019 16:11
par Max
Salut,

Techniquement il faudrait quelques éléments d'informations supplémentaires. Un screen en situation serait par exemple intéressant (je n'ai pas su voir si tu était en 2D ou 3D). Fournir aussi quel genre de contrôleur tu utilises pour gérer ton personnage.

Re: Runner à étage

Publié : 10 Août 2019 16:29
par bloodfang
Alors oui le jeu est en 2D, et "genre de controle" je vois pas trop ce que tu peux dire.

Juste il saute quand on clic comme ca:

Code : Tout sélectionner

        void Update()
    {
        if (Input.GetMouseButtonDown(0) && isGrounded)
        {
            Jump();
        }
    }
    void Jump()
    {
        rb.velocity += new Vector2(0, maxjump);
    }
        }
Avec la variable maxjump que je peux modifier via l'interface d'Unity. Et ensuite il avance tout seul via un SetVelocity.

Re: Runner à étage

Publié : 10 Août 2019 17:16
par Max
ton personnage est visiblement basé sur un système Collider2D/RigidBody2D.
Le soucis, si j'ai bien suivit, est que la vitesse fluctue en fonction des éléments rencontrés, genre il ralentit dans les monté et va plus vite dans les descente ?

Re: Runner à étage

Publié : 10 Août 2019 17:27
par bloodfang
Oui c'est ca il monte même pas du tout à moins de faire une légère pente. Et dans les descentes oui ca accélère et la cam ne suit pas elle reste au même niveau, mais ca à la limite avec quelque recherche je devrais pouvoir trouver si déjà j'arrive à faire une map sur niveau.

Re: Runner à étage

Publié : 10 Août 2019 18:09
par Max
Ton personnage utilise les propriété physique d'Unity, et est soumis à une vélocité constante à priori, donc pour schématiser une poussé constante. De fait, quand ça monte, il en bave plus (le pauvre), et va donc moins vite.
Niveau code, comment est gérée l'avance de ton player ?

Re: Runner à étage

Publié : 10 Août 2019 18:22
par bloodfang
Niveau code ca donne à peux pret ca :

Code : Tout sélectionner

public Rigidbody2D rb;
public float vitesse;
void Start()
    {
        SetVelocity(vitesse, 0);
        

    }
    void SetVelocity(float xVelocity, float yVelocity)
    {
        rb.velocity = new Vector2(0, 0);
        rb.velocity += new Vector2(xVelocity, yVelocity);
    }
Normalement c'est avec ca qu'il bouge, ensuite via l'interface je regle la vitesse et j'ajoute le Rigidbody 2D sur la variable Rb.

Re: Runner à étage

Publié : 10 Août 2019 20:36
par Max
Dans le code, je ne vois pas trop l'interet des deux lignes

Code : Tout sélectionner

        rb.velocity = new Vector2(0, 0);
        rb.velocity += new Vector2(xVelocity, yVelocity);
 
pourquoi ne pas écrire simplement dans ce cas ?

Code : Tout sélectionner

        rb.velocity = new Vector2(xVelocity, yVelocity);
 
Sinon, sur le principe effectivement tu auras des soucis de rythme dès qu'il y aura des changements d'inclinaison.
Perso, je ne suis pas spécialiste de ce genre de jeu en 2D, mais j'aurais tendance à partir plutôt sur un truc du genre:
(après il doit y avoir d'autres solutions)

Code : Tout sélectionner

void FixedUpdate()
{
    .....
        rb.AddForce(Vector2.right  * speed);
        // limitation de la vélocité à maxSpeed...
        if (Mathf.Abs(rb.velocity.x) > maxSpeed)
        {
            rb.velocity = new Vector2(Mathf.Sign(rb.velocity.x) * maxSpeed, rb.velocity.y);
        }
        ....
}
PS: je déplace le sujet dans la section script.

Re: Runner à étage

Publié : 10 Août 2019 21:12
par bloodfang
Ok merci de ta réponse effectivement ton code est plus court et fonctionne tout aussi bien.

Pour ce qui est du second, je viens d'essayer mais ca ne fonctionne pas, surement quelque chose que j'ai du mal faire. Je me retrouve maintenant avec 3 variables modifiable dans l'interface au niveau de l'objet de mon Personnage(Vitesse, max speed, seep (x et y).

Surement une de trop, et j'ai instancié par rapport à ton code les variables suivantes "maxSpeed" avec un public float, et "speed" avec un public vector2.

Mais cela dit y'a du progrès mon personnage monte beaucoup plus haut qu'au paravent même si il ralenti toujours et fini par reculer je vois déjà une légère amélioration ^^.

Re: Runner à étage

Publié : 11 Août 2019 10:20
par Max
Bonjour,

Difficile de savoir sans le script. Poste le script complet qui permet la gestion de ton player.
Là je pense qu'on y verra plus clair.