2017-02-02 3 views
0

Я хочу сделать бесконечную игру бегуна. У меня есть 2 объекта, один сверху и один внизу. Игроки должны прыгать между ними или приседать по объектам. Я создал скрипт, который создает эти объекты, но иногда два объекта создаются на одной и той же позиции, поэтому игроки ничего не могут сделать. Как это решить? Могу ли я проверить другие объекты на оси X, но не на коллайдере?Случайный объект в Unity

+0

Почему бы не использовать коллайдер? – maksymiuk

+1

Просьба указать код, который вы используете – Maakep

+0

Кажется, что вам нужно отслеживать эти объекты, и всякий раз, когда вы создаете новый, посмотрите на те, которые вы уже создали, чтобы убедиться, что позиция 'X' не является одинаковой как любой из них. – GantTheWanderer

ответ

0

Когда вы вызываете функцию, чтобы создать экземпляр вашего игрового объекта, проверьте, не является ли положение x последнего игрового объекта тем же, что и тот, который вы собираетесь использовать.

private Vector3 LastObjectPosition, NewObjectPosition; 
    private float minDistanceBetweenTwoObstacles = 5; 

    public void InstantiateNewObstacle() 
    { 
     // Check if the x position of the new object isn't the same 
     // as the the x position of the last object 
     if (NewObjectPosition.x != LastObjectPosition.x) 
     { 
      // Instantiate your gameobject 
      MyInstantiate(); 
     } 
     // Else increase the x value for the x position of the new object 
     // and then instantiate your gameobject 
     else 
     { 
      NewObjectPosition.x += minDistanceBetweenTwoObstacles; 
      MyInstantiate(); 
     } 
    } 

    public void MyInstantiate() 
    { 
     // Instantiate your prefab at the NewObjectPosition position 
     Instantiate(new GameObject(), NewObjectPosition, new Quaternion()); 
     // Save the position of the new object as the position 
     // of the last object instantiated 
     LastObjectPosition = NewObjectPosition; 
    } 

Надеюсь, это может вам помочь!

+0

Новый объект никогда не будет иметь одинаковое положение.x, потому что это все время перемещается – Axel121

1

В основном вы просите нас предоставить вам генератор генератора и исходный код игрового контроллера! Вы должны написать один для своей игры. Не потому, что мы не хотим давать вам код, а потому, что каждая игра должна иметь свои собственные.

Для начала вы можете:

  • разделить вашу игру область матрицы, то есть массив какой-то, где каждая ячейка может иметь объект игры или быть пустым. тогда игровые объекты могут иметь свою собственную локальную позицию внутри этой ячейки. очевидно, что одна ячейка не может содержать два игровых объекта.

  • есть генератор уровня, который сообщает игровому контроллеру, где должны появляться новые объекты. Однако вы должны внедрить что-то в генератор уровня для предотвращения перекрытий.

посмотреть на этот psudo код:

void FixedUpdate() 
{ 
    if (player.transform.position.x + Half_of_screen_width_plus_margin > nextX) 
    { 
     Spawn(tmp[i].prefab, nextX); 
     nextX += tmp[i].distanceToNext; 
     i++; 
    } 

} 

Half_of_screen_width_plus_margin для игры, чтобы предвидеть, что будет

tmp[] представляет собой набор (не-экземпляры) объектов быть создан. каждый объект определяется произвольно.

Как вы видите, скрипт проверяет следующую позицию каждые фиксированные интервалы времени и сравнивает положение x конца экрана со следующей позицией x. Если он передается, создается следующий объект и изменяет следующую позицию x на другое место.

Если вы хотите использовать случайное поколение, тогда tmp [] следует изменить на tmp. где с каждым экземпляром создается следующее:

void FixedUpdate() 
{ 
    if (player.transform.position.x + Half_of_screen_width_plus_margin > nextX) 
    { 
     Spawn(tmp.prefab, nextX); 
     nextX += tmp.distanceToNext; 

     tmp = generate_new_random_object(); 
    } 

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