Ответ: KoLoBoK racing
Мысль есть одна. Так как гонки идут по внутренней части трубопровода и на его стенках должны быть как препятствия, так и бонусы вроде ускорения, можно сделать невидимые треки-полоски по которым будут гнать компьютерные оппоненты. Допустим труба состоит из 16 продольных полос, а аи просто переходит с одной на другую. Если впереди есть препятствие, которое привязано к одной из полос, то АИ проверяет, если он находится на этой полосе, то начинает сворачивать на другую полосу (сложность АИ варьируется скоростью реакции на препятствия/бонусы и скоростью сдвига).
Можно например задать радиус реагирования аи на объекты на трассе, и если он находится на одной полосе с препятствием - проверяет расстояние до него простой EntityDistance. Хотя можно и учитывать рельеф участка трассы, для этого не обязательно вычислять расстояние до цели по кривой трека, можно написать функцию, определяющую угол поворота препятствия относительно текущего угла поворота болида АИ. То есть, если взять конкретный аи за центр координат и относительно него вычислять поворот препятствия, учитывая радиус сечения трубы-трассы можно определить, будет ли это препятствия например за углом и снизить радиус реагировать (типа не видел), или наоборот оно видно впереди издалека и повысить радиус реагирования.
Можно еще сделать для каждого препятствия изменяемый радиус реагирования, чтобы типа АИ запоминал, если первый раз повернув за угол он врезался в "столб", то для этого препятствия изменить радиус реагирования на более широкий, чтобы в следующий раз он его видел уже как-бы через стенку и заранее начал сворачивать - типа запомнил.
з.ы. все тоже самое, только с обратным принципом реагирования можно сделать для бонусов.
|