查看: 182|回复: 4

[编程指南] 【2. 配置游戏输入 | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

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



上一步
下一步



   
编程指南主页



有两种输入映射类型: 动作映射和坐标轴映射。

您可以把 Action Mappings (动作映射)想象成"是或否"的输入,类似于鼠标按键或摇杆按键。 当在短时间内按键、松开、双击或按住不放时,它们会进行该项操作的汇报。 离散事件的动作,诸如跳跃、射击或与物体互动都可以使用这种类型的映射。

Axis Mappings (坐标轴映射)是持续不断的 - 您可以把它们想象成为"数量"输入,例如摇杆上的杆,或者鼠标指针的位置。 它们会在每一帧汇报其值,即使在不移动时也是如此。 一般涉及到量级或方向的内容,比如行走、到处看、开车等都可以用这种方式来处理。

您可以在代码中直接定义输入映射,但一般的方式是在 虚幻引擎 编辑器中定义它们,这也是我们在本篇教程中采用的方法。


在 虚幻引擎 编辑器中,在 编辑 下拉菜单中,我们点击 项目设置 选项。

EditProjectSettings.jpg




在该处,我们选择左侧的 引擎 部分的 输入 选项。 我们可以随后展开位于右侧的 绑定 分类,然后添加一个 Action Mapping (动作映射)和两个 Axis Mappings (坐标轴映射)。

点击  Action Mapping (动作映射)或 Axis Mappings (坐标轴映射)部分的标题旁的加号将可以添加新的映射。 左侧的展开箭头可以用来显示或隐藏映射。 如需添加额外的输入到映射中,请点击映射旁的加号。 接下来是我们需要的映射和输入。 您可以记一下"S" 和 "A"输入的负值。



动作映射增加空格键


坐标轴映射MoveXW1.0S-1.0MoveYA-1.0D1.0
ConfigureInput.jpg




现在我们的输入已经配置完成,让我们在关卡中设置MyPawn。 MyPawn类将会出现在 内容浏览器 中,而且可被拖曳到 关卡编辑器 中。

ClassInContentBrowser.jpg




PawnInSceneView.jpg




还需一步就可以完成 MyPawn 的设置。 我们把它命名为 Static Mesh (静态网格物体),这样就能在游戏中看到它。 我们可以选择刚创建的 MyPawn ,选择在 Details Panel (详细信息面板)中命名为"OurVisibleComponent (Inherited)"的组件,然后通过 Static Mesh (静态网格物体)分类的下拉框来分配资源。 对这个教程来说,"Shape_Cylinder"是一个很好的资源。

StaticMesh.jpg




我们现在可以保存关卡并返回 Visual Studio 来书写代码,这样将会让我们放置的MyPawn对我们定义的输入进行响应。


我们现在可以完成在 Visual Studio 中的MyPawn类的编码。


正在开发中的代码


MyPawn.h

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#pragma once#include "GameFramework/Pawn.h"#include "MyPawn.generated.h"UCLASS()class HOWTO_PLAYERINPUT_API AMyPawn : public APawn{    GENERATED_BODY()public:    // Sets default values    AMyPawn();    // Called when the game starts or when spawned    virtual void BeginPlay() override;    // Called every frame    virtual void Tick( float DeltaSeconds ) override;    // Called to bind functionality to input    virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;    UPROPERTY(EditAnywhere)    USceneComponent* OurVisibleComponent;};
MyPawn.cpp

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#include "HowTo_PlayerInput.h"#include "MyPawn.h"// Sets default valuesAMyPawn::AMyPawn(){    // Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.    PrimaryActorTick.bCanEverTick = true;    // Set this pawn to be controlled by the lowest-numbered player    AutoPossessPlayer = EAutoReceiveInput::Player0;    // Create a dummy root component we can attach things to.    RootComponent = CreateDefaultSubobjectUSceneComponent(TEXT("RootComponent"));    // Create a camera and a visible object    UCameraComponent* OurCamera = CreateDefaultSubobjectUCameraComponent(TEXT("OurCamera"));    OurVisibleComponent = CreateDefaultSubobjectUStaticMeshComponent(TEXT("OurVisibleComponent"));    // Attach our camera and visible object to our root component. Offset and rotate the camera.    OurCamera-AttachTo(RootComponent);    OurCamera-SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));    OurCamera-SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));    OurVisibleComponent-AttachTo(RootComponent);}// Called when the game starts or when spawnedvoid AMyPawn::BeginPlay(){    Super::BeginPlay();}// Called every framevoid AMyPawn::Tick( float DeltaTime ){    Super::Tick( DeltaTime );}// Called to bind functionality to inputvoid AMyPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent){    Super::SetupPlayerInputComponent(InputComponent);}


   
上一步
下一步



   
编程指南主页
回复

使用道具 举报

0

主题

881

帖子

2924

积分

vip会员

Rank: 1

积分
2924
发表于 2016-7-2 19:36:52 来自手机 | 显示全部楼层
合集看着不错。
回复 支持 反对

使用道具 举报

0

主题

875

帖子

2922

积分

vip会员

Rank: 1

积分
2922
发表于 2016-7-3 23:55:14 来自手机 | 显示全部楼层
感谢分享,下载看看
回复 支持 反对

使用道具 举报

0

主题

847

帖子

2820

积分

vip会员

Rank: 1

积分
2820
发表于 2016-7-4 11:31:53 来自手机 | 显示全部楼层
好棒好棒好棒,谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

819

帖子

2721

积分

vip会员

Rank: 1

积分
2721
发表于 2016-7-8 17:40:19 | 显示全部楼层
好久没给力点的了。谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

 
 



邮件留言:


 
返回顶部