Modifier une variable d'un script depuis un autre

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
benjani13
Messages : 18
Inscription : 07 Oct 2010 19:09

Modifier une variable d'un script depuis un autre

Message par benjani13 » 26 Nov 2010 21:02

Bonsoir, j'ai un jeu de plateforme avec un compteur qui tourne pour savoir le temps que met le joueur à finir le niveau. J'ai mis un emptyObject associé avec un boxCollider(en tant que trigger) sur la dernière plateforme, ce qui permet de repérer quand le joueur arrive à la fin du niveau.

Ce que j'aimerais faire c'est remettre le compteur à 0 lorsque le joueur arrive à la fin. Je met donc un script JS que j'associe à l'emptyObject(celui représentant l'arrivé donc), et qui contient une fonction OnTriggerEnter().

La fonction est bien appelé lorsque le joueur arrive sur la plateforme, mais le compteur se situe dans un autre script(le script contrôlant le joueur). J'aimerais donc savoir comment le remettre à 0(c'est à dire comment accéder à la variable situé dans le script de contrôle du joueur, depuis le script de l'emptyObject)? Ou bien je m'y suis mal pris et je devrais plutôt tout faire en un script(si oui comment?)?

Merci.

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Modifier une variable d'un script depuis un autre

Message par giyomuSan » 27 Nov 2010 07:37

pas sur de la syntaxe en Js mais en C# ca donne

Code : Tout sélectionner

TonObjetPlayer.GetComponent<TonScriptControlJoueur>().TaVariable = 0;
ta variable doit etre public sinon tu ne pourra pas y acceder.

benjani13
Messages : 18
Inscription : 07 Oct 2010 19:09

Re: Modifier une variable d'un script depuis un autre

Message par benjani13 » 28 Nov 2010 13:45

Merci ça marche :)

Avatar de l’utilisateur
NICOO96
Messages : 7
Inscription : 13 Jan 2017 01:58

Re: Modifier une variable d'un script depuis un autre

Message par NICOO96 » 13 Jan 2017 02:17

Bonjour, j'ai a peu près le même soucis, j'aimerais modifier le boolean d'un script depuis un autre script seulement, si je met : MonObjetPlayer.GetComponent<MonScriptControlJoueur>().NomDuBoolean = true;

je reçois plusieurs messages d'erreur, comment faire pour les boolean ?
ps : mon script est en C #

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Modifier une variable d'un script depuis un autre

Message par ZJP » 13 Jan 2017 04:52

NICOO96 a écrit :Bonjour, j'ai a peu près le même soucis, j'aimerais modifier le boolean d'un script depuis un autre script seulement, si je met : MonObjetPlayer.GetComponent<MonScriptControlJoueur>().NomDuBoolean = true;

je reçois plusieurs messages d'erreur, comment faire pour les boolean ?
ps : mon script est en C #
C'est récurent comme demande. :?

a) Il manque ton script

b)

Code : Tout sélectionner

// PremierScript .cs

using UnityEngine;
using System;


public class PremierScript : MonoBehaviour
{
	public bool  afficheResult  = false;

	public int   intDuPremier   = 10;
	public bool  boolDuPremier  = false;
	public float floatDuPremier = 96.98f;
	
	public void fonctionDuPremier()
	{
		Debug.Log("Coucou. Int   = " + intDuPremier);
		Debug.Log("Coucou. bool  = " + boolDuPremier);
		Debug.Log("Coucou. float = " + floatDuPremier);
	}
}

Code : Tout sélectionner

// ScriptDeux .cs

using UnityEngine;
using System;

public class ScriptDeux : MonoBehaviour
{

	private PremierScript lienVersPremierScript;

	void Start()
	{
		lienVersPremierScript = GetComponent<PremierScript>();
		lienVersPremierScript.intDuPremier   = 12345;
		lienVersPremierScript.boolDuPremier  = true;
		lienVersPremierScript.floatDuPremier = 45.67f;
	}
	
	void Update()
	{
		if (lienVersPremierScript.afficheResult)	lienVersPremierScript.fonctionDuPremier();
	}
}
Les deux scripts sont bien entendu placés sur le même GO.

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

Re: Modifier une variable d'un script depuis un autre

Message par boubouk50 » 13 Jan 2017 10:48

Un joli déterrage de 7 ans :-D
(ça fait plaisir de voir que certains membres font une recherche poussée avant de poster).
Ça doit être la question la plus fréquemment posée sur ce forum, tu trouveras sinon, ZJP t'a tout indiqué le chemin.
"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

Avatar de l’utilisateur
NICOO96
Messages : 7
Inscription : 13 Jan 2017 01:58

Re: Modifier une variable d'un script depuis un autre

Message par NICOO96 » 13 Jan 2017 13:46

Merci pour la réponse rapide, effectivement les 2 script sont a placer sur le même GO, seulement mon soucis c'est que je veux que la camera suive mon Player, et que dès que le collider de mon Player rentre dans dans certain collider, la camera face un zoom ou une rotation, du coup les deux script ne sont pas sur le même GO.

Voici le script pour le Player :

Code : Tout sélectionner

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

public class ten1 : MonoBehaviour 
{

	public bool zoom = false;

	void OnTriggerEnter(Collider other)
	{
		zoom1 = true;
	}


	void OnTriggerExit(Collider other)
	{
		zoom1  = false;
	}
}


Le script pour la camera :


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

public class ten2 : MonoBehaviour 
{

	public GameObject Player;
	private Vector3 offset;
	private Vector3 zoom;
	public bool zoom1 = false;


	void Start () 
	{
		offset = transform.position - Player.transform.position;
		zoom = new Vector3 (0, 0, 40);
	}


	void Update () 
	{
		
		if (zoom1) transform.position = Player.transform.position + offset + zoom;
		else transform.position = Player.transform.position + offset;
	}
}
C'est pourquoi je voulais mettre la ligne
Camera.GetComponent<ten2>().zoom1 = true;
dans le OnTriggerEnter et
Camera.GetComponent<ten2>().zoom1 = false;
dans le OnTriggerExit
mais ça me mettait des messages d'erreur :/

:!: Les balises code SVP :!:
Merci de lire la Netiquette.

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

Re: Modifier une variable d'un script depuis un autre

Message par boubouk50 » 13 Jan 2017 14:53

Il te faut référencer ta caméra (ou son script) dans ton script Player, sinon comment il peut savoir où il doit changer zoom1?

Code : Tout sélectionner

public Camera cam;
ou
public ten2 camTen;
puis accéder à sa variable:

Code : Tout sélectionner

 void OnTriggerEnter(Collider other)
{
      cam.GetComponent <ten2> ().zoom1 = true;
}
ou
void OnTriggerEnter(Collider other)
{
      camTen.zoom1 = true;
}
A noter en faisant le GetComponent () qu'il vaut mieux le stocker quelque part (donc mieux passer par le script directement, solution 2) et le tester pour savoir s'il existe bien sinon ça lèvera une erreur.
"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

Avatar de l’utilisateur
NICOO96
Messages : 7
Inscription : 13 Jan 2017 01:58

Re: Modifier une variable d'un script depuis un autre

Message par NICOO96 » 13 Jan 2017 19:07

Ouiiii merci pour l'aide ça marche :).

Répondre

Revenir vers « Scripting »