Comment accéder à un array de GameObjects

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Comment accéder à un array de GameObjects

Message par juliuson » 15 Juin 2023 17:41

J'ai affecté du code (le fichier rotateCube.cs) à un empty.

Le fichier rotateCube.cs possède un tableau (public) d'éléments de GameObjects (des cubes, spheres ou capsules).

Celui-ci dit de tourner un élémént du tableau de GameObjects dans le centre de la scène de 35° (avec la fonction rotateAround)

Comment accéder à un élément (gameobject) du tableau.

J'ai éssayé le code suivant:

prefabs[0].transform.RotateAround(Vector3.zero, Vector3.up, -35);

Mais rien ne tourne.

Merci pour votre aide,

A+

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: Comment accéder à un array de GameObjects

Message par jmhoubre » 15 Juin 2023 19:08

Merci de publier ton code.

Peux-tu accéder à ton tableau ?
Tu l'as renseigné avec des gameObjects ?
Que dit la console ?
As-tu fait un Debug.Log(prefabs[0]) ?
Dans quelle fonction se trouve ta ligne de code ?

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Re: Comment accéder à un array de GameObjects

Message par juliuson » 17 Juin 2023 12:42

J'ai crée un tableau prefabs dans un fichier (Main.cs), et je le copie comme cela:
GameObject [] prefabs;
 for (int i = 0; i < pentaminos.Length; i++)
        {
            prefabs = pentaminos;

        }


Puis je le charge dans un autre fichier (rotateRight.cs) comme cela:

Main.prefabs[0].transform.RotateAround(Vector3.zero, Vector3.up, -90);


Malheureusement, les GameObjects du tableau prefabs (ici le 0) ne tourne pas.

Si vous avez une idée de code pour faire tourner mes GameObjects?

Merci à vous,

A+

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: Comment accéder à un array de GameObjects

Message par jmhoubre » 17 Juin 2023 20:11

Merci de publier tout ton code.

Peux-tu accéder à ton tableau ?
Tu l'as renseigné avec des gameObjects ?
Que dit la console ?
As-tu fait un Debug.Log(prefabs[0]) ?
Dans quelle fonction se trouve ta ligne de code ?

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Re: Comment accéder à un array de GameObjects

Message par juliuson » 18 Juin 2023 13:55

Bonjour à tous,

Je déclare une variable de GameObjects (public static GameObject [] prefabs) que je place dans un fichier Main.

Le problème c'est que je crée un autre fichier (rotationDroite.cs).
dans lequel je place le code suivant:
void OnMouseDown()
        {
          Main.prefabs[0].transform.RotateAround(Vector3.zero, Vector3.up, -35);
        }


