private void DrawWorld(int CentrX, int CentrY, int CentrZ, int Dist) { //print("Всего объектов на сцене: " + this.transform.childCount.ToString()); Vector3 CenterPos = new Vector3(CentrX, CentrY, CentrZ); if ((int)Vector3.Magnitude(CenterPos - DrawLastPosition) > 1 && refreshTimer < 0) { DrawLastPosition = CenterPos; refreshTimer = RefreshTimer; //Определяем минимальные и максимальные значения координат объектов int x_min = (CentrX - Dist < 0) ? 0 : CentrX - Dist; int x_max = (CentrX + Dist > MatrixWorld.matrix.GetLength(0)) ? MatrixWorld.matrix.GetLength(0) : CentrX + Dist; int y_min = (CentrY - Dist < 0) ? 0 : CentrY - Dist; int y_max = (CentrY + Dist > MatrixWorld.matrix.GetLength(1)) ? MatrixWorld.matrix.GetLength(1) : CentrY + Dist; int z_min = (CentrZ - Dist < 0) ? 0 : CentrZ - Dist; int z_max = (CentrZ + Dist > MatrixWorld.matrix.GetLength(2)) ? MatrixWorld.matrix.GetLength(2) : CentrZ + Dist; //Центр в расчете перерисовки Vector3 posCentr = new Vector3(CentrX, CentrY, CentrZ); //Отключаем объекты за зоной активности //for(int i=0;i<this.transform.childCount;i++) //{ // int distOut = (int)Vector3.Magnitude(posCentr - this.transform.GetChild(i).transform.position); // if(distOut > Dist) // { // // Отключаем куб // MatrixWorld.AddDeactiveObject(this.transform.GetChild(i).gameObject); // } //} //Создаем объекты игрового мира или достаем из отключенных for (int x = x_min; x < x_max; x++) { for (int z = z_min; z < z_max; z++) { for (int y = y_min; y < y_max; y++) { // Сравним растояние между объектом и позицией центра Vector3 posObject = new Vector3(x, y, z); int dist = (int)Vector3.Magnitude(posCentr - posObject); if (dist < Dist) { if (MatrixWorld.matrix[x, y, z] == 1) { // Создаем куб MatrixWorld.CreateObject(posObject, inGameObject, this.transform); } } } } } } }