2014-12-30 3 views
1

У меня есть пара Prefabs я использую, чтобы случайно генерировать «комнату», но тот же код что приводит к несогласованности ширин:Противоречивые поплавки с Unity

Odd widths

Верхняя (northWall) должна быть та же ширина, что и нижняя (southWall), но, очевидно, в 3 раза больше.

Вот сборка «Комната», которая создает другие «стенные» сборные (в данном случае они всего лишь квадраты).

public float length; 
public float width; 
public float wallDepth; 

public Transform northWall; 
public Transform southWall; 

void Start() { 
    length   = Random.Range (5.0f, 25.0f); 
    width   = Random.Range (5.0f, 25.0f); 
    wallDepth  = 2.0f; 

    transform.localScale = new Vector3 (width, length, 0.0f); 

    Instantiate (northWall, new Vector3(transform.localPosition.x, transform.localPosition.y + (transform.localScale.y/2) + (wallDepth/2), 10.0f), Quaternion.identity); 
    northWall.transform.localScale = new Vector3 (width, wallDepth, 10.0f); 

    Instantiate (southWall, new Vector3(transform.localPosition.x, transform.localPosition.y - (transform.localScale.y/2) - (wallDepth/2), 10.0f), Quaternion.identity); 
    southWall.transform.localScale = new Vector3 (width, wallDepth, 10.0f); 

} 

Я сошел с ума? Это уже поздно, и я что-то упускаю?

Спасибо.

+0

Что вы установили в северной стене и на юг, чтобы быть в инспекторе? – Lefty

+0

Я только что перетащил настенный сборник для каждого из них. Стена - квадрат с коробочным коллайдером. – stefannew

+0

Тогда каковы спецификации этого внутри инспектора? –

ответ

0

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

GameObject buildWall (GameObject source, float width, float length, float x, float y, float z) { 
    GameObject clone = Instantiate (source) as GameObject; 

     clone.transform.localScale = new Vector3 (width, length, 0.0f); 
     clone.transform.localPosition = new Vector3 (x, y, z); 

    return clone; 
} 

И инстанцирование теперь выглядит следующим образом:

northWall = buildWall (northWall, width, wallDepth, transform.localPosition.x, transform.localPosition.y + (transform.localScale.y/2) + (wallDepth/2), 10.0f); 

Я не знаю, если это является наиболее эффективным (или даже правильно), чтобы это сделать, но, похоже, сейчас это работает.