[Résolu][C#] GameObject.Find + Communication interscript

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
Mrcubecraft950
Messages : 88
Inscription : 21 Oct 2014 20:55
Contact :

[Résolu][C#] GameObject.Find + Communication interscript

Message par Mrcubecraft950 » 05 Juil 2015 19:42

Bonjour,

J'ai cherché sur internet, et j'ai trouvé seulement la moitié de ma réponse. J'aimerai en gros que lorsque le personnage clique sur ECHAP, sa désactive le script RotationY qui est sur le joueur, et aussi le script RotationX qui est sur la camera. La caméra est attacher au joueur.

Pour le joueur, j'ai donc fait:

Code : Tout sélectionner

GameObject.Find("Moi").GetComponent(RotationY).enabled=false;
et cela fonctionne super bien mais je n'arrive pas a désactiver le script RotationX qui est sur la caméra qui elle meme est dans le joueur.

Merci beaucoup pour vos aide :-D
Créateur du jeu YouHeroes

sotec
Messages : 542
Inscription : 21 Sep 2012 10:11

Re: GameObject.Find

Message par sotec » 06 Juil 2015 09:17

Code : Tout sélectionner

Camera.main.getComponent<RotationX>().enabled = false;
mais je suis pas sur d'avoir tout compris, si tu peux reformuler ^^
┬─┬ノ(º - ºノ) - (╯°□°)╯︵ ┻━┻

Mrcubecraft950
Messages : 88
Inscription : 21 Oct 2014 20:55
Contact :

Re: GameObject.Find

Message par Mrcubecraft950 » 06 Juil 2015 14:00

Pour rexpliquer,

Voici mon Hierarchy: http://hpics.li/16f91a4

Sur mon joueur, il y a la script RotationX qui permet au personnage de regarder a droite/gauche.
Sur ma caméra, j'ai le script RatiotationY qui permet au personnage de regarder en bas/haut

Lorsque je clique sur le bouton PAUSE, j'aimerai que les mouvements soit désactiver donc j'utilise simplement le code. Ce code est dans le script PAUSE, qui lui es sur le joueur.

Code : Tout sélectionner

GameObject.Find("Moi").GetComponent(RotationY).enabled=false;
Donc naturellement, sa désactive le script RotationY.

Mais j'aimerai désactiver aussi le RotationX, sauf que le script PAUSE est sur le joueur et non sur la caméra. (RotationX est sur la caméra)

Compliqué mais voila :P Merci
Créateur du jeu YouHeroes

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

Re: GameObject.Find

Message par boubouk50 » 06 Juil 2015 14:28

Et le code de Sotec ne marche pas? -EDIT- tu va avoir plusieurs camera dans la scène en multi non? Donc c'est p't'être pas la soluce.

Code : Tout sélectionner

Camera.main.getComponent<RotationX>().enabled = false;
Sinon il te suffit de faire une ref dans ton script:

Code : Tout sélectionner

public Camera myCamera; //à renseigner dans l'inspector
...
myCamera.transform.GetComponent(RotationY).enabled = false;
Par contre je suis pas fan du:

Code : Tout sélectionner

GameObject.Find("Moi").GetComponent(RotationY).enabled=false;
Il faut éviter les appels comme ça, surtout si le script PAUSE est sur le joueur tu peux faire directement:

Code : Tout sélectionner

transform.GetComponent(RotationY).enabled = false;
"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

rocketter
Messages : 72
Inscription : 08 Juin 2015 08:46

Re: GameObject.Find

Message par rocketter » 06 Juil 2015 14:34

J'viens de voir que Boubouk a répondu, à voir avec sa solution. Moi si je te suis bien, ta caméra est un enfant de ton personnage c'est ça ? Pour chopper un élément enfant a partir du script sur le parent j'utiliserai ceci :

Code : Tout sélectionner

Transform.find("Nom de la camera").GetComponent(RotationY).enabled=false;

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

Re: GameObject.Find

Message par boubouk50 » 06 Juil 2015 14:55

Tu peux accéder au enfant via Transform.GetChild()
"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

rocketter
Messages : 72
Inscription : 08 Juin 2015 08:46

Re: GameObject.Find

Message par rocketter » 06 Juil 2015 15:03

Tu peux accéder au enfant via Transform.GetChild()
Comme on le dit parfois sous Blender, y a finalement pleins de façons de peler un chat lol

Mrcubecraft950
Messages : 88
Inscription : 21 Oct 2014 20:55
Contact :

Re: GameObject.Find

Message par Mrcubecraft950 » 06 Juil 2015 15:34

boubouk50 a écrit :Et le code de Sotec ne marche pas? -EDIT- tu va avoir plusieurs camera dans la scène en multi non? Donc c'est p't'être pas la soluce.

Code : Tout sélectionner

Camera.main.getComponent<RotationX>().enabled = false;
Sinon il te suffit de faire une ref dans ton script:

Code : Tout sélectionner

public Camera myCamera; //à renseigner dans l'inspector
...
myCamera.transform.GetComponent(RotationY).enabled = false;
Par contre je suis pas fan du:

Code : Tout sélectionner

GameObject.Find("Moi").GetComponent(RotationY).enabled=false;
Il faut éviter les appels comme ça, surtout si le script PAUSE est sur le joueur tu peux faire directement:

Code : Tout sélectionner

transform.GetComponent(RotationY).enabled = false;
Cela ne fonctionne pas. Mais autrement je pourrais pas simplement désactiver le script sans passer par le gameObject ?

Et autrement il y aura plusieurs caméra.
Créateur du jeu YouHeroes

Mrcubecraft950
Messages : 88
Inscription : 21 Oct 2014 20:55
Contact :

Re: GameObject.Find

Message par Mrcubecraft950 » 06 Juil 2015 15:39

Autrement je crée une variable IsPaused dans le script PAUSE, et je crée un script que je met sur la caméra et un autre sur le joueur. J'envoie la variables IsPaused au deux scripts (false ou true), et dans chacun des deux scripts je fais:

If(IsPaused==true){
//desactive le script directement
}


Mais je sais pas comment faire pour que des variables fonctionnent entre scripts.

merci
Créateur du jeu YouHeroes

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

Re: GameObject.Find

Message par boubouk50 » 06 Juil 2015 15:43

Static -> variable unique pour tout le projet.
"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

Répondre

Revenir vers « (C#) CSharp »