Короче говоря, я пишу игру в песочнице на основе Voxel, в которой вместо кубов используются усеченные октаэдры, поскольку это единственная другая форма, которую я могу найти, которая упакована на 100%. Они выглядят так: (псевдоним = мекон)
Положение мекона основано на его основании, и они имеют высоту 2 единицы. Так что мекон в [0, 0, 0], центр в [0, 1, 0], но это не важно, так как мне нужно получить [0, 0, 0]
У меня есть пока этот код:
Vx = this.transform.position.x;
Vy = this.transform.position.y;
Vz = this.transform.position.z;
if (Vy >= 0f && Vy <= 2f)
{
if (((Vy >= 0f && Vy <= .5f) && (Mathf.Abs(Vx) + Mathf.Abs(Vz) <= Vy + .5f)) ||
((Vy >= .5f && Vy <= 1f) && ((Mathf.Abs(Vx) + Mathf.Abs(Vz) <= Mathf.Abs(Vy) + .5f) && (Mathf.Abs(Vx) <= 1f) && (Mathf.Abs(Vz) <= 1f))) ||
((Vy >= 1f && Vy <= 1.5f) && ((Mathf.Abs(Vx) + Mathf.Abs(Vz) <= Mathf.Abs(Vy - 2f) + .5f) && (Mathf.Abs(Vx) <= 1f) && (Mathf.Abs(Vz) <= 1f))) ||
((Vy >= 1.5f && Vy <= 2f) && (Mathf.Abs(Vx) + Mathf.Abs(Vz) <= Mathf.Abs(Vy - 2f) + .5f)))
Debug.Log("Normal");
else
Debug.Log("Offset");
}
else
Debug.Log("Outside");
(vX, vY и vZ - координаты игрового объекта, который я использую в качестве ссылки). Все, что он делает, это говорит мне, если я нахожусь внутри Мекона в [0, 0, 0]
Мне нужно, чтобы все в этом пространстве возвращало [0, 0, 0] на основе введенных координат. Тем не менее, мне также нужно, чтобы он работал для упакованной области меконов. Поэтому, если координаты находятся внутри мекона в координатах [5, 7, 3], я получу эти числа, пока я нахожусь внутри мекона.
Некоторые примечания: координаты могут быть только [нечетными, нечетными, нечетный] или [четный, четный, четный]. [5, 8, 1] не является возможным местом для мекона. Поэтому у меня была идея собрать значения заданных координат, а затем вычесть 1 из значения, которое не соответствует 2 нечетным / четным значениям.
Первый оператор if не должен быть нужен в конце, и каждое число волхвов c должно быть заменено на ... у? что-то, я просто предполагаю, что это основано на у.