- Home /
How can I fill the screen with cubes?
Hi, I want to fill the screen with cubes, all of the same size, determined by the number of cubes that I want to exist, obviously, the margins are not a problem, but what I've done just not work, can anyone help me? Thanks.
Answer by Soraphis · Apr 23, 2016 at 08:48 PM
public void Start() {
var cam = Camera.main.gameObject;
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = cam.transform.position + cam.transform.forward*1.5f;
cube.transform.rotation = cam.transform.rotation;
cube.transform.localScale = new Vector3(100, 100, 1);
}
this should fill your screen with 1 cube.
edit: to fill your screen with cubes, you'd need to tell us if your camera set to orthographic projection or perspective. if you are talking about cubes or squares. world elements or ui elements
it would be nice if you'd show what you've tried, maybe it is not that wrong and one could help you to make it working.
Thanks for the answer, yes, my camera is set to orthographic, and i'm trying to fill the screen with primitive cubes, here is what I've been trying:
float screenArea = screenSize.x * screenSize.y;
float cubesArea = screenArea / cubesNumer;
float cubeSide = $$anonymous$$athf.Sqrt(cubesArea);
for (int y = 0; y < screenSize.y / cubeSide; y++)
{
for (int x = 0; x < screenSize.x / cubeSide; x++)
{
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.localScale = new Vector3(cubeSide, cubeSide, cubeSide);
//cube.transform.parent = this.transform;
cube.transform.localPosition = new Vector3((-screenSize.x / 2) + (cubeSide / 2) + (x * cubeSide), (-screenSize.y / 2) + (cubeSide / 2) + (y * cubeSide), 90);
}
}
The "screenSize" variable is a Vector3 set up by this:
float y = mainCamera.orthographicSize * 2f;
float x = y * Screen.width / Screen.height;
Vector2 screen = new Vector2(x, y);
return screen;
Thanks for the help :)
your screenSize: you can use mainCamera.aspect to calculate x
i feel uneasy about using "localPosition"
you should use
float _x = (-screenSize.x / 2) + (cubeSide / 2) + (x * cubeSide);
float _y = (-screenSize.y / 2) + (cubeSide / 2) + (y * cubeSide);
cube.transform.position = mainCamera.transform.right * _yx + mainCamera.transform.up * _y + mainCamera.transform.forward * 90;
then you don't need to worry about what is the parent. also you should set the cube.transform.rotation = mainCamera.transform.rotation;
or your your script will not work if your cameras angle can change