Ammo Box et 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
Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Ammo Box et Coffre

Message par Kakashi-Anbu » 06 Mai 2016 11:32

Bonjour toutes et à tous la communauté d'Unity France , alors voila je continue à travailler sur mon projet en ajoutant des élements intéractive tel que des boites de munitions et des coffres , mais le problème vient plutôt de la boite de munition , en faite lorsque je passe en phase de test pour tester la fonctionnalité des scripts , ma boite de munitions disparaît par contre le coffre lui reste toujours et il fonctionne...

Voici pour commencer les scripts du coffre et de la boite de munitions :

Ammo Box :

Code : Tout sélectionner

#pragma strict

var ammo : int = 30;
var eject : GameObject;

private var shoteject : ShotEject;
private var showGUI : boolean = false;

function Start () {
shoteject = GameObject.Find("Eject").GetComponent(ShotEject);
}

function Update () {
  if(showGUI == true){
   if(Input.GetKeyDown("p")){
   shoteject.reserve += ammo;
   Destroy (gameObject); 
   }
  }
}

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

}

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

function OnGUI(){
if(showGUI == true){
 GUI.Box(Rect(Screen.width/2-200,Screen.height/2-12.5,300,25), "Ramassez un objet avec la touche P");
}
}

Script du coffre :

Code : Tout sélectionner

#pragma strict
private var playerstats : PlayerStats;
private var showGUI : boolean = false;

function Start () {

    playerstats = GameObject.Find("Inventaire").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 OnGUI(){
        if(showGUI == true){
            GUI.Box(Rect(Screen.width/2-200,Screen.height/2-12.5,300,25), "Ramassez un objet avec la touche P");
        }
    }


    function Update () {
        if(showGUI == true){
            if(Input.GetKeyDown("p")){

                Debug.Log ("+100 Argent");
                playerstats.Argent += 100;
                GameObject.Find("Coffre").GetComponent(Coffre).enabled = false;
                Destroy(gameObject);
            }
        }

}
PS : J'aimerais ajouter un guitext lorsque l'objet et détruit pour dire par exemple " 100 argent ramassé" ou "30 munitions ramasssé" un message qui permet de voir le butin pris par le joueur au cours de la partie.

Je tiens à vous remercier , pour toutes questions sur mon problème , n'hésitez pas.

Merci d'avance.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Ammo Box et Coffre

Message par Moi 1971 » 06 Mai 2016 13:40

Bonjour,
tu peux nous dire ce que tu souhaite faire avec ces deux lignes de code dans la partie Update() du coffre :

Code : Tout sélectionner

GameObject.Find("Coffre").GetComponent(Coffre).enabled = false;
Destroy(gameObject);
Dans le script de l'ammo, a quoi sert cette variable? :

Code : Tout sélectionner

var eject : GameObject;

Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Re: Ammo Box et Coffre

Message par Kakashi-Anbu » 06 Mai 2016 14:45

Pour le script du coffre , je suit ce tutoriel : https://www.youtube.com/watch?v=pvOlZav ... C3&index=7

Pour celui de l'Ammo box , je suit celui-ci : https://www.youtube.com/watch?v=vLgAS8-Btbw

Voila voila merci d'avance .

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Ammo Box et Coffre

Message par Moi 1971 » 06 Mai 2016 15:25

Donc tu ne fais que recopier. C'est très bien, mais moi je vais pas regarder les tutos pour te les expliquer. Refais les tuto pour comprendre.
Parce que le tuto pour le coffre que tu as mis en lien explique le bug que tu rencontre!!! Le mec explique pourquoi ça bug. Il a fait un script dans l'épisode 6, et il refait une vidéo pour expliquer comment corriger son bug lorsqu'il y a plusieurs coffres.
Alors pourquoi ça bug son code :

Code : Tout sélectionner

 GameObject.Find("Coffre").GetComponent(Coffre).enabled = false;
En gros la commande "GameObjet.Find("Coffre")" va chercher l'objet qui s'appelle "Coffre" qui se trouve dans la "Hierarchy" de l'interface Unity. LE PREMIER, et toujours le premier, même s'il y en a 50. Après la commande "GetComponent(Coffre)" va chercher le composant de cette objet qui s'appelle "Coffre" (ici sûrement le nom du script) et enfin, rend le script inopérant avec la commande : "enabled = false"
Le problème de suivre les tuto, c'est que le mec est pas très bon pour ce qui est de la normalisation et le nommage. Si tu appel tout "Coffre"(objet, script, fonction,...) forcément à un moment tu te perds dans "qui est quoi?".
Le script du coffre tu devrais l'appelé "GestionDuCoffre"ou un truc du genre. L'objet coffre tu pourrais l'appelé 'LeCoffre"
Bref, pour corriger son bug (qui n'est que le conséquence de sa façon de programmer) le mec fait les modifications suivantes :
1/ Création d'une variable public de type String qui contiendra un NOM UNIQUE pour chaque coffre et qu'il faudra renseigner dans l'éditeur Unity à chaque fois que tu dupliqueras un coffre pour en faire un autre.

Code : Tout sélectionner

var ChestName : String;
2/ Il remplace la ligne de code "GameObject.Find...." par celle-ci :

Code : Tout sélectionner

GameObject.Find(ChestName).GetComponent(Coffre).enabled = false;
Voilà....

Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Re: Ammo Box et Coffre

Message par Kakashi-Anbu » 06 Mai 2016 18:04

Voila , j'ai essayer de corriger au maximum tout mes scripts et mes varibles pour l'ammo box...

Pour le coffre , j'ai tenter la technique mais cette fois-ci Unity me dit qu'il ne trouve pas PlayerStats qui est un Component du GameObject "Inventaire" alors que je crois que tout y est...

Le message s'affiche même dans la console , mais je ne récupère ni le butin et le coffre ne s'auto détruit pas...

Script :

Code : Tout sélectionner

#pragma strict
private var playerstats : PlayerStats;
private var showGUI : boolean = false;
var CoffreName : String;
var Butin : int;

function Start () {
   playerstats = GameObject.Find("Inventaire").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("p")){
    
    Debug.Log ("Coffre ouvert");
    playerstats.Argent += Butin;
    GameObject.Find(CoffreName).GetComponent(Coffre).enabled = false;
    
    
    }
    }
}



