Нет никакой причины перебирать размер лестницы вообще; Вы хотите перебрать stairsNumber
, который еще не используется в вашем коде.
Кроме того, вам не нужно изменять x
компонент вашей лестницы. Держите его на 0f
(или что вам нужно).
Компоненты y
и z
вашего положения на лестнице (относительно начальной точки) должны быть коэффициентами stairHeight
. В данном конкретном случае вы хотите, чтобы они были равны stairHeight
, чтобы вы получали «квадратные» формы шагов.
private IEnumerator BuildStairs()
{
for (int i = 0; i <= stairsNumber ; i++) {
// x=0f, y=z=stairsHeight
stairsPosition = new Vector3(0f, stairsHeight, stairsHeight);
GameObject stairs = Instantiate(
stairsPrefab,
stairsPosition,
Quaternion.identity);
stairs.transform.localScale = new Vector3(
stairsSize.x,
1f ,
stairsSize.y);
stairsHeight += 1f;
yield return new WaitForSeconds(delay);
}
}
Если вы измените stairSize
на Vector3
, то вы можете просто использовать stairSize
непосредственно как localScale
и увеличить stairsHeight
на stairsSize.y
вместо просто 1f
.
Если вы хотите сместить начальную позицию вашей лестницы, вам нужно включить смещение. Я рекомендую хранить его отдельно от счетчика высоты, пока вам не понадобится добавить их.
Кроме того, если вы хотите иметь шаги прямоугольного размера, оставьте widthFactor
для умножения на высоту, чтобы определить, насколько далеко каждый шаг перемещается в горизонтальном направлении.
Объединение этих изменений может выглядеть так:
Vector3 stairSize;
float stepWidthFactor=1f;
Vector3 stairsStartPosition;
private IEnumerator BuildStairs() {
for (int i = 0; i <= stairsNumber ; i++) {
stairsPosition = new Vector3(
stairsStartPosition.x,
stairsStartPosition.y + stairsHeight,
stairsStartPosition.z + stairsHeight*stepWidthFactor);
GameObject stairs = Instantiate(
stairsPrefab,
stairsPosition,
Quaternion.identity);
stairsHeight += stairsSize.y;
stairs.transform.localScale = stairSize;
yield return new WaitForSeconds(delay);
}
}