2016-03-19 3 views
0

Я начинающий при кодировании. Я уже несколько дней пытаюсь воссоздать популярную мобильную игру «Crossy Road». Пока я пытался создать сценарий создания уровня, у меня возникла проблема. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь создать три объекта в случайном порядке (в этом случае Трава, Дорога и Вода) генерируется только трава. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, почему он постоянно создает экземпляр объекта «Трава». Я воссоздаю игру в Unity 5 fyi. Код выглядит следующим образом:Один и тот же объект запускается снова и снова в C#

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; 
        } 
       } 
      } 
     } 
    } 
} 
} 

Я был бы очень признателен, если бы кто-нибудь мог сказать мне ошибку. Спасибо!

+2

Есть много вещей, которые могут быть улучшены в этом коде , но в первую очередь убедитесь, что 'if (firstRand == ...' не вложен, т. е. закройте первый 'if' с'} ', затем выполните следующий' if' и т. д. –

ответ

1

Ваше заявление if (firstRand == 2) никогда не будет достигнуто, поскольку оно содержится в заявлении if (firstRand ==1).

Вы должны структурировать if заявления, как это:

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

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

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

Если вы хотите улучшить свой код должен работать:

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

Вы разместили свой код для других объектов внутри группы кода, который вызывается, когда firstRand равен 1. (FirstRand == 2) и (FirstRand == 3) находятся в этой позиции, никогда не верной, вы написали недостижимый код ,

+0

Спасибо за помощь! код должен работать сейчас. –

Смежные вопросы