UE4 视角与人物转向(自用)

Posted littleshy13423

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 视角与人物转向(自用)相关的知识,希望对你有一定的参考价值。

1.bUsePawnControlRotation

官方解释:

If this component is placed on a pawn, should it use the view/control rotation of the pawn where possible? When disabled, the component will revert to using the stored RelativeRotation of the component.

单独修改 bUsePawnControlRotation = false后无法使用鼠标移动视角

2.bOrientRotationToMovement

官方解释:

If true, rotate the Character toward the direction of acceleration, using RotationRate as the rate of rotation change.

改为false后人物不会自动向移动方向旋转

3.bUseControllerRotationYaw

改为true以后人物会永远朝向镜头方向,而false状态下人物可以东张西望直到按下W才会转向镜头方向。

一篇不错的知乎观点(UE4开发随笔3-移动中朝向的同步 - 知乎 (zhihu.com)

        第一人称射击游戏bUseControllerRotationYaw设置为true

        MMORPG网游里比较常见的模式,摄像机悬挂在半空,玩家前后左右跑动,脸都会转向移动方向,这样我们就可以看到玩家的各个方向。bUseControllerRotationYaw必须先设置为false。然后将角色的运动组件CharacterMovementComponent的朝向运动方向属性bOrientRotationToMovement设置为true。

UE4 C++实现人物攻击

效果展示

使用动画蒙太奇实现人物攻击
按下左键之后,人物会进行攻击动作:



随机输出攻击动画。

创建动画蒙太奇

把我们的动画插入其中:

右击后点击新建蒙太奇部分:

在Sections部分点击Preview 就可以分为多段:

拉到最下面:
在Notifies中创建通知,通知移动到与动画结束相对应的部分,通知代表的意思是动作结束了。


点击那个放大镜可以看到插槽管理,第二个就是我们当前的这个动画,可以进行重命名也可以进行添加。

在动画蓝图中添加动画蒙太奇

打开动画蓝图,看到状态机部分:

这个是最顶端的状态,在状态中添加我们的那段蒙太奇部分。

绑定按钮及实现触发函数

在项目设置中绑定按钮:

左键点击攻击。

打开角色C++文件:

.h文件

  • 声明动画蒙太奇,给任务绑定动画蒙太奇
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	class UAnimMontage* _AnimMontage;

  • 储存是否处于攻击状态,处于攻击状态其他的一些状态就会受到限制 bool bAttacking;

  • 储存是否处于鼠标左键点击状态,用于判断是否可以进行连续攻击, bool bClicking;

  • 鼠标点击开始、结束

UFUNCTION()
	void OnClickBegin();

UFUNCTION()
	void OnClickEnd();
  • 攻击开始、结束
void AttackBegin();

UFUNCTION(BlueprintCallable)
	void AttackEnd();

.cpp 文件

先将一些东西进行一下限制:

  • OnInteract()、MoveForward(float Value)、MoveRight(float Value)
    添加:if (bAttacking) return;,攻击的时候不能移动,拾取东西。

  • 攻击开始函数, 将开启攻击状态、获取动画实例,判断是否有动画蒙太奇、实例是否存在、实例是否在进行播放动画蒙太奇,符合条件的话就开始播放动画蒙太奇,接下来就要让动画跳转到我们需要的部分进行播放,使用随机函数输出我们要输出哪一个动作。

添加头文件:

#include "Components/SkeletalMeshComponent.h"
#include "Animation/AnimInstance.h"
void ARole::AttackBegin()
{
	bAttacking = true;
	UAnimInstance* Instance = GetMesh()->GetAnimInstance();
	if (_AnimMontage && Instance && !Instance->Montage_IsPlaying(_AnimMontage)) {
		Instance->Montage_Play(_AnimMontage);

		switch (FMath::RandRange((int32)1, 3)) {
		case 1 : 
			Instance->Montage_JumpToSection(FName("Attack1"), _AnimMontage);
			break;
		case 2 : 
			Instance->Montage_JumpToSection(FName("Attack2"), _AnimMontage);
			break;
		case 3 : 
			Instance->Montage_JumpToSection(FName("Attack3"), _AnimMontage);
			break;
		}
	}
}
  • 攻击结束
void ARole::AttackEnd()
{
	bAttacking = false;
	// 鼠标还是按着的状态,那么就继续攻击
	if (bClicking && EquiqedWeapon) { 
		AttackBegin();
	}
}
  • 鼠标按下,开始调用攻击函数
void ARole::OnClickBegin()
{
	bClicking = true;
	if (!bAttacking && EquiqedWeapon) {
		AttackBegin();
	}
}
  • 鼠标松开
void ARole::OnClickEnd()
{
	bClicking = false;
}
  • SetupPlayerInputComponent 绑定按键

按下就调用按下函数,松开就调用松开函数。

// 攻击动作
PlayerInputComponent->BindAction("Click", IE_Pressed, this, &ARole::OnClickBegin);
PlayerInputComponent->BindAction("Click", IE_Released, this, &ARole::OnClickEnd);

首尾工作

在动画蓝图中将我们的结束通知与结束函数联系起来。

整体思路就是:鼠标按下 - OnClickBegin - AttackBegin - 播放动画 - 动画结束通知 - AttackEnd - ……(连续攻击)- 鼠标松开 - OnClickEnd - 结束。

以上是关于UE4 视角与人物转向(自用)的主要内容,如果未能解决你的问题,请参考以下文章

UE4 C++实现人物攻击

[UE4]死亡后调整视角

用ue4蓝图函数从1加到100怎么做

UE4 第三人称Game制作

UE4导入人物不在原点怎么办

UE4实现物体或人物透视效果(透视材质)