Решение
Я бы расставил контрольные маршрутные точки, добавил к ним коллайдеры в виде триггеров. На них накинуть небольшой скрипт, говорящий какое действие нужно сделать, что бы попасть в следующую маршрутную точку(к примеру повернуть налево и продолжать идти). Когда NPC вступает с ним в коллизию(OnTriggerEnter), берет из него необходимые параметры для продолжения движения. Я так себе реализовывал.
Это если линейно и по кругу. А если рандомно передвижение по территории, то все с теми же контрольным точками, только нужно получить их все, выбрать случайную точку и обходом по графу идти до этой точки. Как только достиг, выбрал случайную следующую точку и пошел дальше.
Объяснение:
// PascalABC.NET 3.2, сборка 1389 от 01.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var F:real->real:=x->2*x*x-6*x+8;
var a,b:real;
Write('a b= '); Read(a,b);
Writeln('Min=',Range(a,b,9).Select(x->F(x)).Min)
end.
Пример
a b= -2 6
Min=3.50617283950617
2. Решение "по-школьному" ("дедушкин метод")
function F(x:real):real;
begin
F:=2*x*x-6*x+8
end;
var
a,b,y,h,min:real;
i:integer;
begin
Write('a b= '); Read(a,b);
h:=(b-a)/9;
min:=F(a);
for i:= 1 to 9 do begin
y:=F(a+i*h);
if y<min then min:=y
end;
Writeln('Min=',min)
end.
Пример
a b= -2 6
Min=3.50617283950617