Камера от третьего лица в UDK

Камера от третьего лица в UDK: В UDK уже есть отличная камера от третьего лица. Осталось только заставить ее работать.

Сначала создадим класс своей игры. Назовем ее TPSGame.
Укажем что мы будем использовать свой PlayerController класс, а также свой Pawn класс. Дефолтный UTPawn заточен под игру от первого лица. Ставим значение bDelayedStart в false, чтобы игрок не ждал начала матча. Это нужно для однопользовательских игр.
class TPSGame extends GameInfo;

defaultproperties
{
  bDelayedStart=false;
  PlayerControllerClass=class'TPSPlayerController'
  DefaultPawnClass=class'TPSPawn'
}
Внимание! после того как мы отнаследовались от GameInfo карты от UT3 скорее всего с нашей игрой работать не будут. Можете попробовать отнаследоваться от UTDeathmatch или UTGame.

Далее нужно изменить настройки в DefaultGame.ini.
[Engine.GameInfo]
DefaultGame=TPSGame
DefaultServerGame=TPSGame
PlayerControllerClassName=TPSPlayerController
Листинг файла TPSPawn.uc. Тут мы используем стандартные ассеты доступные в UDK для того, чтобы получить 3D модель робота.
class TPSPawn extends GamePawn
  config(Game);

simulated function name GetDefaultCameraMode( PlayerController RequestedBy )
{
  return 'ThirdPerson';
}

defaultproperties
{
  Components.Remove(Sprite)
  Begin Object Class=DynamicLightEnvironmentComponent Name=MyLightEnvironment
    ModShadowFadeoutTime=0.25
    MinTimeBetweenFullUpdates=0.25
    AmbientGlow=(R=.01,G=.01,B=.03,A=1)
    AmbientShadowColor=(R=0.10,G=0.10,B=0.10)
    LightShadowMode=LightShadow_ModulateBetter
    ShadowFilterQuality=SFQ_High
    bSynthesizeSHLight=TRUE
  End Object
  Components.Add(MyLightEnvironment)

  Begin Object Class=SkeletalMeshComponent Name=InitialSkeletalMesh
    CastShadow=true
    bCastDynamicShadow=true
    bOwnerNoSee=false
    LightEnvironment=MyLightEnvironment;
    BlockRigidBody=true;
    CollideActors=true;
    BlockZeroExtent=true;
    PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
    AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_AimOffset'
    AnimSets(1)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
    AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
    SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
  End Object

  Mesh=InitialSkeletalMesh;
  Components.Add(InitialSkeletalMesh);
}
Наконец файл TPSPlayerController.uc в котором мы указываем какой класс камеры использовать для камеры игрока.
class TPSPlayerController extends GamePlayerController
  config(Game);

defaultproperties
{
  CameraClass=class'TPSPlayerCamera'
}
Теперь собственно класс игровой камеры TPSPlayerCamera.uc. Метод FindBestCameraType возвращает камеру которую мы хотим использовать.
class TPSPlayerCamera extends GamePlayerCamera;

protected function GameCameraBase FindBestCameraType(Actor CameraTarget)
{
  return ThirdPersonCam;
}

defaultproperties
{
  ThirdPersonCameraClass=class'TPSThirdPersonCamera'
}
Листинг TPSThirdPersonCamera.uc. Очень веселый листинг. =)
class TPSThirdPersonCamera extends GameThirdPersonCamera;

defaultproperties
{
  ThirdPersonCamDefaultClass=class'TPSThirdPersonCameraMode_Default'
}
Ну и наконец последний файл TPSThirdPersonCameraMode_Default.uc.
class TPSThirdPersonCameraMode_Default extends GameThirdPersonCameraMode_Default;

var float FOV;

function float GetDesiredFOV( Pawn ViewedPawn )
{
  return FOV;
}

defaultproperties
{
  FOV=80.f;
  PawnRelativeOffset=(x=30,y=10,z=-40)
  BlendTime=0.3
}
Компилим, запускаем и радуемся.

Итак вкратце:
  • PlayerCamera это всего лишь обертка содержащая в себе все возможные типы камер которые у вас будут использоваться. В методе FindBestCameraType вы сможете выбирать тип камеры который нужно использовать в данный момент.
  • GameCameraBase (в нашем случае GameThirdPersonCamera) это и есть класс описывающий функциональность камеры. Каждый тип камеры может иметь несколько режимов.
  • GameThirdPersonCameraMode (в нашем случае GameThirdPersonCameraMode_Default) класс описывающий режим камеры.

 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.