2017-10-06 7 views
1

Je fais un jeu de basket-ball de base et j'ai un booléen public appelé dunkComplete qui est activé après que le ballon soit trempé et est attachant au script de balle, j'essaye de référencer ce booléen dans un jeu script du gestionnaire, mais pour une raison quelconque, même si dunkComplete devient vrai son homologue du gestionnaire de jeu n'est pas, heres le script du gestionnaire de jeu pour référence.Référencement de variables non-statiques

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

public class game_manager : MonoBehaviour { 

    public GameObject Basket; 

    private float x_value; 
    private float y_value; 

    public GameObject ball; 
    private ball_script basketBallScript; 
    private bool dunkCompleteOperation; 

    // Use this for initialization 
    void Start() { 
     basketBallScript = ball.GetComponent<ball_script>(); 

     Vector2 randomVector = new Vector2(Random.Range(-9f, 9f), Random.Range(0f, 3f)); 

     Debug.Log(randomVector); 

     Instantiate(Basket, randomVector, transform.rotation); 

     Instantiate(ball, new Vector2(0, -3.5f), transform.rotation); 
    } 

    // Update is called once per frame 
    void Update() { 

     dunkCompleteOperation = basketBallScript.dunkComplete; 

     if (dunkCompleteOperation == true) 
     { 
      Vector2 randomVector = new Vector2(Random.Range(-9f, 9f), Random.Range(0f, 3f)); 

      Instantiate(Basket, randomVector, transform.rotation); 
     } 
    } 
} 

Toute aide serait grandement appréciée merci.

+0

Pouvez-vous partager votre ball_script? Aussi, y a-t-il seulement une balle ou tu en engages une autre après un dunk ou quelque chose comme ça? – ZayedUpal

Répondre

0

Votre panierBallScript ne fait pas référence à la bal_script que l'objet balle que vous instanciez. Vous devez conserver la référence à GameObject que vous avez créée, puis affecter le fichier basketBallScript.

Essayez ceci:

public class game_manager : MonoBehaviour { 

    public GameObject Basket; 

    private float x_value; 
    private float y_value; 

    public GameObject ball; 
    private ball_script basketBallScript; 
    private bool dunkCompleteOperation; 

    // Use this for initialization 
    void Start() { 

     Vector2 randomVector = new Vector2(Random.Range(-9f, 9f), Random.Range(0f, 3f)); 

     Debug.Log(randomVector); 

     Instantiate(Basket, randomVector, transform.rotation); 
     // Get the ref. to ballObj, which is instantiated. Then assign the script. 
     GameObject ballObj = Instantiate(ball, new Vector2(0, -3.5f), 
     transform.rotation) as GameObject; 
     basketBallScript = ballObj.GetComponent<ball_script>(); 
    } 

    // Update is called once per frame 
    void Update() { 

     dunkCompleteOperation = basketBallScript.dunkComplete; 

     if (dunkCompleteOperation == true) 
     { 
      Vector2 randomVector = new Vector2(Random.Range(-9f, 9f), Random.Range(0f, 3f)); 

      Instantiate(Basket, randomVector, transform.rotation); 
     } 
    } 
} 

Aussi, juste pour rendre votre code plus facile à suivre pour les autres à l'avenir, vous pouvez consulter la general naming conventions.