Как создать 3D-карту тайлов, используя объект Plane, разделенный на тайлы? - PullRequest
0 голосов
/ 07 октября 2018

Я хочу создать 2D-плоскость с центром в 0,0,0 в трехмерном мировом пространстве.Затем я хочу определить эту плоскость в двухмерных координатах плитки.Так, например, плоскость, разделенная на 3 тайла, станет картой массива [3,3]

. Проблема в том, что это все равно даст карту тайла с отрицательными точками.Мир в верхнем левом углу -1,1 будет 0,0 в массиве -1, - будет 1,0 и т. Д. ...

World:

-1,1   0,1   1,1             
-1,0   0,0   1,0
-1,-1  0,-1  1,-1 

Array:

0,0  0,1  0,2   
1,0  1,1  1,2
2,0  2,1  2,2   

Моя главная надежда с Unity состояла в том, что я мог избежать математической графики и сосредоточиться на логических сценариях.Итак, я спрашиваю, есть ли в Unity 2018 какая-либо группа функций, которая могла бы легко выполнять то, что я описал выше?

Причиной этого кода в конечном итоге было бы создание игры и редактора для размещения 3Dсборные в трехмерный мир, но с использованием 2D-массивов, чтобы определить их свойства.Взаимодействие с осью Y в настоящее время не является проблемой.Мне интересно, могу ли я создать игру с открытым исходным кодом в стиле XCOM, используя это.В настоящее время я не могу позволить себе активы, так как я финансово зависим и не люблю спрашивать.Я также заметил сильное отсутствие бесплатных редакторов 3D-игр.Спасибо за помощь ...

1 Ответ

0 голосов
/ 11 октября 2018

Чтобы отобразить плоскость 2d в массив данных 2d:

  • Используя numTiles и tileSize, создайте сетку в трехмерном пространстве.Он будет иметь ширину (numTiles * tileSize), поэтому вершины плоскости с расстоянием, равным половине этого значения от точки Vector3.zero

  • В вашей функции Update (),используйте raycasting для обнаружения щелчков мыши на сетке.Я использовал луч из Camera.main.ScreenPointToRay (Input.mousePosition) и проверил, получил ли я удар из MeshCollider моей плоскости.Используя данные этой точки попадания, я смог отобразить значения с плавающей точкой в ​​целочисленные xz-координаты.

  • Для сопоставления целочисленной координаты xz со строкой r и столбцом c массива данных:

  • shiftX = x + Этаж (numTiles / 2)
  • shiftZ = z - Этаж (numTiles / 2)
  • r = Этаж (shiftZ) * -1
  • c = Этаж (shiftX)

Это больше, чем мне нравится, но работает.

...