-Рубрики

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в seamanmur

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 14.04.2006
Записей:
Комментариев:
Написано: 120


Камеры в УДК

Вторник, 07 Декабря 2010 г. 11:15 + в цитатник

В УДК есть две основные ветки классов камер:

Camera -> GamePlayerCamera -> ВашаКамера

GameCameraBase ->  GameThirdPersonCamera/GameFixedCamera -> Ваши реализации камер от третьего лица и фиксированной.

и одна дополнительная:

 GameThirdPersonCameraMode -> GameThirdPersonCameraMode_Default -> Ваша камера. В них просто уточняются характеристики камеры.

Есть еще класс CameraActor, представляющий физическое воплощение камеры в мире.

Остальные классы связанные с камерами - служебные, представляют анимацию камеры и т.п.

Где происходит перемещение камеры, настройка фокуса и т.п.

В GamePlayerCamera есть функция UpdateViewTarget. Там кроме прочего вызывается CurrentCamera.UpdateCamera. CurrentCamera изначально GameThirdPersonCamera (или Fixed).

Функция UpdateCamera в нем кроме прочего вызывает PlayerUpdateCamera. В GameThirdPersonCamera PlayerUpdateCamera пустая.Также UpdateCamera вызывает Pawn.CalcCamera. При использовании UTPawn все рассчеты производятся именно там. Что не очень удобно.

Какой нормальный процесс. Создаем класс производный от GameThirdPersonCamera (RPGTPS). В нем определяем UpdateCamera. Там просто переписываем все из GameThirdPersonCamera для вызова нашей PlayerUpdateCamera, которую тоже определяем в RPGTPS. Так приходится делать, т.к. UpdateCamera не виртуальная (можно попробовать переписать GameThirdPersonCamera - сделать UpdateCamera виртуальной, тогда ее не нужно будет снова писать  в нашем классе. Тогда придется и в GameCameraBase). В PlayerUpdateCamera производим все нужные нам рассчеты.

Однако все рассчеты удобнее проводить не в RPGTPS, а в классе производном от GamePlayerCamera. Почему? Потому что там есть многие нужные для рассчета переменные, которые, конечно можно достать и в RPGTPS, но это куча лишних вызовов... Поэтому в RPGTPS делаем простую "затычку", типа:
protected function PlayerUpdateCamera(Pawn P, GamePlayerCamera CameraAct, float DeltaTime, out TViewTarget OutVT)
{
    RPGPlayerCamera(PlayerCamera).UpdateThirdPCamera(P, CameraAct, DeltaTime, OutVT);
}

PlayerCamera - типа GamePlayerCamera, поэтому приходится преобразовывать к нашему типу. UpdateThirdPCamera - функция в RPGPlayerCamera, в которой и проводим все расчеты...

Внимание!

В  GamePlayerCamera есть ошибка. В:

protected function GameCameraBase FindBestCameraType(Actor CameraTarget)

нужно вместо:

    if (CameraStyle == 'default')

Сделать

    if (CameraStyle != 'default')
Иначе она будет возвращать None...


 


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку