[MY] Modifier la variable du script d'une instance [Résolu]

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
Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

[MY] Modifier la variable du script d'une instance [Résolu]

Message par Artcraft » 24 Sep 2019 19:41

Salut à tous !

J'essaie d’accéder à la variable d'un script sur des instances via un Array...
en gros je crée 128 instances d'un prefab sur lequel est appliqué un script,
et je voudrais modifier chaque variable de ces instances séparément en appliquent un array.

Le script sur le prefab: "ScriptOnPrefab"

Code : Tout sélectionner

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

public class ScriptOnPrefab : MonoBehaviour
{
    public static float Factor = 1;
    void Update()
    {
        Transform PrefabTransform = transform.GetComponent<Transform>();
        PrefabTransform.localScale = new Vector3(1, Factor, 1);
    }
}
Le script d'instances sur le GameObject :

Code : Tout sélectionner

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

public class ScriptOnGameObject : MonoBehaviour
{
    public GameObject prefab;
    private float[] Values = new float[128];

    void Start()
    {
        for (int i = 0; i < 128; i++)
        {
            Vector3 pos = transform.position + new Vector3(i, 0, 0);
            Quaternion rot = Quaternion.Euler(0, 0, 0);
            Instantiate(prefab, pos, rot, gameObject.transform);
        }
    }
    void Update()
    {
        for (int i = 0; i < 128; i++)
        {
            Values[i] = 1 + i;
        }
        for (int i = 0; i < 128; i++)
        {
        // c'est ici que je voudrais appliquer mon array
            ScriptOnPrefab.Factor[i] = Values[i]; 
        }
    }
    
}
Mais il me dit "cannot apply indexing on float."

Quelle est la syntaxe correcte pour appliquer mon array sur les variables des instances ?
Dernière édition par Artcraft le 24 Sep 2019 20:46, édité 1 fois.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [MY] Modifier la variable du script d'une instance (prefab)

Message par Alesk » 24 Sep 2019 19:55

Yo !

ça te peut pas fonctionner car ta variable "Factor" est un entier, et toi tu essayes de la manipuler comme si c'était un tableau.
(note : les règles de nommenclature prévoient que les noms de variables commencent par des minuscules et les majuscules sont réservées aux noms de fonctions, ce n'est pas obligatoire, mais c'est plus simple pour s'y retrouver ensuite)

Donc là, tu dois te créer un array pour y mettre tes instances de préfabs.

Code : Tout sélectionner

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

public class ScriptOnGameObject : MonoBehaviour
{
    // là le prefab pointera directement vers le script de type ScriptOnPrefab qui lui est associé
    // si tu veux accéder à son gameObject, il suffit d'utiliser prefab.gameObject
    public ScriptOnPrefab prefab; 
    private float[] Values = new float[128];
    private ScriptOnPrefab[] prefabInstances = new ScriptOnPrefab[128];

    void Start()
    {
        for (int i = 0; i < 128; i++)
        {
            Vector3 pos = transform.position + new Vector3(i, 0, 0);
            Quaternion rot = Quaternion.Euler(0, 0, 0);
            prefabInstances[i] = Instantiate(prefab, pos, rot, gameObject.transform) as ScriptOnPrefab;
        }
    }
    void Update()
    {
        // c'est pas la peine de faire deux boucles pour ça...
        // mais bon, je suppose que tu as une raison de le faire ;)
        // par contre avec ce code actuel, ça n'est pas du tout optimal de le coller dans la fonction Update()
        for (int i = 0; i < 128; i++)
        {
            Values[i] = 1 + i;
            prefabInstances[i].Factor = Values[i]; 
        }
    }
    
}

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY] Modifier la variable du script d'une instance (prefab)

Message par Max » 24 Sep 2019 19:55

Bonsoir,

Normal, tu considères dans ton second script Factor comme un tableau, alors qu'il est définis dans comme un simple float dans ScriptOnPrefab.
En plus pas sûr que ton approche soit le bonne avec une donnée static, qui sera donc nécessairement identique en valeur pour toutes les instances de ton prefab.
D'ailleurs je ne vois pas l’intérêt de chercher à transmettre un tableau, alors que dans ScriptOnPrefab, Factor est bien employé comme il est définis, c'est à dire un float.

EDIT: arf double post :mrgreen:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY] Modifier la variable du script d'une instance (prefab)

Message par Artcraft » 24 Sep 2019 20:30

Hey !

merci pour vos réponses,

alors Alesk,
j'ai essayé ton script mais il me sort une erreur sur :

prefabInstances.Factor = Values;

Member 'ScriptOnPrefab.Factor' cannot be accessed with an instance reference; qualify it with a type name instead

sinon je met tout ça dans l'update car mon array Values est en fait une fft...
et désolé pour la nomenclature, c'etait un exemple fait à l'arrache...

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY] Modifier la variable du script d'une instance (prefab)

Message par Artcraft » 24 Sep 2019 20:46

Ah bin j'avais ma réponse dans le post de max...
pas de static !

Yaallah ! ça marche merci les gars !

Répondre

Revenir vers « (C#) CSharp »