appel d'une variable depuis un autre script

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
brandon.b
Messages : 1
Inscription : 19 Août 2014 16:51

appel d'une variable depuis un autre script

Message par brandon.b » 19 Août 2014 17:05

Bonjour, voila après mainte et mainte recherche je me tourne vers vous afin de trouver une solution.

voila j'ai 2 script (dans 2 objet différents) et je veux que ma variable "A" dans le "ScriptA" soit valable dans mon "scriptB"

je m'explique j'ai un chargeur au sol, je veux que quand le joueur passe sur celui-ci un nombre de munition donné s’intègre dans ma variable "munition" du "scriptA"
sachant que la fonction OnTriggerEnter(objetInfo : collider) se trouve dans le "scriptB"

je vous affiche mes 2 script si cela peut vous être utile

ScriptA

Code : Tout sélectionner

#pragma strict
var objetForce = 1000;
static var vieHero = 100;
var distanceTir = 100;
var fireRate = 0.5;
var damage : float;
var chargeur : float;
var munition : float;
var tirOui : boolean;
var skinHUD : GUISkin;
var sonTir : AudioClip;
var impact : GameObject;
var chargeurActuel : float;
var DD : float;
var Rec : float;
function OnGUI() {
GUI.skin = skinHUD;
GUI.Label(Rect(Screen.width-100,Screen.height-50,100,25),chargeur+ "/" +munition);
GUI.Label(Rect(Screen.width-1000,Screen.height-50,100,25),"Vie : " + vieHero);
if (chargeur < 1){
GUI.Label(Rect(Screen.width-500,Screen.height-50,100,25),"Rechargez");
  }  
}

function Start(){//tout ce qui se trouve dans cette fonction est lue à chaque lancement du jeu

}

function Update () {//tout se qui dans cette fonction et lu a chaque image seconde 
if(Input.GetButton("Fire1")&& tirOui==true&&chargeur>0){ 
Fire();//si on peut tirailance la fonction fire 
if(chargeur<=0&& munition>0){//si on ne peut pas tirer, verifier si il faut recharger l'arme 
}
chargeurActuel = chargeur;
DD = 30-parseInt(chargeurActuel);
Rec = parseInt(munition) + parseInt(chargeurActuel);
}

if(Input.GetButton("Recharge")&& tirOui==true&&chargeur<=0){
Recharge ();
}
}//fin update

function Fire (){//...........................................fire..Mise emplace du tir ...........................................................
//lance l'animation pour  le tire 
transform.Find("CZ805").animation.CrossFade("shoot");
audio.PlayOneShot(sonTir); 
chargeur-=1;//enlève une balle dans le chargeur 
FireoneShot () ;//lance la fonction qui definie où la balle touche 
tirOui=false;//On ne peut plus tirer
yield WaitForSeconds (0.1); 

tirOui=true;
}//...........................................................................................................................................

function FireoneShot (){
var direction =transform.TransformDirection(Vector3.forward);
var hit :RaycastHit;
if(Physics.Raycast(transform.position,direction,hit,distanceTir)){
var tempRot=Quaternion.FromToRotation(Vector3.up,hit.normal);
Instantiate(impact,hit.point,tempRot); 
if(hit.rigidbody){
hit.rigidbody.AddForce(objetForce*direction);
}
}

}//fin de la  fonction fireoneshot ........................................






function Recharge (){//fonction qui permet de recharger son arme

if(munition<=0 && chargeur<=0){
GUI.Label(Rect(Screen.width-300,Screen.height-50,100,25),"VIDE");
tirOui=false;
}
 else{
transform.Find("CZ805").animation.CrossFade("reload");// Animation rechargement

if (munition>=30){
chargeur+=30;
munition-= parseInt(DD);
chargeur+=30;
if(chargeur>30){
chargeur=30;
}

}
}
}
script B

Code : Tout sélectionner

