how do i generate cubes to form a sphere?

im making a game like minecraft and i have a script that generates cubes for a floor but i cant fix it so that the cubes size are 0.005 and im trying to make them generate a sphere out of cubes kinda like world edit on minecraft any help will be appreciated

for (var y = -4; y < 5; ++y)
for (var x = -4; x < 5; ++x) {
    var cube : GameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
    cube.transform.position = transform.position + Vector3(x, 0, y);
}

A simple (but somewhat stupid) way to create a hollow sphere with axis aligned blocks is to generate coordinates for a cube with the same sphere size, but only instantiate the ones that are at the radius distance:

function CreateSphere(center: Vector3, blockSize: float, radius: float){
  var qBlocks: int = Mathf.Ceil(radius/blockSize); // how many blocks fit in the radius
  var pos: Vector3;
  for (var ix: int =-qBlocks; ix<=qBlocks; ix++){
    pos.x = ix * blockSize; // calculate pos.x...
    for (var iy: int =-qBlocks; iy<=qBlocks; iy++){ //
      pos.y = iy * blockSize; // calculate pos.y...
      for (var iz: int =-qBlocks; iz<=qBlocks; iz++){
        pos.z = iz * blockSize; // calculate pos.z...
        if (Mathf.Abs(pos.magnitude - radius) <= blockSize/2){ // if block at sphere surface...
          // create it:
          var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
          cube.transform.localScale = Vector3.one * blockSize; // set scale at once
          cube.transform.position = center + pos; // place the cube at calculated pos
        }
      } // end of z loop
    } // end of y loop
    yield; // let Unity breath till next frame
  } // end of x loop
}

function Start () {
  // create sphere at this object position:
  CreateSphere(transform.position, 0.05, 1);
}

The yield instruction added after the y loop is intended to not block Unity: each YZ wall will be instantiated each frame.

If you need a solid sphere, replace the if clause to:

  if (pos.magnitude <= radius){ // if block inside radius...

But solid spheres take a lot of time to be created, and another big time to be rendered - the framerate drops like a rock when the sphere enters the camera frustum.

As @Bunny83 said, the enormous amount of game objects generated for a simple sphere is a big performance killer! Depending on what you want to do, creating a procedural mesh (like @Berenger suggested) with the algorithm above (or another less stupid one) may be the right solution.

I suggest you take a look at how a sphere’s mesh is procedurally created in 3D modelling programs, as what you want is quite close.

A quick google search gave me those :

http://paulbourke.net/miscellaneous/sphere_cylinder/

http://www.gamedev.net/topic/537269-procedural-sphere-creation/

Spherical brush will create a ball of blocks specified with [id:meta], of size defined with radius and minecraft circle . As diameter is radius times two and the minimum diameter of a brush is 1, [radius] of 3 will give you a seven blocks wide ball. In addition to [radius], cylinder brush also accepts a height value (If you don’t define a height, you’ll get a one block thick disc).

So, “//br cyl 35:0 3 4” will create a 7 blocks wide, 4 blocks tall cylinder of white wool, with the center of the bottom layer on the block where you click with the brush.

URL: https://www.minecraftcirclegenerator.com

You can’t use seperate gameobjects for each cube. That will kill your performance. You should take a look at the minecraft starter kit. Minecraft is one of the most complex games that have been released recently. It uses very advanced technologies. It’s easier to create a new Crysis or BioShock like game from a programming point of view. You should have really good knowledge of math, algorithms and how the graphics hardware works, otherwise you won’t get very far…