虚幻四C++入坑指南08:C++实现FPS游戏(2) 角色 移动

虚幻四C++入坑指南08:C++实现FPS游戏(2)
虚幻引擎4文档 > 编程指南 > C++ 编程教程 > 第一人称射击游戏教程 > 2 - 实现角色

01 FPSCharacter

01 01 新建Character类型的C++类“FPSCharacter”

我沿用了QuickStart工程,因为新建工程是GameMode,不符合,也不会调,所以沿用有GameModeBase的QuickStart(之前的工程)
在这里插入图片描述
在这里插入图片描述

01 02 .cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "FPSCharacter.h"

// Sets default values
AFPSCharacter::AFPSCharacter()
{
 	// Set this character 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 spawned
void AFPSCharacter::BeginPlay()
{
	Super::BeginPlay();
	if (GEngine)
	{
		// 显示调试信息五秒。-1"键"值(首个参数)说明我们无需更新或刷新此消息。
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));
	}
}

// Called every frame
void AFPSCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void AFPSCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

}


01 03 生成BP

01 04 验证演示

在这里插入图片描述

01 05 将 BP_FPSCharacter 用作默认 Pawn,我的Pawn灰色不可选

在这里插入图片描述
那就手动Player0
在这里插入图片描述

01 06 轴映射

Action是攻击、跳跃类,点按;Axis是移动类,长按
在这里插入图片描述

01 07 FPSCharacter.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "FPSCharacter.generated.h"

UCLASS()
class QUICKSTART_API AFPSCharacter : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AFPSCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;


	// 处理前进和后退的输入。
	UFUNCTION()
		void MoveForward(float Value);

	// 处理左右移动的输入。
	UFUNCTION()
		void MoveRight(float Value);
};

01 08 FPSCharacter.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "FPSCharacter.h"
#include "Engine/Engine.h"

// Sets default values
AFPSCharacter::AFPSCharacter()
{
 	// Set this character 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 spawned
void AFPSCharacter::BeginPlay()
{
	Super::BeginPlay();
	if (GEngine)
	{
		// 显示调试信息五秒。-1"键"值(首个参数)说明我们无需更新或刷新此消息。
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));
	}
}

// Called every frame
void AFPSCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void AFPSCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);
	
	
	// 设置"移动"绑定。
	//PlayerInputComponent->BindAxis("通知", this, &AFPSCharacter::调用事件);
	/*
	//使用结构体内部的函数需要绑定函数,指明是呢一个类来调用的
	template<class UserClass>模板结构体
	FInputAxisBinding& BindAxis(const FName AxisName, UserClass * Object, typename FInputAxisHandlerSignature::TUObjectMethodDelegate< UserClass >::FMethodPtr Func)
	{
		FInputAxisBinding AB(AxisName);
		AB.AxisDelegate.BindDelegate(Object, Func);
		AxisBindings.Emplace(MoveTemp(AB));
		return AxisBindings.Last();
	}
	*/

	PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
	PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);
}

void AFPSCharacter::MoveForward(float Value)
{
	// 明确哪个方向是"前进",并记录玩家试图向此方向移动。
	FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
	AddMovementInput(Direction, Value);
}

void AFPSCharacter::MoveRight(float Value)
{
	// 明确哪个方向是"向右",并记录玩家试图向此方向移动。
	FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
	AddMovementInput(Direction, Value);
}

01 09 生成拖拽演示

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用的 主要技术有: 1、大面积山脉渲染,使用Heightmap构造地形,7级 LOD 细节精度,地形无限重复循环 。 2、清晰、自然的地表贴图。 3、读取.MD2 、.MS3D 格式的3D模型文件。 4、粒子系统,产生爆炸、炊烟等特效。 5、太阳光晕。 6、使用Blend模拟Brightness/contrast调节图象亮度。 操作控制 可以在GameSetting菜单中设定: 1.视频属性 ( Video Setting ) 1).屏幕分辨率( Resolution ) 游戏率默认为800*600,在任务执行前可改变分辨率,但不会立即生效,只有在初始化任务时才改变分辨率。 2).屏幕亮度( Brigthness ) 在不同的硬件配置上,屏幕亮度往往表现出较大差异,通过该项可将亮度调节到最佳。 3).视野范围 ( Visible Distance ) 调节地形绘制的距离。对于配置较低的硬件,适当降低视野距离可提高帧速率,但由于远处地形网格较粗,对帧速率提高贡献并不大。 4).雾浓度 ( Fog Density ) 2.音频属性 ( Audio Setting ) 1).背景音乐(music) 可以打开或关闭背景音乐,可以调节音量。 音乐播放 audio/music/menu.mp3 ,如果你有自己喜爱的mp3音乐文件可以将它替换 menu.mp3 文件。 2).音效( sound ) 可以打开或关闭音效,可以调节音量。游戏中的枪声与人物的发声具有3D效果。 3.键盘操作 ( Keyboard Setting ) 以下操作可以更改 Up、Down、Left、Right设定移动操作。 Fire 射击 Jump 跳跃 Zoom 放大远处景物 Help 弹出帮助 修改方法:用鼠标点击选项,然后输入新的按键。 另外,游戏保留了几个开发模式下的操作: Page Up 提升视点高度 Page Down 降低视点高度 (可以看到地形绘制区域) L 线框模式 F 冻结所有敌人 V 隐身 N 敌人攻击力为零 I 隐藏房子 O 隐藏敌人 P 隐藏树木 在游戏运行中,按 Help 项的按键获得帮助。 4.鼠标操作 鼠标的移动可改变视角,默认设定左键为射击,右键为放大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值