Partage
  • Partager sur Facebook
  • Partager sur Twitter

aide unity pour 2D

    29 juin 2020 à 17:44:29

    bonjour à tous,

    j'ai commencé à développer un jeu 2D et je rencontre 2 soucis.

    mon premier concerne mon personnage, que je vais de gauche à droite, le personnage change de sens, la camera suit le personnage sauf que lors du changement de sens du perso, l'image à la caméra crée un saut d,image, pourquoi et comment regler le souci ?

    code du personnage :

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class controleecu : MonoBehaviour
    {
        public GameObject ecu;
        public Animator animEcu;
        public Vector2 scaleChange;
        float vitesse = 4.0f;
        
    
        // Start is called before the first frame update
        void Start()
        {
            animEcu = GetComponent<Animator>();
        }
    
        // Update is called once per frame
        void FixedUpdate()
        {
            marche();
            saut();
        }
    
        void marche()
        {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                animEcu.Play("marche");
                transform.Translate(Vector2.right * vitesse * Time.deltaTime);
                transform.localScale = new Vector3(8, 8, 8); //changemznt direction
            }
            else if (Input.GetKey(KeyCode.LeftArrow))
            {
                animEcu.Play("marche");
                transform.Translate(Vector2.left * vitesse * Time.deltaTime);
                transform.localScale = new Vector3(-8, 8, 8);//changemznt direction
            }
            else if (!Input.GetKeyDown(KeyCode.RightArrow))
            {
                animEcu.Play("ecu");
            }
            else if (!Input.GetKeyDown(KeyCode.LeftArrow))
            {
                animEcu.Play("ecu");
            }
            else
            {
                animEcu.Play("ecu");
            }
        }
    
        void saut()
        {
            if (Input.GetKey(KeyCode.Space))
            {
                animEcu.Play("saut");
                transform.Translate(Vector2.up * 6f * Time.deltaTime);
            }
            else
            {
                
            }
        }
    }
    

    Second souci : 

    Comment afficher un score en 2D ? j'arrive à détruire les rubi etc au passage mais pas afficher le score et le stocker, comment faire ?

    • Partager sur Facebook
    • Partager sur Twitter
    Cordialement, Hamann Benoit
      30 juin 2020 à 2:31:54

      Bonjour,

      Au vu du code je suppose que tu as mis ta camera en tant qu'enfant ou composant du personnage. Même si c'est plus optimisé il serait préférable de la mettre dans un GameObject à part, d'y faire reference avec : public Camera cam et dans le Update de mettre a jour sa position suivant celle du joueur.
      Ainsi si le joueur tourne ou change de scale (comme ici), cela n'influencera pas la camera

      Ensuite je remarque qu'il y a quelques points problématiques dans ton code qui pourrais influencer sur le probleme de Camera :

      • On utilise généralement Update() pour gérer le déplacement puisqu'il intervient à chaque tick (même si FixedUpdate reste correct).
      • Si tu utilise FixedUpdate, prendre en compte le deltaTime est normalement inutile puisqu'il sera toujours le même (à vérifier)
      • Les fonctions et surtout les classes doivent commencer par une Majuscule (par convention)
      • Plutôt que de faire des if Input.GetKey, on utilise plutôt les GetAxis pour récupérer la direction de touche ZQSD indiqué dans les options d'inputs du projet (ça rend même compatible avec les Joysticks)
        Input.GetAxis("Horizontal");
        Input.GetAxis("Vertical");
      • Je conseillerais plutôt d'ajouter un RigidBody2D au personnage et d'utiliser MovePosition ou .velocity, le problème de Translate est que de mémoire il agit comme une téléportation et est donc mal géré par le moteur physique
      Pour pouvoir ajouter un score en 2D, il faut utiliser les UI: un UI/canvas et un gameObject UI/Text en enfant.
      on récupérera ensuite le text via une référence ou via un tag.

      Pour stocker les scores, il est préférable d'utiliser une classe à part, tu peux utiliser soit un Singleton soit une classe avec des variables static soit un objet possédant un tag. Le plus simple mais le plus limité étant la classe avec variables static.
      exemple de tete:
      public class ScoreManager{
         public static int score = 0;
      }
      //exemple modif texte de score
      public Text textScore;//on met généralement dans une classe gérant les UI.
      
      void recupRubis(){
      ScoreManager.score+=1;
      textScore.text = ""+ScoreManager.score;
      
      }



      Je te conseillerais de regarder plus de tutos pour au moins avoir une bonne vision structurelle du code de ton jeu et donc de savoir vers où partir et comment. Si tu commence le dev sous Unity, c'est une bonne chose de commencer sur un jeu 2D puisqu'ils sont généralement plus facile à réaliser. Je conseillerais de viser très facile et de rester sur un jeu simpliste tel que par exemple un Mario-like.
      Bonne chance (en espérant t'avoir donné de bonnes pistes ^^).

      -
      Edité par coukil 30 juin 2020 à 2:39:26

      • Partager sur Facebook
      • Partager sur Twitter
        24 juillet 2020 à 4:44:37

        Merci de ton aide, je vais tout revoir, je savais pas que openclassroom avait un cours pour le codage unity en C#
        • Partager sur Facebook
        • Partager sur Twitter
        Cordialement, Hamann Benoit

        aide unity pour 2D

        × 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.
        • Editeur
        • Markdown