2016-03-19 13 views
0

Ich bin ein Anfänger im Codieren. Ich habe versucht, das beliebte Handy-Spiel 'Crossy Road' für ein paar Tage neu zu erstellen. Während ich versuchte, ein Level-Generierungs-Skript zu erstellen, stieß ich auf ein Problem. Das Problem, mit dem ich konfrontiert bin, ist, dass wenn ich versuche, 3 verschiedene Objekte zufällig zu instantiieren (in diesem Fall Gras, Straße und Wasser) nur Gras erzeugt wird. Ich würde es sehr schätzen, wenn mir jemand sagen könnte, warum es immer wieder das "Grass" -Objekt instanziiert. Ich erstelle das Spiel in Unity 5 fyi. Der Code ist wie folgt -Das gleiche Objekt wird in C# immer wieder instanziiert.

using UnityEngine; 
using System.Collections; 

public class LevelGenerationScript : MonoBehaviour { 

public GameObject Water; 
public GameObject Road; 
public GameObject Grass; 
int firstRand; 
int secondRand; 
int distPlayer = 10; 

Vector3 intPos = new Vector3(0,0,0); 

void Update() 
{ 
    if (Input.GetButtonDown("up")) 
    { 
     firstRand = Random.Range(1,4); 
     if(firstRand == 1) 
     { 
      secondRand = Random.Range(1,8); 
      for(int i = 0;i < secondRand; i++) 
      { 
       intPos = new Vector3(0,0,distPlayer); 
       distPlayer += 1; 
       GameObject GrassIns = Instantiate(Grass) as GameObject; 
       GrassIns.transform.position = intPos; 
      } 

      if(firstRand == 2) 
      { 
       secondRand = Random.Range(1,8); 
       for(int i = 0;i < secondRand; i++) 
       { 
        intPos = new Vector3(0,0,distPlayer); 
        distPlayer += 1; 
        GameObject RoadIns = Instantiate(Road) as GameObject; 
        RoadIns.transform.position = intPos; 
       } 

       if(firstRand == 3) 
       { 
        secondRand = Random.Range(1,8); 
        for(int i = 0;i < secondRand; i++) 
        { 
         intPos = new Vector3(0,0,distPlayer); 
         distPlayer += 1; 
         GameObject WaterIns = Instantiate(Water) as GameObject; 
         WaterIns.transform.position = intPos; 
        } 
       } 
      } 
     } 
    } 
} 
} 

Ich würde es wirklich schätzen, wenn jemand mir den Fehler sagen könnte. Danke!

+2

Es gibt viele Dinge, die in diesem Code verbessert werden kann , aber stellen Sie zuerst sicher, dass 'if (firstRand == ...' nicht verschachtelt ist, dh schließen Sie das erste 'if' mit'} ', dann machen Sie das nächste' if' usw. –

Antwort

1

Ihre Aussage if (firstRand == 2) wird niemals erreicht werden, da sie in der if (firstRand ==1)-Anweisung enthalten ist.

Sie benötigen if Aussagen wie diese zu strukturieren:

if (firstRand == 1) 
{ 
    ... 
} 

if (firstRand == 2) 
{ 
    ... 
} 

if (firstRand == 3) 
{ 
    ... 
} 

Wenn Sie den Code verbessern möchten folgenden funktionieren sollte:

firstRand = Random.Range(1,4); 
secondRand = Random.Range(1,8); 
GameObject instance = null; 

for (int i = 0; i < secondRand; i++) 
{ 
    intPos = new Vector3(0, 0, distPlayer); 
    distPlayer += 1; 

    switch (firstRand) 
    { 
     case 1: 
      instance = Instantiate(Grass) as GameObject; 
      break; 
     case 2: 
      instance = Instantiate(Road) as GameObject; 
      break; 
     case 3: 
      instance = Instantiate(Water) as GameObject; 
      break; 
    } 

    instance.transform.position = intPos; 
} 
1

Sie haben Ihren Code für die anderen Objekte in der Codegruppe platziert, die aufgerufen wird, wenn First Rand 1. (First Rand == 2) und (First Rand == 3) an dieser Position nie wahr ist, haben Sie nicht erreichbar Code geschrieben .

+0

Danke für die Hilfe! Code sollte jetzt funktionieren. –

Verwandte Themen