Показать сообщение отдельно
Старый 30.08.2014, 23:18   #59
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
Ответ: Faded [игра мечты]

Сообщение от 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
__________________


(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
Arton (30.08.2014), Mr_F_ (30.08.2014)