Во-первых, я получу положение углов, используя Camera.ViewportToWorldPoint
.
Вы хотите убедиться, что вы не удваиваете углы, пропуская кубы, которые уже были размещены.
В вопросе не упоминается размер объектов WallPeice
[sic], поэтому вам нужно поиграть с коэффициентом масштабирования, чтобы размер кубов соответствовал нужному размеру. быть 10х5.
В целом, это может выглядеть так:
public void BuildWall()
{
Camera mainCam = Camera.main;
Vector3 lowerLeftScreenWorld = mainCam.ViewportToWorldPoint(Vector3.zero);
Vector3 upperRightScreenWorld = mainCam.ViewportToWorldPoint(new Vector3(1f,1f,0f));
// 9f because 10 cubes means 9 intervals between them
distancePerCube = (upperRightScreenWorld.y-lowerLeftScreenWorld.y)/9f;
float cubeScalingFactor = 1f;
Vector3 cubeScale = Vector3.one * cubeScalingFactor;
// left/right walls
for (float yPos = lowerLeftScreenWorld.y ; yPos <= upperRightScreenWorld.y
; yPos += distancePerCube)
{
MakeCube(lowerLeftScreenWorld.x, yPos, cubeScale);
MakeCube(upperRightScreenWorld.x, yPos, cubeScale);
}
// top/bottom walls
for (float xPos = lowerLeftScreenWorld.x + distancePerCube
; xPos + distancePerCube <= upperRightScreenWorld.x
; xPos += distancePerCube)
{
MakeCube(xPos, upperRightScreenWorld.y, cubeScale);
MakeCube(xPos, lowerLeftScreenWorld.y, cubeScale);
}
}
private void MakeCube(float xPos, float yPos, Vector3 cubeScale)
{
GameObject cube = Instantiate(WallPeice, new Vector3(xPos, yPos, 0f),
Quaternion.identity);
cube.transform.localScale = cubeScale;
}