2017-08-21 2 views
0

Ich mache ein Spiel in Unity C#, wo zu Beginn des Spiels 10 Kugeln instanziiert sind. Wenn ein Benutzer auf eine Kugel klickt, wird die Kugel mit der Eigenschaft set active false ausgeblendet. Nun möchte ich Bomben hinter einigen Kugeln platzieren, so dass das Spiel vorbei ist, wenn der Benutzer auf eine Kugel klickt, hinter der sich eine Bombe befindet.Wie legen Sie verschiedene Eigenschaften hinter instanziierten Objekten fest?

Spheres

List<GameObject> hat; 
float q, w, r; 
public Spheres() 
{ 
    hat = new List<GameObject>(); 
    q = -2.5f;w = -2.5f;r = -2.5f; 
} 

public void AddSphere(GameObject gola) 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     GameObject abc = GameObject.Instantiate (gola); 
     abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
     hat.Add (abc); q += 1.15f; 
    } 
} 

public void HideSphere() 
{ 
    if(Input.GetMouseButtonDown(0)) 
    { 
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);  
     RaycastHit hit; 
     if (Physics.Raycast (ray, out hit)) 
     { 
      if (hit.transform.gameObject.CompareTag ("Sphere")) 
      { 
       hit.transform.gameObject.SetActive (false); 
      } 
     } 
    } 
} 

Instanziierungsanwendung Sphären

for (int i = 0; i < 5; i++) 
{ 
    GameObject abc = GameObject.Instantiate (gola); 
    abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
    hat.Add (abc); q += 1.15f; 
} 
+3

Willkommen bei Stack Overflow! Dies ist keine Website, auf der Menschen Code für Sie schreiben, so dass Sie nicht müssen. Wenn Sie Hilfe zum Debuggen von Code benötigen, den Sie geschrieben haben, müssen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) veröffentlichen und das spezifische Problem mit Ihrem Code erläutern. – Nino

+0

Ihre Frage ist nur, wie man Haufen Sachen macht. Du musst spezifisch sein. Sie können Unity lernen, indem Sie einem ihrer [Tutorials] folgen (https://unity3d.com/learn/tutorials). – Programmer

+0

Was die anderen sagten plus: Lesen Sie [fragen] nach, wie Sie Ihre Frage verbessern können (und um downvotes/closevotes zu vermeiden). – Fildor

Antwort

0

Da Sie noch keinen Code hinzufügen, erkläre ich Ihnen nur, wie ich Ihr Problem angehen würde. Ich nehme an, Sie haben ein GameObject für die Kugeln erstellt, an das ein Skript angehängt wurde, das das GameObeject deaktiviert oder onClick() nicht sichtbar macht. So werden die Schritte nun folgen würde:

  1. eine boolesche Variable Dazu kommt, dass Gameobject genannt boolean hasBomb
  2. Wenn Sie in Ihrer Szene instanziiert die 10 Kugeln, gesetzt zufällig, dass boolean als wahr oder falsch
  3. Optional - wenn Sie auch eine Bombe prefabs hinzufügen möchten, können Sie sie in der gleichen Position der Kugeln instanziiert die Attribut hasBomb auf true
  4. im onClick() Methode der Kugeln setzen Sie überprüfen, ob (hasBomb) eingestellt ist true
  5. Wenn dies der Fall ist, laden Sie eine neue Szene namens GameOver mit einem Text oder einem Menü. Mit Application.LoadLevel("GameOver")

Bearbeiten mit dem Code, den Sie in Ihren Kommentaren versehen:

List<GameObject> hat; 
float q, w, r; 

public Spheres() {  
    hat = new List<GameObject>(); 
    q = -2.5f; 
    w = -2.5f; 
    r = -2.5f; 
} 

public void AddSphere(GameObject gola) {  
    for (int i = 0; i < 5; i++) { 
     GameObject abc = GameObject.Instantiate (gola); 
     abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 
     hat.Add (abc); 
     q += 1.15f; 
    }  
} 

public void HideSphere() {  
    if(Input.GetMouseButtonDown(0)) {  
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     RaycastHit hit; 

     if (Physics.Raycast (ray, out hit)) { 
      if (hit.transform.gameObject.CompareTag ("Sphere")) {  
       hit.transform.gameObject.SetActive (false);  
      }  
     }  
    }  
} 

Ich gehe davon aus Gola ist ein Gameobject Sie im Editor erstellt haben. Anstatt also das gameObject als "Sphäre" zu markieren, um später zu erkennen, ob Sie es mit der Taste unter Verwendung von Physics.Raycast drücken, können Sie ein Skript namens hideSphere.cs erstellen. In diesem Skript sollten Sie hinzufügen:

public boolean hasBomb; 

und auch

function OnMouseDown() 
{ 
    if(hasBomb) 
    Application.LoadLevel("GameOver") 

    renderer.enabled = false; 
    //Or 
    //Destroy(gameObject); 
} 

Dann sollten Sie:

  1. einen Collider Gola Gameobject hinzufügen (So ist es erkennt Klicks)
  2. Attach das Skript hideSphere.cs an die Gola Gameobject

Edit 2:

nun nach dem Zufallsprinzip zu entscheiden, ob die Kugel eine Bombe hat oder nicht:

GameObject abc = GameObject.Instantiate (gola); 
abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f); 

//Here we decide if it has a Bomb or not 
float chance = Random.Range(0.0f, 1.0f); 
if(chance > 0.75f) 
abc.GetComponent.<hideSphere>().hasBomb = true; 

hat.Add (abc); 

Hinweis: Mit der Linie abc.GetComponent.<hideSphere>().hasBomb = true; Sie auf die Variable hasBomb zugreifen Dies ist eine öffentliche Variable im Skript hideSphere.cs, die an das GameObject Gola angehängt ist. In diesem Fall ändern Sie nur dieses Attribut für die bestimmte in der aktuellen Iteration generierte Instanz.

+0

hinzugefügt Ich habe Skript mit der Hauptkamera angefügt und ich habe eine Sphäre als Originalobjekt zum Instantiieren verwendet. Also meinst du, dass ich einen Booleschen Wert mit einem Prefab der Sphäre hinzufügen soll. Aber wie könnte ich diesen Booler zufällig richtig oder falsch setzen? Von Inspektor? Oder Skript verwenden? Aber wenn Skript, dann wie man das macht ?! –

+0

Ok ich werde versuchen, diesen Teil auch zu meiner Antwort hinzuzufügen –

+0

Waiting .... !!!! –

0

Sie platzieren Ihre Bombe, wie Kugel Kinder. Wenn der Benutzer auf Kugel klickt, überprüfen Sie, ob Ihr Objekt zum Beispiel Kinder hat, die "Bombe" genannt werden.

Verwandte Themen