Bonjour à tous, je viens de commencer un jeu 2D sur Unity, et je me retrouve confronté à plusieurs problèmes.
Premièrement, lorsque mon personnage saute et attéri sur un mûr (côté d'une tile), il reste collé à celle ci si je ne lâche pas la touche directionnelle gauche/droite.
Deuxièmement, ma map comporte des pentes faites de tiles représentants des triangles, et lorsque mon personnage grimpe une pente sa vitesse augmente considérablement et on dirait qu'il pourrait presque s'envoler.
Voici mon code :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Character_Controller : MonoBehaviour
{
public float maxSpeed = 2; //vitesse max du perso
public float jumpForce = 1000;
public Transform groundCheck; // vérifie si le perso touche le sol
public LayerMask groundMask; // Définition du sol via un Layer (calque)
public bool isGrounded = false;
Rigidbody2D rb; // stock le rb du personnage
SpriteRenderer sr;
void Start()
{
rb = GetComponent<Rigidbody2D>(); // on récupère le rb du personnage
sr = GetComponent<SpriteRenderer>(); // on récupère le sr du personnage
}
void FixedUpdate() //version améliorée de la fonction Update lorsqu'on bosse sur la physique
{
float hor = Input.GetAxis("Horizontal"); // -1/1 soit gauche/droite
rb.velocity = new Vector2(hor * maxSpeed, rb.velocity.y); // déplacement horizontal
Flip(hor); // regarder dans la bonne direction
//test si on est au sol -> fonction préfabriquée par unity pour voir si un transform est sur un layer
isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.15f, groundMask);
if (Input.GetButton("Jump") && isGrounded)
rb.AddForce(Vector3.up * jumpForce);
}
void Flip (float h) // fonction permettant de tourner le personnage en fonction de sa direction
{
if (h < 0)
sr.flipX = true;
if (h > 0)
sr.flipX = false;
}
}
Voilà aussi un screen pour vous montrer la map :
Ce mouvement est obtenu juste en appuyant sur la touche 'D' au lancement du jeu.
Quelques infos en vrac :
La map (cubes solides) possède le tag 'Ground'.
le ground-check est correctement positionné au pied de mon personnage
FixedUpdate n'est pas une version améliorée d'Update, c'est une fonction qui demande plus de rigueur au niveau délais d'exécution.
Il faut éviter de mélanger les actions sur la vitesse et les actions sur la simulation physique (AddForce).
Il faut penser à faire des actions proportionnel au deltaTime entre chaque appel de FixzdUpdate.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Déplacements XY 2D - Unity
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.