2017-02-17 21 views
0

Я новичок в Unity2D (Unity 5.0.2f1) и искал решение, которое, я уверен, смотрит на меня прямо в лицо!Unity2D C# Случайно Spawn GameObject в области над другим GameObject

У меня есть игровой объект (по существу дорога), как показано ниже (DirtTrack1):

enter image description here

У меня есть Spawner, который порождает GameObjects (транспортные средства). Я хочу, чтобы эти машины двигались по этой дороге.

Я пробовал следующий код для этого, по сути, пытаясь вызвать транспортное средство в пределах оси Y по дороге, получив нижнюю координату Y дороги и верхнюю координату Y, поэтому я получить минимальные и максимальные вертикальные позиции, где я могу поместить транспортное средство:

void FixedUpdate() { 

    // Repeat spawning after the period spawn 
    // route has finished. 
    if (!_inSpawningIteration) 
     StartCoroutine (SpawnVehiclePeriodically()); 
} 

IEnumerator SpawnVehiclePeriodically() 
{ 
     // First, get the height of the vehicle and road. 
     float vehicleHeightHalf = vehiclePreFab.GetComponent<SpriteRenderer>().bounds.size.y/2f; 
     float roadHeightHalf = roadObject.GetComponent<SpriteRenderer>().bounds.size.y/2f; 

     float roadTopY = roadObject.transform.position.y + roadHeightHalf; 
     float roadBottomY = roadObject.transform.position.y - roadHeightHalf; 

     // Next, ensure that maxY is within bounds of this farm vehicle. 
     roadMaxY = roadTopY - vehicleHeightHalf; 
     roadMinY = roadBottomY + vehicleHeightHalf; 

    // Set the position and spawn. 
    Vector3 newPosition = new Vector3 (Const_RoadItemsPositionX, randomY, 0f); 
    GameObject vehicle = (GameObject)GameObject.Instantiate (vehiclePreFab, newPosition, Quaternion.identity); 
} 

Это нерест случайным образом, но в большинстве случаев это всегда не в самой дороге. Это либо часть дороги, либо ее внешний край.

Я не могу понять, что я делаю неправильно здесь, но я уверен, что это что-то очень простое!

+2

float roadY = roadObject.transform.localPosition.y; не должно быть roadObject.transform.position.y? –

+0

Это, похоже, не имело большого значения. Мой автомобиль все еще поднимается на край границы. См. Здесь ... http: //imgur.com/a/GEX6S – AshesToAshes

+0

Вы имеете в виду координату X? потому что это контролируется константой Const_RoadItemsPositionX –

ответ

1

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

+0

Большое спасибо за то, что нашли время, чтобы помочь этому. Я сделаю так, чтобы все GO, которыми я управляю движением по сценарию, применили это. – AshesToAshes

1

Вы используете localPosition. От documentation:

Позиция преобразования относительно родительского преобразования.

Если преобразование не имеет родительского элемента, это то же самое, что и Transform.position.

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

+0

Мне действительно не нужна эта дорога, чтобы быть в родительском - это была просто логическая группировка, которую я сделал. Я переместил путь к корню, так что у него нет родителя, но проблема все еще существует. Взгляните на то, где здесь появляется транспортное средство: http://imgur.com/a/GEX6S – AshesToAshes