Так что это странно.
Я работаю над игрой, похожей на Minecraft, но вместо кубов она делается с усеченными октаэдрами "Смотри картинку ниже" . Чтобы разместить или разбить блок, мне нужно получить координату, куда смотрит игрок, и выяснить, в каком блоке он находится. Я не отслеживаю лучи, я проверяю с интервалами перед игроком, пока он не пересекается с чем-то. Я могу проверить положение, когда он пересекается, и точки до того, как он пересекается.
Эти вещи (псевдоним: Mecon)
Проблема в том, что они не твердые тела. И точка не может получить доступ к тому, через что она пересекается, просто она что-то пересекла Эти фигуры заполняют область на 100% без отверстий и могут иметь координаты (четные, четные, четные) или (нечетные, нечетные, нечетные)
(пример: [2, 2, 2] [ 3, 3, 3] [6, 14, 2] [13, 19, 7])
НИКОГДА не будет мекона в точке с координатами [2, 13, 6] или [23, 14, 8] поскольку все значения не являются либо четными, либо нечетными
Вот все координаты для рисования мекона с вершинами
//Top Face
new Vector3(0.25f, 1.0f, 0.0f),
new Vector3(0.0f, 1.0f, -0.25f),
new Vector3(-0.25f, 1.0f, 0.0f),
new Vector3(0.0f, 1.0f, .25f),
//Right Face
new Vector3(0.0f, 0.75f, 0.5f),
new Vector3(-0.25f, 0.5f, 0.5f),
new Vector3(0.0f, 0.25f, 0.5f),
new Vector3(0.25f, 0.5f, 0.5f),
//Back Face
new Vector3(0.5f, 0.5f, 0.25f),
new Vector3(0.5f, 0.75f, 0.0f),
new Vector3(0.5f, 0.5f, -0.25f),
new Vector3(0.5f, 0.25f, 0.0f),
//Bottom Face
new Vector3(0.25f, 0.0f, 0.0f),
new Vector3(0.0f, 0.0f, 0.25f),
new Vector3(-0.25f, 0.0f, 0.0f),
new Vector3(0.0f, 0.0f, -0.25f),
//Left Face
new Vector3(0.0f, 0.25f, -0.5f),
new Vector3(0.25f, 0.5f, -0.5f),
new Vector3(0.0f, 0.75f, -0.5f),
new Vector3(-0.25f, 0.5f, -0.5f),
//Front Face
new Vector3(-0.5f, 0.5f, -0.25f),
new Vector3(-0.5f, 0.75f, 0.0f),
new Vector3(-0.5f, 0.5f, 0.25f),
new Vector3(-0.5f, 0.25f, 0.0f)
Есть ли способ получить любую декартову координату и получить координата мекона. Поэтому, если я возьму координаты (11.878, 13.415, 4.383), получится возврат (12, 12, 4). Координата мекона находится у основания мекона. (Так что центр мекона в (0, 0, 0) будет в (0, 1, 0), мне просто нужна координата в основании)
Если что-то сбивает с толку, я уверен, что это все, я постараюсь ответить на любые другие вопросы, которые у вас есть, ребята.
Спасибо!
ОБНОВЛЕНИЕ: Теперь я работаю над единичным меконом с интервалами .5 Y (0, .5, 1, 1,5 и 2)
if (this.transform.position.y == 0f)
if (Mathf.Abs(this.transform.position.x) + Mathf.Abs(this.transform.position.z) <= .5f)
Debug.Log("Inside");
else
Debug.Log("Outside");
else if (this.transform.position.y == .5f)
if (Mathf.Abs(this.transform.position.x) + Mathf.Abs(this.transform.position.z) <= 1f)
Debug.Log("Inside");
else
Debug.Log("Outside");
else if (this.transform.position.y == 1f)
if ((Mathf.Abs(this.transform.position.z) < 1f && Mathf.Abs(this.transform.position.x) < .5f) ||
(Mathf.Abs(this.transform.position.x) < 1f && Mathf.Abs(this.transform.position.z) < .5f) ||
(Mathf.Abs(this.transform.position.z) > .5f && Mathf.Abs(this.transform.position.z) > .5f && Mathf.Abs(this.transform.position.z) + Mathf.Abs(this.transform.position.x) < 1.5f))
Debug.Log("Inside");
else
Debug.Log("Outside");
else if (this.transform.position.y == 1.5f)
if (Mathf.Abs(this.transform.position.x) + Mathf.Abs(this.transform.position.z) <= 1f)
Debug.Log("Inside");
else
Debug.Log("Outside");
else if (this.transform.position.y == 2f)
if (Mathf.Abs(this.transform.position.x) + Mathf.Abs(this.transform.position.z) <= .5f)
Debug.Log("Inside");
else
Debug.Log("Outside");