#pragma strict
function OnTriggerEnter(objetInfo : Collider){
if (objetInfo.gameObject.tag == "mag");
{

GUI.Label(Rect(Screen.width-300,Screen.height-50,100,25),"ADD");
Destroy(objetInfo.gameObject);
}
}
}
Merci a toutes les personnes qui se pencherons sur le sujet !

PS: si vous voyez des erreurs je suis preneur (on sait jamais :lol: )

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

Re: appel d'une variable depuis un autre script

Message par giyomuSan » 20 Août 2014 01:09

C'est vraiment la base , t'as pas du chercher beaucoup... :roll:

ya plusieurs facon de proceder..

Dans ton script B obtient le component de ton script A en utilisant un GetComponent par exemple

Code : Tout sélectionner


// desole si la syntaxe est pas correct je touche pas a UnityScript ..

var scriptA : int;

function Start()
{
    // en assumant que t as mis un tag "Player" sur l object qui contient le script A
    scriptA = GameObject.FindWithTag("Player").GetComponent("LeNomDeTonScriptA");
}

function OnTriggerEnter(col : Collider)
{
    // Dans mon example ca sera "Player" le tag
    if(col.tag == "Player") scriptA.Munition = 10;
}
la variable munition de ton scriptA doit evidemment etre public pour etre accessible depuis un autre script.

goodies..
http://docs.unity3d.com/ScriptReference ... onent.html
http://unity3d.com/learn/tutorials/modu ... /scripting

voila bon courage :)

proxomos
Messages : 9
Inscription : 01 Sep 2014 11:42

Re: appel d'une variable depuis un autre script

Message par proxomos » 01 Sep 2014 12:00

Je me permet de mettre de reprendre ce sujet car il traite d'un problème similaire au mien.
J'ai fouiller partout essayer x et y méthode mais rien n'y fait je n'y arrive pas, je commence a me décourager car cela fait plus de 5 jour que je lutte pour une chose qui semble évidente pour pas mal de monde et sa devient frustrant de ne pas réussir de mon coter.

J'en viens a demander votre aide et j’espère ne pas me faire refouler.
Je vous remercie tous d'avance pour tout aide conseil que vous pourriez m'apporter.


Voici le problème :



j'ai un 1er script nommé : scorejoueur qui contient ce code :

Code : Tout sélectionner

var score : int =0;

public function OnTriggerEnter(objetInfo:Collider)
{
	if(objetInfo.gameObject.tag=="capsules");
	{
	score ++;
	}
}	
et un 2ièmes script nommé : boutonporteniv1 qui contient le code suivant :

Code : Tout sélectionner

var scriptTarget:scorejoueur ;

var couleurs:Transform;
private var porte:GameObject;
porte = GameObject.Find("porte");

function Start(){
    scriptTarget = GameObject.Find("jambe").GetComponent("scorejoueur");
}

function Update(){
/*var score = GameObject.Find("jambe").GetComponent("scorejoueur").GetVarscore();*/ ne fonctionne pas je garde en référence.
print ("score = " + scriptsTarget.GetVarscore);
}


function OnTriggerEnter(objetInfo:Collider)
{

	if (objetInfo.gameObject.tag == "boutonporteniv1" && score >=7)
	{
		Instantiate(couleurs,transform.position,transform.rotation);
	Destroy(porte);
	}
	else if (objetInfo.gameObject.tag == "boutonporteniv1" && score <=6)
	{
	//montextlà // je n'ai pas encore vu comment réussir a afficher les texte a l’écran mais au moins vous voyer ce que je veux faire.
	}
}
je veux récupérer ma variable score du script "scorejoueur" et pouvoir m'en servir dans mon if pour vérifier si sa valeur est >= 7.
Hors malgré toutes les méthodes utiliser j'ai toujours des erreurs notamment, il ne trouve pas la valeur de "score".

Autre information les deux script sont sur le même objet appeler "jambe" et portant le tag "jambe" qui ce trouve être dans un GameObject Empty renommé en Personnagejoueur; ceci afin de reunir les morceau de mon personnage. Au cas ou cela pourrait avoir une incidence sur le code.

Sauriez vous m'aider s'il vous plait ?

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: appel d'une variable depuis un autre script

