Новые компоненты
Вы можете использовать системы NavMe sh для вычисления следующей позиции противника.
Вы можете найти эти классы (Компоненты) на GitHub . Они являются официальным компонентом, но все еще находятся в стадии разработки, если я хорошо помню, поэтому они на github .
Теперь вы можете найти много tutos в inte rnet, показывающих, как использовать эти классы. Вот один хороший пример , благодаря Brackeys .
Как это будет работать
После того, как вы загрузите эти классы, вы сможете выполните следующие действия:
Я создал очень базовую c сцену, в которой волку нужно go пересечь позицию (справа часть изображения), но не допускается go на самом светлом синем на карте (в правой части изображения вы можете видеть линию посередине). Таким образом, компоненты navs вычисляют ближайшую точку, как показано в середине круга (левая часть). Вы можете вручную добавить смещение, чтобы оно не было точно на краю, если хотите.
Вы можете найти больше информации здесь . Этот метод вычисляет ближайшую точку данной позиции.
Вычисляет позицию отбрасывания
Что касается ваших комментариев, для вычисления позиции отбрасывания есть разные способы:
Ось- основанная позиция
Если ваша сцена так проста, как эти правила:
- Слева направо - Ось X
- Сверху вниз - Ось Y
( или наоборот )
Тогда вы можете сделать следующее:
public Vector3 GetKnockbackPosition(Vector3 startPosition, float force)
{
Vector3 res = startPosition;
res.x -= force; // Could be Z axis, depends on orientation
return res;
}
Позиция не по оси
Вы можете сделать следующее:
public Vector3 GetKnockbackPosition(Transform transformToKnockback, float force)
{
Vector3 res = transformToKnockback.position;
res -= transformToKnockback.forward * force;
return res;
}
Здесь у вас есть forward
, который поможет вам. Вы можете вычесть это значение и добавить коэффициент силы для управления силой отталкивания.
Поэтому, как только вы вычислили позицию, вы можете использовать SamplePosition, чтобы отрегулировать ее независимо от того, находится она внутри зоны или нет.
Скажите, что-то не так правильно объяснено.