function OnGUI(){
    if(showGUI == true){
        GUI.Box(Rect(Screen.width/2-200,Screen.height/2-12.5,300,25), "Ramassez un objet avec la touche P");
    }
}
Screen : Image

En espérant que j'ai pu t'éclairicir un maximum :|

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Ammo Box et Coffre

Message par Moi 1971 » 06 Mai 2016 19:11

Tu peux afficher la console dans une fenêtre indépendante en double-cliquant sur le message d'erreur, et dans cette fenêtre copier/coller les messages d'erreurs pour les afficher sur ce forum (en mode texte c'est plus lisible qu'une image)

Pour le problème de "PlayerStats " mets un "Debug.log()" comme ceci:

Code : Tout sélectionner

function Start () {
   playerstats = GameObject.Find("Inventaire").GetComponent(PlayerStats);
   Debug.Log("playerstats  = "+playerstats);
}
Pour le coffre, dans le tuto, le mec ne détruit pas le coffre, il le désactive. Dans ton code il n'y a rien qui détruit ton coffre.

Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Re: Ammo Box et Coffre

Message par Kakashi-Anbu » 06 Mai 2016 20:11

J'i bien changer la ligne que tu ma demander mais le problème continue...

Voila le message que la console me délivre : :rouge:

NullReferenceException: Object reference not set to an instance of an object
Coffre.Update () (at Assets/Scripts/Jeu/Interaction/Coffre.js:33)

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Ammo Box et Coffre

Message par Moi 1971 » 06 Mai 2016 20:43

C'est un Debug.Log que tu as rajouté. Où est le message?

Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Re: Ammo Box et Coffre

Message par Kakashi-Anbu » 07 Mai 2016 14:10

Voila les messages que la console m'indique , j'ai pris un screen plus propre pour que tu puisse mieux voir.

PS : Ne prête pas attention à l'érrueur qui concerne le "Muzle flash" c'est rien c'est un détail pas important.

Screen : Image

Avatar de l’utilisateur
Kakashi-Anbu
Messages : 133
Inscription : 08 Avr 2012 21:44

Re: Ammo Box et Coffre

Message par Kakashi-Anbu » 07 Mai 2016 14:13

Voila les messages que la console m'indique...


playerstats =
UnityEngine.Debug:Log(Object)
Coffre:Start() (at Assets/Scripts/Jeu/Interaction/Coffre.js:9)


Coffre ouvert
UnityEngine.Debug:Log(Object)
Coffre:Update() (at Assets/Scripts/Jeu/Interaction/Coffre.js:32)


NullReferenceException: Object reference not set to an instance of an object
Coffre.Update () (at Assets/Scripts/Jeu/Interaction/Coffre.js:33)

Verrouillé

Revenir vers « (Js) Javascript »