[RESOLU] Faire apparaître un objet quand on clique sur un autre objet

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Josman
Messages : 6
Inscription : 09 Oct 2018 15:38

[RESOLU] Faire apparaître un objet quand on clique sur un autre objet

Message par Josman » 09 Oct 2018 15:46

Bonjour,

Je souhaite faire apparaître un objet quand je clique sur un autre objet. Dans mon projet, quand je clique sur mon GameObject un autre GameObject apparaîtrait à côté

Etant débutante sur Unity, je me dis qu'il faut que je cache l'objet à faire apparaître, mais je ne sais pas comment le réaliser.

J'ai suivi un tuto qui m'a permit de réagir au clic de ma souris et d'afficher un texte.

Voici le code

Code : Tout sélectionner

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

public class ClickOnMe : MonoBehaviour {


    public string description;
    public Text descriptionText;

	// Use this for initialization
	void Start () {
		
	}

    private void OnMouseDown()
    {
        Debug.Log("description de ce gameObject" + this.gameObject.name+ " : "+description);
        descriptionText.text = "Description :" + description;
    }

}
Merci d'avance pour votre aide...
Dernière édition par E3DStef le 10 Oct 2018 11:55, édité 1 fois.
Raison : Mis en résolu

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par djulio74 » 09 Oct 2018 16:15

Salut.
Déjà dans le script de ton gameObject sur lequel tu doit cliquer, il doit y avoir une variable qui détermine le gameObject a faire apparaitre. Soit en le recherchant parmi les gameobject de la scène ( dans la void Start) , soit en l'assignant toi même depuis l'inspector.

Ensuite dans ta ta fonction OnMouseDown, tu peux desactiver le gameObject cible avec la fonction GameObject.SetActive();

Dans ton cas ça donnerai ça :

Code : Tout sélectionner

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


public class ClickOnMe : MonoBehaviour {
	
	public GameObject Cible;

	// Use this for initialization
	void Start () {
		
	}

    private void OnMouseDown()
    {
		//  Cible.activeSelf = true (vrai) si ta cible est active et donc visible, false ( faux) si inactive et donc invisible.
		//  !Cible.activeSelf = l'inverse de l'etat de Cible.activeSelf ( si Cible.activeSelf = true, !Cible.activeSelf = false)
		//  Cible.SetAcative assigne la valeur true/false au gameObject Cible.
		Cible.SetActive(!Cible.activeSelf);
		// => ici a chaque clique sur ton object possedant le script, le GameObject Cible change d'état entre actif et inactif, son état s'inverse.
		// il apparait puis disparait a chaque clique, et ainsi de suite.
	}
}
Apres avoir appliqué le script, tu vera une ligne "cible" apparaitre dans l'inspector ( en ayant selectionné l'objet contenant le script). il te suffit de faire un drag/drop de l'objet que tu veux faire apparaitre/disparaitre (depuis la hierarchy) jusqu'a cette ligne cible.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Josman
Messages : 6
Inscription : 09 Oct 2018 15:38

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par Josman » 09 Oct 2018 19:17

Bonsoir,

Merci beaucoup pour ta réponse

J'ai donc suivi ton code, j'ai utilisé l'inspector pour déposer mon objet à faire apparaître ( je ne sais pas faire avec la void start)

Il m'indique plusieurs erreurs

Voici le code :

Code : Tout sélectionner

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




public class ClickOnMe : MonoBehaviour {
    public GameObject Cible;


	// Use this for initialization
	void Start () {
		
	}

    private void OnMouseDown()
    {
        Cible.activeSelf = true;
        !Cible.activeSelf = false;
        Cible.SetActive;
        Cible.SetActive(!Cible.activeSelf);
        
    }

}
A la ligne Objet2.activeSelf = true; il me dit qu'il est impossible d'assigner la propriété ou l'indexeur "GameObject.activeSelf" car il est en lecteur seul

A la ligne !Objet2.activeSelf = false; il me dit que la partie gauche doit être une variable, du coup je pense que j'ai mal assigné la variable dans l'inspector... j'ai essayé de la créer dans le code mais cela fait pareil

Et à la ligne Objet2.SetActive; il me dit que seul une assignation, un appel, un incrément, un décrément, une attente et des expressions d'objet new peuvent être utilisés comme instruction


Du coup la ligne cible n'apparait pas dans l'inspector sur l'objet avec le script

En espérant ta réponse

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par djulio74 » 09 Oct 2018 19:21

Quand on publi un code ce qui apparaît en vert est de la simple information, soit effacer tte la ligne ou rien :)
Dans onmousedown, ne laisse que la dernière ligne

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Josman
Messages : 6
Inscription : 09 Oct 2018 15:38

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par Josman » 09 Oct 2018 20:01

Ah ouais je me sens bête !

Merci beaucoup ça marche !

Une question aussi, quand je suis dans ma scène à peine je donne un coup de molette avec ma souris ça m'avance énormément alors qu'avant c'était pas comme ça, je pense j'ai touché un truc qui fallait pas, as-tu déjà eu ce problème ?

Pareil pour bouger de gauche à droite

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par djulio74 » 09 Oct 2018 20:10

tant mieux si ça marche. ;)

ce qui peut jouer dans ce problème, c'est le type de vue dans la scène. : isométrique /orthométrique. En haut a droite de la fenêtre "scène", tu as un repère avec les axes, et un cube au centre. en cliquant sur celui-ci tu switch de type de vue, en gros avec ou sans perspective/profondeur. Essaye déjà ça.

sinon des fois il suffit de de double cliquer sur un élément de la liste "Hierarchy". ça va directement te centrer la vue, et adapter la taille a l'élément sur lequel tu as cliqué. (un objet, la camera, une light..)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Josman
Messages : 6
Inscription : 09 Oct 2018 15:38

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par Josman » 09 Oct 2018 20:29

J'ai double cliqué et ça marche

Merci encore pour tout !

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

Re: Faire apparaître un objet quand on clique sur un autre objet

Message par boubouk50 » 10 Oct 2018 08:56

Pense à passer ton sujet en résolu si tout est réglé

Comment passer un sujet en [RESOLU]
"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

Josman
Messages : 6
Inscription : 09 Oct 2018 15:38

Re: [RESOLU] Faire apparaître un objet quand on clique sur un autre objet

Message par Josman » 10 Oct 2018 14:59

Re-bonjour

Je rencontre un autre problème... Je voulais que chaque objet différent fasse apparaître un objet
Hier cela a très bien marché sur un objet, mais quand je refais la technique sur un objet différent (avec le même script) cela fonctionne pas

J'ai essayé de créer un autre script (tout en copiant l'autre script) mais cela ne fonctionne pas non plus :/

Quand je teste, l'objet qui a le script de base fonctionne très bien mais l'autre objet qui a l'autre script, l'objet n’apparaît pas

Faut-il rajouter quelque chose sur le script?

Merci d'avance pour vos réponses

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [RESOLU] Faire apparaître un objet quand on clique sur un autre objet

Message par djulio74 » 10 Oct 2018 15:16

Je ne vois pas pourquoi cela ne marcherait pas. normalement juste en appliquant le même script sur tout les objet devant "en contrôler un autre" ça devrait marcher. bien sur ne pas oublier d'assigner la cible pour chacun d'entre eux.

sinon, tout tes gameobject devant contrôler ont-ils bien un Collider (BoxCollider ou autre)?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « Scripting »