查看: 208|回复: 9

[编程指南] 【3. 在世界中放置相机Director(导演) | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73034
发表于 2016-6-27 00:53:27 | 显示全部楼层 |阅读模式



上一步
下一步



   
编程指南主页


在代码编译完成后,我们可以把 内容浏览器 中的新类的实例拖曳到 关卡编辑器 中。

CameraDirectorInContentBrowser.jpg




接下来,我们需要设置CameraOne(相机1)和CameraTwo(相机2)变量。 在 World Outliner (世界大纲视图)中搜寻CameraDirector,并在 详细信息面板 中进行编辑。

CameraDirectorDetails.jpg




点击标记为"无"的下拉框,然后设置变量为 Cube (立方体)和我们之前创建的 CameraActor (相机Actor)。

CameraDirectorDetails2.jpg




如果我们按下 Play (播放),我们将会看到与此视图对齐的相机:

CameraOneView.jpg




然后平滑混合到此视图:

CameraTwoView.jpg




在对齐之前,它会等待几秒。


我们现在的这个系统会完全基于游戏逻辑来移动玩家的相机。 代码可进行修改以在任何游戏中进行使用,玩家在这些游戏中无法直接控制相机,或者在这些游戏中,在相机视图间的混合是有效的。


完成的代码


MyPawn.h

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#pragma once#include "GameFramework/Actor.h"#include "CameraDirector.generated.h"UCLASS()class HOWTO_AUTOCAMERA_API ACameraDirector : public AActor{    GENERATED_BODY()public:     // Sets default values for this actor's properties    ACameraDirector();    // Called when the game starts or when spawned    virtual void BeginPlay() override;    // Called every frame    virtual void Tick( float DeltaSeconds ) override;    UPROPERTY(EditAnywhere)    AActor* CameraOne;    UPROPERTY(EditAnywhere)    AActor* CameraTwo;    float TimeToNextCameraChange;};
MyPawn.cpp

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#include "HowTo_AutoCamera.h"#include "CameraDirector.h"#include "Kismet/GameplayStatics.h"// Sets default valuesACameraDirector::ACameraDirector(){    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.    PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawnedvoid ACameraDirector::BeginPlay(){    Super::BeginPlay();}// Called every framevoid ACameraDirector::Tick( float DeltaTime ){    Super::Tick( DeltaTime );    const float TimeBetweenCameraChanges = 2.0f;    const float SmoothBlendTime = 0.75f;    TimeToNextCameraChange -= DeltaTime;    if (TimeToNextCameraChange = 0.0f)    {
TimeToNextCameraChange += TimeBetweenCameraChanges;
//Find the actor that handles control for the local player.
APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
if (OurPlayerController)
{
     if (CameraTwo  (OurPlayerController-GetViewTarget() == CameraOne))
     {

  //Blend smoothly to camera two.

  OurPlayerController-SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
     }
     else if (CameraOne)
     {

  //Cut instantly to camera one.

  OurPlayerController-SetViewTarget(CameraOne);
     }
}    }}


   
上一步
下一步



   
编程指南主页
回复

使用道具 举报

0

主题

902

帖子

2997

积分

vip会员

Rank: 1

积分
2997
发表于 2016-7-2 19:34:56 来自手机 | 显示全部楼层
不错,我喜欢这个,看看多少金币哦
回复 支持 反对

使用道具 举报

0

主题

897

帖子

2983

积分

vip会员

Rank: 1

积分
2983
发表于 2016-7-3 23:45:42 | 显示全部楼层
有些买不起了,看看把
回复 支持 反对

使用道具 举报

0

主题

883

帖子

2902

积分

vip会员

Rank: 1

积分
2902
发表于 2016-7-4 11:31:10 来自手机 | 显示全部楼层
好东西,所噶
回复 支持 反对

使用道具 举报

0

主题

1242

帖子

3895

积分

vip会员

Rank: 1

积分
3895
发表于 2016-7-9 09:08:06 | 显示全部楼层
啊啊啊啊,好多好多好多
回复 支持 反对

使用道具 举报

0

主题

851

帖子

2807

积分

vip会员

Rank: 1

积分
2807
发表于 2016-7-10 22:52:27 来自手机 | 显示全部楼层
看看价钱,然后考虑。
回复 支持 反对

使用道具 举报

0

主题

942

帖子

3071

积分

vip会员

Rank: 1

积分
3071
发表于 2016-7-20 21:03:05 来自手机 | 显示全部楼层
谢谢支持。
回复 支持 反对

使用道具 举报

0

主题

831

帖子

2717

积分

vip会员

Rank: 1

积分
2717
发表于 2016-7-21 02:48:40 | 显示全部楼层
谢谢楼主分享哈!
回复 支持 反对

使用道具 举报

0

主题

861

帖子

2852

积分

vip会员

Rank: 1

积分
2852
发表于 2016-7-23 06:22:34 来自手机 | 显示全部楼层
好东西,多些楼主分享
回复 支持 反对

使用道具 举报

0

主题

854

帖子

2807

积分

vip会员

Rank: 1

积分
2807
发表于 2016-7-25 02:12:56 来自手机 | 显示全部楼层
我又来了,太贵了,我盯着你好久了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部