Код: Выделить всё
{Up, {0,1,0}}, {UpRight, {1,1,0}}, {UpRightForward, {1,1,1}}, {Right, {1,0,0}}, {Down, {0,-1,0}}Изначально я перехожу к системе осевых шагов, в результате чего каждое «смежное» направление находится на расстоянии 1 шаг, используя это:
Код: Выделить всё
float GetAxisDistance(Vector3 direction, Vector3 targetDirection)
{
direction = AxisNormalise(direction);
targetDirection = AxisNormalise(targetDirection);
return Mathf.Abs(direction.x - targetDirection.x)
+ Mathf.Abs(direction.y - targetDirection.y)
+ Mathf.Abs(direction.z - targetDirection.z);
}
Vector3 AxisNormalise(Vector3 direction)
{
if (direction == Vector3.zero)
return Vector3.zero;
return direction / Mathf.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y), Mathf.Abs(direction.z));
}
В настоящее время я ищу способы переработать эту систему, используя поиск пути в соседнем направлении (поэтому, чтобы перейти от Up-Down, ему придется искать путь через соседние направления, пока он не достигнет его, а затем вернуть самый быстрый путь, что приведет к 4 шагам), но я изо всех сил пытаюсь полностью разобраться в математике для это.
Будем очень признательны за любую помощь или предложения. Я не против изменения определения моих направлений, поскольку знаю, что {0,1,0} короче, чем {1,1,0}.
Подробнее здесь: https://stackoverflow.com/questions/799 ... ontal-vert
Мобильная версия