UE4 平滑跟踪式像机C++实现 4.24.2

普通的摄像机绑定Character的做法虽然简单高效,但是有一个弊端,就是当角色使用某个技能在某些位置快速穿梭时,角色动作的潇洒被快速移动带来的眼花缭乱抵消的一干二净,因此需要一种方式平滑跟踪而不是瞬移。于是我就用C++实现了一个。

新建第三人称蓝图模板

老规矩,基操。后面再转C++。

修改角色模板内容。

将新建一个Actor变量,公开,后期角色对这个Actor进行快速穿梭动作。删除CameraBoom和FollowCamera。
在这里插入图片描述
删减蓝图,只留下必要的节点。在这里插入图片描述

新建一个C++类继承自APawn

在这里插入图片描述
添加一个函数

//Camrea_CPP.h
UFUNCTION(BlueprintCallable)
		void CameraFollow(AActor* FollowTarget, float Speed, float MaxDistance);
//Camrea_CPP.cpp
#include "Kismet/KismetMathLibrary.h"
void ACamera_CPP::CameraFollow(AActor* Tar, float Speed, float MaxDistance)
{
	FVector TarLoc = Tar->GetActorLocation();
	FVector SelfLoc = GetActorLocation();
	float Dis = FVector::Distance(TarLoc, SelfLoc);//获取相机与目标间的距离
	if (Dis < 10)//距离小于一定值时,不需要继续跟踪
		return;
	float MoveSpeed = UKismetMathLibrary::Lerp(0, Speed, (Dis - 10.0f) / MaxDistance);
	//以当前距离与最大距离的商为Lerp函数的Alpha值,距离越远,速度越快。
	AddActorWorldOffset(UKismetMathLibrary::GetForwardVector(
		UKismetMathLibrary::FindLookAtRotation(SelfLoc, TarLoc)) * MoveSpeed);
	//获取目标相对于相机的方向(长度为1),乘以预定的移动速度,每帧向目标偏移
}

编译,新建蓝图,继承自我们自己写的CPP,打开。
在这里插入图片描述
添加两个SpringArm和一个camera,父子关系如图所示。
在这里插入图片描述
在相机碰撞关掉碰撞检测在这里插入图片描述
两个相机臂是因为避免碰上角色网体碰撞。也可以通过自定义碰撞通道。但是比较麻烦,这里就从简了。
新建Character变量,公开
在这里插入图片描述
在Tick中调用函数(可能会找不到,需要重启一下编辑器)
在这里插入图片描述
回到角色蓝图,添加Beginplay事件,添加函数SetViewTargetWithBlend
在这里插入图片描述

这时功能已经完成了,再加点东西测试一下。

敌人Actor(无功能)
在这里插入图片描述
来一点点特效(白嫖自虚幻商城)

在这里插入图片描述
动画修饰一下
在这里插入图片描述
将所有蓝图拖入关卡,设置角色变量
在这里插入图片描述
感受不同
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值