Message par artemisart » 01 Sep 2014 12:07

GetVarscore n'existe pas, utilise

Code : Tout sélectionner

GetComponent.<scorejoueur> ().score
;)

Avatar de l’utilisateur
A_cube
Messages : 63
Inscription : 08 Juil 2011 08:50

Re: appel d'une variable depuis un autre script

Message par A_cube » 01 Sep 2014 12:08

La réponse de giyomuSan est clair et fonctionne très bien pourtant ...
Cherche à faire un blog pour mes projets, des suggestions ? Merci ;) || WIP (Aeourant) en préparation ... :D

proxomos
Messages : 9
Inscription : 01 Sep 2014 11:42

Re: appel d'une variable depuis un autre script

Message par proxomos » 01 Sep 2014 12:13

j'ai toujours la même erreur :
même en modifiant la ligne de code ainsi:

Code : Tout sélectionner

function Update(){
/*var score = GameObject.Find("jambe").GetComponent("scorejoueur").GetVarscore();*/
print ("score = " + scriptTarget.GetComponent.<scorejoueur> ().score);
}
unity me retourne :
Assets/monjeux/Scripts/boutonporteniv1.js(20,62): BCE0005: Unknown identifier: 'score'.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: appel d'une variable depuis un autre script

Message par artemisart » 01 Sep 2014 12:16

Essaye soit scriptTarget.score soit GetComponent.<scorejoueur> ().score
Si aucun ne marche, réessaye avec public var score : int = 0 au lieu de juste var (même si je doute que ça marche).

Avatar de l’utilisateur
A_cube
Messages : 63
Inscription : 08 Juil 2011 08:50

Re: appel d'une variable depuis un autre script

Message par A_cube » 01 Sep 2014 12:17

Si les scripts sont sur le même objet, tu n'as pas besoin de faire GameObject.Find, tu peux faire directement this.GetComponent.

Sinon score est bien public ?
Cherche à faire un blog pour mes projets, des suggestions ? Merci ;) || WIP (Aeourant) en préparation ... :D

proxomos
Messages : 9
Inscription : 01 Sep 2014 11:42

Re: appel d'une variable depuis un autre script

Message par proxomos » 01 Sep 2014 12:29

Merci pour votre aide sa fait vraiment plaisir d'en avoir un peu.

J'ai donc modifier mes scripts ainsi suivant vos remarques :

scorejoueur :

Code : Tout sélectionner

public var score : int =0; //il n'etais pas en public je viens de le mettre.

public function OnTriggerEnter(objetInfo:Collider)
{
	if(objetInfo.gameObject.tag=="capsules");
	{
	score ++;
	}
}	
et boutonporteniv1 :

Code : Tout sélectionner

var scriptTarget : scorejoueur;
var couleurs:Transform;
private var porte:GameObject;
porte = GameObject.Find("porte");

function Start(){
    scriptTarget = this.GetComponent("scorejoueur");
}

function Update(){
var score = scriptTarget.GetComponent.<scorejoueur> ().score);
print ("score");
}

function OnTriggerEnter(objetInfo:Collider)
{

	if (objetInfo.gameObject.tag == "boutonporteniv1" && score >=7)
	{
		Instantiate(couleurs,transform.position,transform.rotation);
	Destroy(porte);
	}
	else if (objetInfo.gameObject.tag == "boutonporteniv1" && score <=6)
	{
	//montextlà
	}
}
Ce coup ci l'erreur est différente il me dit :
Assets/monjeux/Scripts/boutonporteniv1.js(11,61): BCE0043: Unexpected token: ).

Avatar de l’utilisateur
A_cube
Messages : 63
Inscription : 08 Juil 2011 08:50

Re: appel d'une variable depuis un autre script

Message par A_cube » 01 Sep 2014 12:31

Enlève la parenthèse après score ;)
Cherche à faire un blog pour mes projets, des suggestions ? Merci ;) || WIP (Aeourant) en préparation ... :D

Répondre

Revenir vers « Scripting »