查看: 333|回复: 10

[编程指南] 【1. 附加相机到Pawn | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

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


Previous Step


   
下一步



   
编程指南主页



如果您刚使用 虚幻引擎4 ,建议您先读一下编程快速入门 tutorial 。 对这篇教程来说,我们假设您已经了解了如何创建项目,如何添加C++代码到项目中,如何编译您的代码以及如何添加 组件 到 虚幻引擎 编辑器中的 Actors 。


首先我们创建全新的、基础代码项目,附带初学者内容,其资源文件名称为"HowTo_PlayerCamera"。  我们想要创建一个自定义 Pawn 类,所以让我们先进行此操作。 在这个教程中,我们会对新的 Pawn 类使用资源文件名称"PawnWithCamera"。

NamePawnClass.jpg




接下来,在 Visual Studio 中,我们应该打开PawnWithCamera.h并添加如下代码到类定义的底部位置:

protected:    UPROPERTY(EditAnywhere)    USpringArmComponent* OurCameraSpringArm;    UCameraComponent* OurCamera;
我们可以使用这些变量来创建在末尾附加了 CameraComponent 的 SpringArmComponent 。 弹簧臂是一种添加相机(或其它 组件 )的既好又方便的方法,它们在总体上不完全是刚体,在移动时感觉更有弹性。

在此之后,我们需要在构造函数中创建 组件 。 添加如下代码到 APawnWithCamera::APawnWithCamera 的PawnWithCamera.cpp中:

//创建组件RootComponent = CreateDefaultSubobjectUSceneComponent(TEXT("RootComponent"));OurCameraSpringArm = CreateDefaultSubobjectUSpringArmComponent(TEXT("CameraSpringArm"));OurCameraSpringArm-AttachTo(RootComponent);OurCameraSpringArm-SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));OurCameraSpringArm-TargetArmLength = 400.f;OurCameraSpringArm-bEnableCameraLag = true;OurCameraSpringArm-CameraLagSpeed = 3.0f;
这样我们就把基础的、空白的 SceneComponent 创建为 组件 层次结构的根,然后对其创建并附加 SpringArmComponent 。 Spring Arm(弹簧臂) 随后被设置为默认的-60度的倾斜度(也就是说,看起来是向下60度)以及根位置上方的50个单位的位置。 我们还设立了一些 SpringArmComponent 类的特定值,它们可以确定其运动的长度和平滑度。 这样设置完成后,我们需要创建并附加 CameraComponent 到 SpringArmComponent 末端位置的插槽,如下所示:

OurCamera = CreateDefaultSubobjectUCameraComponent(TEXT("GameCamera"));OurCamera-AttachTo(OurCameraSpringArm, USpringArmComponent::SocketName);
最后,我们可以设置 Pawn 为默认受控,可以通过添加这段代码来自动生成本地玩家:

//控制默认玩家AutoPossessPlayer = EAutoReceiveInput::Player0;

我们现在有一个简单的 Pawn ,可以让我们舒适地控制相机。 接下来,我们可以在 虚幻引擎 编辑器中配置输入并创建对其进行响应的代码。


正在开发中的代码


PawnWithCamera.h

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#pragma once#include "GameFramework/Pawn.h"#include "PawnWithCamera.generated.h"UCLASS()class HOWTO_PLAYERCAMERA_API APawnWithCamera : public APawn{    GENERATED_BODY()public:    // 设置此pawn属性的默认值    APawnWithCamera();    // 当游戏开始或生成时调用    virtual void BeginPlay() override;    // 在每一帧调用    virtual void Tick( float DeltaSeconds ) override;    // 调用以绑定功能到输入    virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;protected:    UPROPERTY(EditAnywhere)    USpringArmComponent* OurCameraSpringArm;    UCameraComponent* OurCamera;};
PawnWithCamera.cpp

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#include "HowTo_PlayerCamera.h"#include "PawnWithCamera.h"// 设置默认值APawnWithCamera::APawnWithCamera(){    // 将此pawn设置为在每一帧都调用Tick()。  如果您不需要这项功能,您可以关闭它以改善性能。    PrimaryActorTick.bCanEverTick = true;    //创建组件    RootComponent = CreateDefaultSubobjectUSceneComponent(TEXT("RootComponent"));    OurCameraSpringArm = CreateDefaultSubobjectUSpringArmComponent(TEXT("CameraSpringArm"));    OurCameraSpringArm-AttachTo(RootComponent);    OurCameraSpringArm-SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));    OurCameraSpringArm-TargetArmLength = 400.f;    OurCameraSpringArm-bEnableCameraLag = true;    OurCameraSpringArm-CameraLagSpeed = 3.0f;    OurCamera = CreateDefaultSubobjectUCameraComponent(TEXT("GameCamera"));    OurCamera-AttachTo(OurCameraSpringArm, USpringArmComponent::SocketName);    //控制默认玩家    AutoPossessPlayer = EAutoReceiveInput::Player0;}// 当游戏开始或生成时调用void APawnWithCamera::BeginPlay(){    Super::BeginPlay();}// 在每一帧调用void APawnWithCamera::Tick( float DeltaTime ){    Super::Tick( DeltaTime );}// 调用以绑定功能到输入void APawnWithCamera::SetupPlayerInputComponent(class UInputComponent* InputComponent){    Super::SetupPlayerInputComponent(InputComponent);}

  Previous Step


   
下一步



   
编程指南主页
回复

使用道具 举报

0

主题

906

帖子

2976

积分

vip会员

Rank: 1

积分
2976
发表于 2016-7-2 19:35:20 来自手机 | 显示全部楼层
我现在有的是钱,我要下了!
回复 支持 反对

使用道具 举报

0

主题

882

帖子

2913

积分

vip会员

Rank: 1

积分
2913
发表于 2016-7-3 19:58:43 来自手机 | 显示全部楼层
好东西都要支持, 谢谢了
回复 支持 反对

使用道具 举报

0

主题

835

帖子

2706

积分

vip会员

Rank: 1

积分
2706
发表于 2016-7-4 10:43:40 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

848

帖子

2813

积分

vip会员

Rank: 1

积分
2813
发表于 2016-7-8 10:28:48 | 显示全部楼层
快没金币了,看看需要多少?
回复 支持 反对

使用道具 举报

0

主题

847

帖子

2790

积分

vip会员

Rank: 1

积分
2790
发表于 2016-7-15 02:14:43 来自手机 | 显示全部楼层
这个是什么呢,看看看
回复 支持 反对

使用道具 举报

0

主题

898

帖子

2921

积分

vip会员

Rank: 1

积分
2921
发表于 2016-7-16 17:23:05 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

815

帖子

2680

积分

vip会员

Rank: 1

积分
2680
发表于 2016-7-17 16:43:01 | 显示全部楼层
谢谢 分享 这个我还记得 不错
回复 支持 反对

使用道具 举报

0

主题

852

帖子

2812

积分

vip会员

Rank: 1

积分
2812
发表于 2016-7-19 20:46:09 | 显示全部楼层
来看看能不能下载
回复 支持 反对

使用道具 举报

0

主题

1253

帖子

3948

积分

vip会员

Rank: 1

积分
3948
发表于 2016-7-21 07:12:42 来自手机 | 显示全部楼层
什么游戏看看
回复 支持 反对

使用道具 举报

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

本版积分规则

 
 



邮件留言:


 
返回顶部