Page 1 sur 1

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

Publié : 24 Sep 2019 19:41
par Artcraft
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 ?

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

Publié : 24 Sep 2019 19:55
par Alesk
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]; 
        }
    }
    
}

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

Publié : 24 Sep 2019 19:55
par Max
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:

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

Publié : 24 Sep 2019 20:30
par Artcraft
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...

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

Publié : 24 Sep 2019 20:46
par Artcraft
Ah bin j'avais ma réponse dans le post de max...
pas de static !

Yaallah ! ça marche merci les gars !