Partage
  • Partager sur Facebook
  • Partager sur Twitter

Unity - Script manquant

Sujet résolu
    28 décembre 2020 à 17:17:32

    Bonjour,

    Je suis actuellement un cours vidéo pour faire un jeu 2D avec Unity, et tout se passait plutôt bien jusqu'à ce que ce problème apparaisse : 

    The referenced script (Unknown) on this Behaviour is missing

    Je n'ai qu'un seul script dans mon projet Unity, nommé Player.cs, et celui-ci sert à faire bouger mon personnage, ainsi qu'à tracer une 'ligne' derrière lui. 

    Voilà le fameux code :

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    //  < >
    
    public class Player : MonoBehaviour
    {
        // Variables
        Rigidbody2D rb; // RigidBody du joueur
        public int speed; // vitesse du joueur
        Vector2 dir; // direction du joueur
        GameObject wallPrefab; //Mur à instancier
        Vector2 lastPos; // dernière position
        Collider2D lastWallCol;
        float wallWidth = 1;
        public GameObject boomParticles;
        
        // Fonctions Unity
        void Start()
        {
            dir = Vector2.up; // Par défaut, direction vers le haut
            rb = GetComponent<Rigidbody2D>(); // Récupération du rb
            rb.velocity = dir * speed; // Mouvement de départ
            wallPrefab = Resources.Load("Wall"+gameObject.tag) as GameObject; // récupération dynamique du mur à instancier
        }
    
        // Update is called once per  frame
        void Update()
        {
            HandleKeys();
            SetLastWallSize(lastWallCol, lastPos, transform.position);
        }
    
        private void OnTriggerEnter2D(Collider2D collision) // fonction permettant la colision dans un MUR
        {
            if(collision != lastWallCol)
            {
                Instantiate(boomParticles, transform.position, Quaternion.identity);
                Destroy(this.gameObject);
            }
        }
    
        //Fonctions Custom
        private void HandleKeys()
        {
            // récupération des touches directionnelles puis modification de la rb.velocity
            if (Input.GetKeyDown(KeyCode.UpArrow))
            {
                if (dir != Vector2.down)// cette condition interdit au joueur de revenir en arrière, ou d'aller du côté opposé
                {
                    dir = Vector2.up;
                    CreateWall();
                } 
            }
            else if (Input.GetKeyDown(KeyCode.DownArrow))
            {
                if (dir != Vector2.up)  
                {
                    dir = Vector2.down;
                    CreateWall();
                }  
            }
            else if (Input.GetKeyDown(KeyCode.LeftArrow))
            {
                if (dir != Vector2.right)
                {
                    dir = Vector2.left;
                    CreateWall();
                }
            }
            else if (Input.GetKeyDown(KeyCode.RightArrow))
            {
                if (dir != Vector2.left)
                {
                    dir = Vector2.right;
                    CreateWall();
                }
            }
            rb.velocity = dir * speed; // rb.velocity est modifiée avec la dir correspondant à la touche appuyée donc mouvement appliqué
        }
        private void CreateWall()
        {
            lastPos = transform.position; // récupération de la position du joueur au moment où il change de direction
            GameObject go = Instantiate(wallPrefab, transform.position, Quaternion.identity);
            lastWallCol = go.GetComponent<Collider2D>();
        }
    
        private void SetLastWallSize(Collider2D col, Vector2 posStart, Vector2 posEnd)
        {
            if (col)
            {
                col.transform.position =  posStart + (posEnd - posStart) / 2;
                float size = Vector2.Distance(posEnd, posStart);
                if (posStart.x != posEnd.x)
                    col.transform.localScale = new Vector2(size + wallWidth, wallWidth);
                else 
                    col.transform.localScale = new Vector2(wallWidth, size + wallWidth);
            }
        }
    }
    
    

    Si quelqu'un sait d'où ça peut venir, ça m'aiderait beaucoup ! :D

    Cordialement,

    Niiack

    EDIT: Suite à un post sur stackoverflow, j'ai effectué la manip suivante : 

    • clique droit sur Assets
    • Reimport ALL
    Le problème semble être résolu, mais est-ce que quelqu'un saurait comment éviter qu'il se reproduise ? Ai-je fait une mauvaise manip sans m'en rendre compte ? Merci :D

    -
    Edité par Niiack 28 décembre 2020 à 17:38:25

    • Partager sur Facebook
    • Partager sur Twitter
    « L'ordre mon cul, la liberté m'habite ! »
      3 janvier 2021 à 12:00:49

      Personne ? :-°

      (désolé je ne sais pas si les UPs sont autorisés)

      • Partager sur Facebook
      • Partager sur Twitter
      « L'ordre mon cul, la liberté m'habite ! »
        3 janvier 2021 à 20:39:08

        Vraisemblablement un script dans une "prefab" qui n'existe plus.

        Pouvez-vous mettre votre projet Unity dans GitHub ou GitLab  ?

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          4 janvier 2021 à 0:28:46

          Bonjour, 

          je suis allé consulter la vidéo dans laquelle ce problème m'est apparu, et j'ai constaté que le formateur avait modifié des noms de fichiers à un moment donné. J'ai sûrement suivi bêtement et j'ai du faire une coquille à ce moment.

          J'espère que ça ne se reproduira pas. o_O

          Sujet résolu, merci, et une bonne année. :magicien:

          • Partager sur Facebook
          • Partager sur Twitter
          « L'ordre mon cul, la liberté m'habite ! »

          Unity - Script manquant

          × 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