Скрипт JS:

Код:
var prefab : Transform; 
var height : Transform; 

var Area = 20; 
static var rand = 0;
static var rand2 = 0;
function Start ()
{
for (var i : int = 0;i < Area; i++)
    {
      for (var j : int = 0;j < Area; j++)
      {
        Instantiate (prefab, Vector3(i * 1, 0, j*1), Quaternion.identity);
        rand = Random.Range(0, 1);
        rand2 = Random.Range(0, 3);
        if(rand == rand2)
        Instantiate (height, Vector3(i ,1 ,j ), Quaternion.identity);
      }
    }
 }

Вот более сложная Генерация:
Скрипт JS:

Код:
private var _field: GameObject[,,]; // наш ландшафт (является трехмерным массивом)
private var _height: int[,]; // высота данного места ландшафта
private var _maxSize: int = 32; // максимальная ширина ландшафта
private var _maxH: int = 64; // максимальная высота ландшафта
private var _maxR: int = 16; // максимальный радиус сферы
private var _spheresCount: int = 16; // количество сфер
var _prefabCube: GameObject; // префаб куба

function Start ()
{
// Инициализация массивов
_field = new GameObject[_maxSize, _maxH, _maxSize];
_height = new int[_maxSize, _maxSize];

// Создание поля (высота равна 0)

var i: int;
var j: int;
for (i = 0; i<_maxSize; i++)
{
for (j = 0; j<_maxSize; j++)
{
_height[i,j] = 0;

var _pos: Vector3 = Vector3(i-_maxSize/2, _height[i,j], j-_maxSize/2);
_field[i,0,j] = Instantiate(_prefabCube, _pos, Quaternion.identity);
_field[i,0,j].transform.parent = transform;
_field[i,0,j].transform.name = "cube";
}
}

// Изменение ландшафта по изученному алгоритму

for (i = 0; i<_spheresCount; i++)
{
_pos = Vector3(Random.Range(0, _maxSize), 0, Random.Range(0, _maxSize));
var _r: int = Random.Range(1, _maxR);

for (var _x: int = _pos.x-_r; _x<_pos.x+_r; _x++)
{
for (var _z: int = _pos.z-_r; _z<_pos.z+_r; _z++)
{
var _inc: int = Mathf.Pow(_r, 2)-(Mathf.Pow(_x-_pos.x, 2)+Mathf.Pow(_z-_pos.z, 2));
if (_inc > 0 && _x>=0 && _z>=0 && _x<_maxSize && _z<_maxSize)
{
_inc = Mathf.Round(Mathf.Sqrt(_inc));
_height[_x,_z] = _height[_x,_z]+_inc;
_field[_x,0,_z].transform.position.y = _height[_x,_z];
}
}
}
}

// Нормализация (я не использовал)

// Заполнение промежутков между соседними платформами
for (i = 1; i<_maxSize-1; i++)
{
for (j = 1; j<_maxSize-1; j++)
{
var _minH: int = _height[i,j];
_minH = Mathf.Min(_minH, _height[i-1, j-1]);
_minH = Mathf.Min(_minH, _height[i, j-1]);
_minH = Mathf.Min(_minH, _height[i+1, j-1]);
_minH = Mathf.Min(_minH, _height[i-1, j]);
_minH = Mathf.Min(_minH, _height[i+1, j]);
_minH = Mathf.Min(_minH, _height[i-1, j+1]);
_minH = Mathf.Min(_minH, _height[i, j+1]);
_minH = Mathf.Min(_minH, _height[i+1, j+1]);
for (_z = 1; _z <= _height[i,j]-_minH; _z++)
{
_pos = Vector3(i-_maxSize/2, _height[i,j]-_z, j-_maxSize/2);
_field[i,_z,j] = Instantiate(_prefabCube, _pos, Quaternion.identity);
_field[i,_z,j].transform.parent = transform;
_field[i,_z,j].transform.name = "cube";
}
}
}
}

Теги: Генерация, Мир