[AL - JS] Correction Script d'un coffre

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
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
aurelien1013
Messages : 8
Inscription : 04 Nov 2014 18:40

[AL - JS] Correction Script d'un coffre

Message par aurelien1013 » 17 Août 2016 14:54

Bonjour ou bonsoir, :)
Depuis quelques jours j'essaye d'ajouter un coffre qui quand on presse la touche E augmente l'argent du joueur et disparait.
J'ai donc téléchargé le script du tuto que je suivais et j'ai bien modifié les noms des variantes et du coffre comme il fallait, et j'ai mit le script sur mon coffre mais rien ne change en jeu.
Si quelqu'un voudrait bien m'aider. Merci d'avance. (Je ne suis pas sur d'avoir posté ce message au bon endroit donc désolé si je me suis trompé)

Balise Code pour le code
Le script :

Code : Tout sélectionner

#pragma strict
private var playerstats : PlayerStats;
private var showGUI : boolean = false;
var treasurechest_open : String;
var Amount : int;

function Start () {
   playerstats = GameObject.Find("Health").GetComponent(PlayerStats);
}


function OnTriggerEnter(hit : Collider) {

   if(hit.gameObject.tag == "Player"){
   showGUI = true;
}
}

function OnTriggerExit(hit : Collider){
   if(hit.gameObject.tag == "Player"){
   showGUI = false;
}
}


function Update () {
    if(showGUI == true){
    
    if(Input.GetKeyDown("e")){
    
    Debug.Log ("Chest open");
    playerstats.money += 100;
    GameObject.Find(treasurechest_open).GetComponent(Chest).enabled = false;
    
    }
    }
}



function OnGUI()
{
   if(showGUI == true){
   GUI.BeginGroup(new Rect(Screen.width/2-50,Screen.height/2-12.5,300,300));
   GUI.Box(Rect(0,0,100,25),"E pour ouvrir");
   GUI.EndGroup ();
   }
}
Sujet redirigé: C'est un problème de script donc ça va dans script. C'est du Js, donc dans la sous section Js.

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

Re: [AL - JS] Correction Script d'un coffre

Message par boubouk50 » 17 Août 2016 15:05

Qu'est ce qui ne va pas?
-> erreur de script: Quelles sont les erreurs console?
-> l'argent ne s'ajoute pas?
-> le coffre ne disparaît pas?
-> L'UI ne s'affiche pas?
-> As-tu mis des collider en trigger sur ton GameObject?

Bref, "ça marche pas" n'est pas une explication de problème, merci d'être plus explicite.
"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

aurelien1013
Messages : 8
Inscription : 04 Nov 2014 18:40

Re: [AL - JS] Correction Script d'un coffre

Message par aurelien1013 » 17 Août 2016 17:32

Merci de ta réponse, quand j'approche le coffre il ne se passe rien, de même si j'appuie sur E même l'UI n'apparait pas.
Et non je pense que c'est parce que il n'y a pas de collider mais je n'ai pas trouvé comment en on met .

Edit :J'ai réussi a rajouter un collider tout fonctionne le seul problème c'est que le coffre ne disparait pas et donc on peut augmenter l'argent a l'infini
Dernière édition par aurelien1013 le 17 Août 2016 17:43, édité 1 fois.

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

Re: [AL - JS] Correction Script d'un coffre

Message par boubouk50 » 17 Août 2016 17:37

Donc pas de collisions détectées à priori.
Ajoute un Debug.Log() au début de ton OnTriggerEnter () en dehors de toute condition, pour vérifier que la détection à lieu.
Si aucune détection n'a lieu, il peut y avoir plusieurs solutions:
Ton player n'est pas taggé Player. Il doit posséder un rigidbody avec un collider.
Ton coffre doit avoir aussi un collider typé Trigger.
Recherche un peu les collisions entre Rigidbody et Trigger, s'ils sont mal configurés, la détection ne se fait pas.
"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

aurelien1013
Messages : 8
Inscription : 04 Nov 2014 18:40

Re: [AL - JS] Correction Script d'un coffre

Message par aurelien1013 » 22 Août 2016 17:02

Maintenant ça fonctionne mais le coffre ne disparait pas et donc on peut toujours appuyer sur E et on peut avoir de l'argent a l'infini et une fois le jeu compilé quand je le teste la console m'affiche un message d'erreur, alors que quand je le teste dans l'éditeur la console n'affiche rien :
Image

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

Re: [AL - JS] Correction Script d'un coffre

Message par boubouk50 » 22 Août 2016 17:04

J'opterais pour le fait qu'un objet soit détruit et que le script essaie encore d'accéder à cet objet.
Poste ton code, si tu veux qu'on t'aide. Ceci est une erreur générique.
"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

