так в единстве я создаю случайно генерируемые комнаты.внутри этих комнат я буду «случайным образом» размещать объекты, врагов, объекты, предметы и т. д. на основе узлов.узлы - это объекты преобразования, которые отделены друг от друга на 1 единицу.идея в том, что теперь я могу выбрать узел и создать экземпляр чего-либо в этом узле.Код отлично работает, когда комната 10х10 (x, z, поскольку это 3d-игра). Я получаю хороший сеточный шаблон, он также работает, как и ожидалось, когда x кратен 2. Однако, когда z изменяется от 10, он не создаетсетка правильно.Существует также проблема, если комната меняет местоположение, отличное от 0,0.
Этаж - это дочерний объект комнаты.
void RoomSetup()
{
bool first = true;
int collCount = -1;
GameObject placeHolder = new GameObject("temp");
float colls;
float offX, offZ;
colls = floor.transform.localScale.x - 1;
print(colls);
for (int i = 0; i < ((floor.transform.localScale.x-1)
*(floor.transform.localScale.z-1)); i++)
{
//creating a for loop that stops when its greater then the area of the rectangle, subtract one from x,z so theres a one unit of padding from the walls.
offX = floor.transform.lossyPosition.x;
offZ = floor.transform.lossyPosition.z;
//getting the offset of the room in world space this is where i believe the issues arise
collCount++;
GameObject temp = new GameObject(i + " Node");
temp.transform.SetParent(floor.transform);
temp.AddComponent<BoxCollider>();
temp.GetComponent<BoxCollider>().isTrigger = true;
if(!first)
{
temp.transform.position = new Vector3((placeHolder.transform.position.x + 1), 6, placeHolder.transform.position.z);
placeHolder = temp;
if (collCount >= colls)
{
print("new line on " + temp.name + " coll " + collCount);
collCount = 0;
placeHolder.transform.position = new Vector3((-(floor.transform.localScale.x / 2) + 1)+offX, 6, (placeHolder.transform.position.z - 1)-offZ);
}
}
if (first)
{
// print(colls);
temp.transform.position = new Vector3((-(floor.transform.localScale.x / 2) + 1) + offX, 6, floor.transform.localScale.z - offZ);
placeHolder = temp;
first = false;
}
nodes.Add(temp);
}
}
Вот несколько картинок, которые помогут проиллюстрировать проблему: первое изображение, когда комната находится в точке 0,0, создает хорошийсетка
, когда комната находится в самом разгаре, она создает сетку еще в 0,0