J'aimerais qu'un des pentaminos (le premier: d'index[0]) tourne (avec transform.RotateAround) si on clique sur une capsule (voir code ci-dessus).

Mais rien ne tourne.

Merci pour votre aide,

A+

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Re: Comment accéder à un array de GameObjects

Message par juliuson » 13 Juil 2023 20:34

J'ai crée un fichier Rotate.cs qui comprend 3 variables publiques (cube1, cube2 et cube3 ).

Je cherche à faire une rotation de ces 3 variables (avec la fonction RotateAround) si on clique sur une capsule.

Pour cela je fais le code suivant:
    public GameObject pentamino1, pentamino2, pentamino3;

    private void OnMouseDown()
    {
        variable1.transform.RotateAround(Vector3.zero, Vector3.up, 35);
        variable2.transform.RotateAround(Vector3.zero, Vector3.up, 35);
        variable3.transform.RotateAround(Vector3.zero, Vector3.up, 35);
    }
Je fais un cliquer-déposer du code Rotate.cs vers le panel Inspector pour rendre publiques mes variables:

Je glisse cube1 dans variable1
Je glisse cube2 dans variable2
Je glisse cube3 dans variable3

Le problème, c'est que les cubes ne tournent pas.

Si vous avez des idées,

A+

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: Comment accéder à un array de GameObjects

Message par jmhoubre » 14 Juil 2023 11:48

J'ai l'impression que tu ne maîtrises pas trop le vocabulaire que tu utilises. De plus tu t'acharnes à ne pas publier l'ensemble de ton code. Cela rend les choses compliquées...
J'ai crée un fichier Rotate.cs qui comprend 3 variables publiques (cube1, cube2 et cube3 ).
Ces variables sont absentes du bout de code que tu as fais l'effort de publier.
Je cherche à faire une rotation de ces 3 variables
Une variable ne peut pas pivoter. Un objet oui.
si on clique sur une capsule.
Tel que c'est codé, tout clic sur un objet muni d'un collider déclenchera la fonction OnMouseDown.
public GameObject pentamino1, pentamino2, pentamino3;
Ces 3 variables sont déclarées, mais pas utilisées. Bizarre.
Où est le nom de la classe ? Hérite-elle d'un MonoBehavior ?Le fichier contenant ce code est-il attaché à un objet ? Si oui, lequel ?
variable1.transform.RotateAround(Vector3.zero, Vector3.up, 35);
variable1, 2 et 3 ne sont pas déclarées ??? Et tu n'as pas d'erreur dans la console ?
Je fais un cliquer-déposer du code Rotate.cs vers le panel Inspector pour rendre publiques mes variables:
cliquer-déposer -> glisser-déposer ?
du code Rotate.cs -> du script Rotate.cs ?
vers le panel inspector : oui, mais quel objet est sélectionné (dont les propriétés sont affichées dans l'inspecteur) ?
cela ne rend pas publiques tes variables : cela affiche dans l'inspecteur des variables qui dans le code ont été déclarées publiques.
Le problème, c'est que les cubes ne tournent pas.
Tu m'étonnes...
Si vous avez des idées,
Suis des tutos pour débutants. Je te conseille cette série.
Quand tu poses une question sur le forum, et que quelqu'un te pose des questions, réponds-lui.

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

rotations de cubes avec des variables publiques

Message par juliuson » 26 Juil 2023 20:41

Salut à tous,

Voici le nouveau code:

Code : Tout sélectionner

public GameObject cube1, cube2, cube3;

    private void OnMouseDown()
    {
        cube1.transform.RotateAround(Vector3.zero, Vector3.up, 35);
        cube2.transform.RotateAround(Vector3.zero, Vector3.up, 35);
        cube3.transform.RotateAround(Vector3.zero, Vector3.up, 35);
    }
Le problème, c'est que les cubes ne tournent pas.

Votre aide est la bienvenue,

A+
 ! Message de : boubouk50
92 messages en 6 ans de présence et toujours pas de formatage correct de questions :
Les balises code ! Scrogneugneu !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Comment accéder à un array de GameObjects

Message par boubouk50 » 27 Juil 2023 08:26

As-tu mis des colliders sur tes cubes ? (Obligatoire pour détecter un OnMouseDown)
Tu cliques bien sur tes cubes ? (OnMouseDown se fait sur l'objet uniquement cliqué)
N'as tu pas quelque chose devant tes cubes qui empêcherait le clic ? (Un collider devant prendrait le clic avant le OnMouseDown)
Est-ce que tes cubes sont en static ? (ils ne peuvent pas bouger s'ils le sont)
As-tu des erreurs en console ?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

juliuson
Messages : 102
Inscription : 03 Mai 2017 18:00

Re: Comment accéder à un array de GameObjects

Message par juliuson » 31 Juil 2023 16:56

Les colliders sont mis par défaut sur chaque cubes (box collider).
Le OnMouseDown s'applique uniquement si l'on clique sur la capsule.

Le problème, c'est que lorsque l'on clique sur la capsule, les cubes ne tournent pas.

Merci à vous,

A+

Répondre

Revenir vers « Scripting »