aurelien1013
Messages : 8
Inscription : 04 Nov 2014 18:40

Re: [AL - JS] Correction Script d'un coffre

Message par aurelien1013 » 22 Août 2016 18:26

Le script :

Code : Tout sélectionner

#pragma strict
private var playerstats : PlayerStats;
private var showGUI : boolean = false;
var treasurechest_open : String;
var Amount : int;

function Start () {
   playerstats = GameObject.Find("Health").GetComponent(PlayerStats);
}


function OnTriggerEnter(hit : Collider) {

   if(hit.gameObject.tag == "Player"){
   showGUI = true;
}
}

function OnTriggerExit(hit : Collider){
   if(hit.gameObject.tag == "Player"){
   showGUI = false;
}
}


function Update () {
    if(showGUI == true){
    
    if(Input.GetKeyDown("e")){
    
    Debug.Log ("Chest open");
    playerstats.money += 100;
    GameObject.Find(treasurechest_open).GetComponent(Chest).enabled = false;
    
    }
    }
}



function OnGUI()
{
   if(showGUI == true){
   GUI.BeginGroup(new Rect(Screen.width/2-50,Screen.height/2-12.5,300,300));
   GUI.Box(Rect(0,0,100,25),"E pour ouvrir");
   GUI.EndGroup ();
   }
}
Et je tenais aussi a m'excuser de faire beaucoup d'erreur sur le forum (se tromper de balise, d'endroit ou poster etc..) mais je ne suis pas habitué au forum d'aide :|

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

Re: [AL - JS] Correction Script d'un coffre

Message par boubouk50 » 23 Août 2016 09:24

Bon ça va, c'est pas terrible comme erreur. Quelques conseils et corrections:
* Une variable commence par une minuscule, une fonction par une Majuscule -> Nomenclature de programmation.
* Un booléen est un état binaire, pas besoin de le comparer à true ou false, pour avoir true ou false, puisque soit l'un soit l'autre.
* Eviter au maximum les Find () (dans le Start () c'est très bien) et s'assurer que l'objet a été trouvé.
* Réfléchis bien à toutes les sorties possibles dans ton algo. Ici, l'objet, une fois pillé ne fait rien. Il devrait être détruit pour ne servir qu'une fois. Il te manque donc la finalité de ton code.

Code : Tout sélectionner

#pragma strict

private var playerstats : PlayerStats;
private var showGUI : boolean = false;
var treasurechest_open : String; //Quitte à aller chercher une variable autant chercher directement la bonne? Donc un GameObject
var amount : int; //Variable commence par une minuscule

function Start () {
	GameObject health = GameObject.Find("Health");
	if (health != null) //toujours tester la variable avant d'accéder à un Component. Si le GameObject n'est pas trouvé, tu auras une erreur.
   		playerstats = health.GetComponent(PlayerStats);
   	//else Comme ceci tu peux gérer le cas où Health n'est pas trouvé
   		//Ici faire en sorte de trouver Health ou d'indiquer qu'il n'est pas trouvé
}


function OnTriggerEnter(hit : Collider) {
	//Instant logique: si le résultat de la condition est réalisé alors true, sinon false. Ca revient à donner directement le résultat de la condition
	showGUI = (hit.gameObject.tag == "Player");
}

function OnTriggerExit(hit : Collider){
	//Instant logique: si le résultat de la condition est réalisé alors true, sinon false. Ca revient à donner l'inverse du résultat de la condition
	showGUI = !(hit.gameObject.tag == "Player");
}


function Update () {
//Tu peux imbriquer les conditions
//showGUI == true, reviens à faire si showGUI == true alors true, sinon false, donc encore c'est inutile puisque ça vaut toujours showGUI
    if (showGUI && Input.GetKeyDown("e")) { //Si showGUI ET Appui sur E
    	Debug.Log ("Chest open");
		playerstats.money += 100;
		//La par contre ne sachant à quoi cela correspond, je peux pas conseiller. Mais il faut au moins tester si treasurechest_open existe
    	GameObject tmp = GameObject.Find(treasurechest_open);
    	if (tmp != null) {
    		Chest chest = tmp.GetComponent(Chest);
    		if (chest != null)
    			chest.enabled = false;
    		else
    			Debug.Log ("Component Chest not found");
    	}
    	else
    		Debug.Log ("treasurechest_open not found");
    	//Il te faut faire quelque chose pour éviter que cela se reproduise: variable booléenne/détruire le coffre
    }
}



function OnGUI()
{
	if(showGUI){
		GUI.BeginGroup(new Rect(Screen.width/2-50,Screen.height/2-12.5,300,300));
		GUI.Box(Rect(0,0,100,25),"E pour ouvrir");
		GUI.EndGroup ();
	}
}
"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

Verrouillé

Revenir vers « (Js) Javascript »