Сообщение от Mr_F_
есть такое.
как ты считаешь коллизию камере, лол? я кидаю луч от головы к камере, ставлю камеру на пересечении (чуть отодвинуто по нормали), но в таких ситуациях бывает камера немного сквозь стену видит, поэтому я ещё 4 луча кидаю по границам near плейна камеры и выпихиваю по ним камеру из стены ещё, если надо.
в идеале надо просто коллизию шарика пододвинуть к камере и взять его центр, но в юнити чёт это не делается нормально.
|
Обьясняю наглядно и с куском кода.
У персонажа где-то на уровне груди есть пивот (
Self.ypiv), к которому привязана камера (от поворота персонажа никак не зависит и только мышью контролится). Каждый кадр бросаю луч длинной 8 и толщиной 1 (длина луча становится 9,
а умеет ли юнити толщину луча?). Если расстояние меньше 8, ставим в пикнутые координаты + 1 юнит по направлению взгляда, иначе просто на максимальное расстояние.
Self.hide - переменная, которая отвечает за скрытие персонажа при приближении камеры.
TFormVector(0, 0, - 8, Self.ypiv, Null)
Local pck:TEntity = LinePick(Self.ypiv.EntityX(1), Self.ypiv.EntityY(1), Self.ypiv.EntityZ(1), TFormedX(), TFormedY(), TFormedZ(), 1)
If pck
TFormPoint(PickedX(), PickedY(), PickedZ(), Null, Self.ypiv)
Cam.PositionEntity(0, 0, TFormedZ() + 1)
If Self.hide
If Abs(TFormedZ() + 1) > 4 Self.hide = 0
Else
If Abs(TFormedZ() + 1) < 4 Self.hide = 1
End If
Else
Cam.PositionEntity(0, 0, - 8)
Self.hide = 0
End If