[DB-AL] The associated script cannot be loaded

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
ndank
Messages : 13
Inscription : 28 Avr 2018 22:51

[DB-AL] The associated script cannot be loaded

Message par ndank » 07 Mai 2018 23:19

Bonjour.

Je reviens vers vous car j'ai un nouveau problème est j'ai beau chercher sur internet , soit je comprend pas les réponses , soit cela ne marche pas !

J'ai créé un objet vide sur le quel j'ai un script. Quand je sauvegarde sur visual et que je revient sur unity mon objet a bien le script et dès que je lance le jeu, dans le composant script, tout disparaît et une phrase apparaît : "The associated script cannot be loaded. plz fix any compil errors and assign a valid script"

La classe que je crée dans ce script n'est pas dans le monobehaviour car c'est la seule solution que je suis arrivé a faire fonctionner pour appeler ses fonction dans les autres script.

Encore une fois dsl pour la lecture de ce code mal écrit !

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;


public class deck { 
    
    //création du deck
    int[] paquet = { 1, 2, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 26, 26 };
    int[] sorti = new int[71];
    int utiliser = 0;
    int verif;
    bool ok = false;
    int y;
    int x;
    int i;
    int j;
    int carte;
    int nbrcarte;
    //public debut d;
    

    string[] alldef = new string[27];
    string def;

    public GameObject table ;
    public GameObject defaussecarte;

    public Text titre;
    public Text[] textecarte = new Text[14];

   

    


    // Use this for initialization
    void Start() {

        //ici est assigné toute les texte des carte comme le premier exemple
        alldef[1] = "+1 de dégât pour chaque lot de 3 flingues";
        
    }

    // Update is called once per frame
    void Update() {

      

    }


     //pioche une carte dans le deck en verifiant qu'elle n'ai pas déjà sortie
    public int pioche()
    {
       

        while (ok == false)
        {
            verif = Random.Range(0, 70);
           

            for (i = 0; i <= 70; i++)
            {
                if (verif == sorti[i]) i = 71;
            }
            if (i == 71) { ok = true; }
 
        }
        carte = paquet[verif];
        sorti[utiliser] = verif;
        utiliser++;
        ok = false;

        
        return carte;
    }
    
    public void defausse()
    {
        //titre.text = "défaussé une carte de votre main";
        j = 0;
        table.SetActive(false);
        defaussecarte.SetActive(true);
        for ( i = 0 ; i < 14 ; i++)
        {
            if (debut.main[i] != 0)
            {
                textecarte[j].text = "carte " + j + " : " + alldef[debut.main[i]];
                j++;
            }
            else
            {
                textecarte[j].text = ""; 
            }
        }

    }

    public void findefausse(int num)
    {
        
        x = 0;
        while ( x == 0)
        {
       
            verifcarte();
            if (j > 8 )
            {
                y = 0;
                j = 0;
                i = 0;
                while  (y == 0)
                {

                    if (debut.main[i] != 0)
                    {
                       
                    
                        if ( j == num )
                        {
                            debut.main[i] = 0;
                            y++;
                        
                        }
                        
                        j++;
                    }
                    i++;
                }
            }

            else
            {
                x++;

            }
        }
        table.SetActive(true);
        defaussecarte.SetActive(false);
    }

    public int verifcarte()
    {
        for (i = 0; i < 15; i++)
        {
            if (debut.main[i] != 0)
            {
                nbrcarte++;
            }
           
        }
        
        return nbrcarte;
    }



}
Merci d'avance.

Cordialement Ndank

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] The associated script cannot be loaded

Message par simonj » 08 Mai 2018 00:37

Salut,

Ce n'est pas normal que tu n'ai pas réussit à accéder aux fonction de ce script depuis d'autres scripts. Qu'il hérite de Monobehavior ou pas, c'est la même chose.

Tu as plusieurs problèmes selon moi.

Tu devrais remettre l'héritage de Monobehavior. Pour qu'il soit bien considéré comme un composant Unity. Puis corriger les erreurs qui font que tu ne peux pas accéder aux fonctions depuis les autres scripts.

Là c'est vraiment le bazard dans ton script. Remet de l'ordre et procède par étape. Si tu ne comprends pas les messages d'erreurs, poste les ici. Montre nous comment tu essayes d'accéder aux fonctions depuis les autres scripts. La solution doit surement être toute simple.

PS : Je viens de regarder un peu tes fonctions. Enlève moi ces "while"... Je pense que c'est la pire idée d'utiliser des while dans un script quand on est pas très à l'aise avec ce que l'on fait. C'est la porte ouverte aux boucles infinies et c'est si facilement remplaçable par des if et des for/foreach... ! Moi qui, pourtant, commence à avoir quelques années d'expérience et qui suit très à l'aise avec la prog' je n'en utilise qu'en cas de force majeur.

ndank
Messages : 13
Inscription : 28 Avr 2018 22:51

Re: [DB-AL] The associated script cannot be loaded

Message par ndank » 08 Mai 2018 15:41

bonjour !

Merci de votre réponse .

Je comprend bien le risque des while , et je vais essayer de ne plus les utiliser .

Du coup j'ai remit ma classe dans le monobehaviour, Maintenant , j'ai un warning qui me dit que j'utilise un "new" et que je devrais utiliser un addcomponent().

Et la je n'arrive pas à utiliser cette méthode !

Je déclare les fonction comme ceci :

Code : Tout sélectionner

deck d;

d = new deck();
carte = d.pioche();
Maintenant je sais que ce n'est plus bon car il me faut utiliser le addcomponent();

du coup j'écris d = gameobject.Addcomponent mais je sais pas comment finir cette ligne.

Mais même avec l'avertissement le jeu tourne jusqu'à l'utilisation de la fonction defausse() quand il doit désactiver l'objet table. et la je ne comprend pas pourquoi !!

Cordialement Ndank

ndank
Messages : 13
Inscription : 28 Avr 2018 22:51

Re: [DB-AL] The associated script cannot be loaded

Message par ndank » 08 Mai 2018 22:39

Première victoire !

mon Addcomponent marche enfin !

Code : Tout sélectionner

deck d;

d = gameObject.AddComponent<deck>();
carte = d.pioche();
Maintenan il ne me reste plus qu'a trouver pourquoi le code qui suit fait planter le jeu

Code : Tout sélectionner

public GameObject table ;

table.SetActive(false);
Sachant que j'ai bien attribué un objet a la variable public.

Est-ce que le faite que l'objet table soit déclarer en SetActive(true) dans le start dans autre objet pourrait poser problème ?

ndank
Messages : 13
Inscription : 28 Avr 2018 22:51

Re: [DB-AL] The associated script cannot be loaded

Message par ndank » 08 Mai 2018 23:49

Après plusieurs test mon : table.SetActive(false); fonctionne en créant une variable privé qui cherche l'objet.

Mais la ligne suivante qui est defaussecarte(true); celle la elle ne veut pas marcher quoi que je fasse. je pense que c'est dut au faite qu'elle soit désactiver au start et que du coup il ne la trouve pas.

Du coup j'ai trouver Resources.FindObjectsOfTypeAll<> mais le probleme c'est je mon GameObject ne peut pas recevoir la valeur qu'il retourne .

je reprendrai demain soir !

Cordialement Ndank

Répondre

Revenir vers « (C#) CSharp »