UE5 物体自动跟随主角镜头转向

A、思路

Tick,设置物体世界旋转

旋转数值源于物体自身位置与玩家摄像机位置的差值

效果是物体自动转向,玩家镜头动,则物体也随之调整角度。

适合一些提示文字,如按键提示、帮助之类。

B、参考图

### 物体跟随功能在UE5中的实现 为了实现在Unreal Engine 5 (UE5)中让一个物体跟随另一个物体的功能,可以采用多种方法。一种常见的方式是通过蓝图脚本或C++编程来动态更新被跟随对象的位置和旋转属性。 #### 使用蓝图实现简单跟随行为 对于大多数情况来说,在蓝图编辑器内完成此任务既快速又方便。下面是一个简单的例子说明如何创建基本的对象跟随机制: 1. **准备阶段** - 创建两个Actor类实例:一个是目标(Target),即要被其他物体所追随的目标;另一个是Follower(跟随者),它会不断调整自己的位置试图靠近Target。 2. **设置变量** - 在Follower Actor Blueprint里定义公共浮点型变量`FollowSpeed`,用于设定移动速度; - 同样在此BP内部声明一个新的Object Reference类型的公开变量命名为`TargetToFollow`. 3. **编写事件图表逻辑** ```blueprint Event Tick(float DeltaSeconds) { If(TargetToFollow != None && TargetToFollow.IsValid()) { FVector NewLocation = UKismetMathLibrary::VInterpConstantTo( GetActorLocation(), TargetToFollow->GetActorLocation(), DeltaSeconds, FollowSpeed); SetActorLocation(NewLocation, true); //平滑过渡到新地点而不改变朝向 FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(GetActorLocation(), TargetToFollow->GetActorLocation()); SetActorRotation(LookAtRotation.Quaternion()); //使跟随者的正面始终指向目标 } } ``` 上述代码片段展示了如何利用Kismet Math Library库函数计算出从当前位置线性插值得到的新坐标,并逐步接近指定的目标位置[^1]。同时也会确保跟随物体会一直面向它的追踪方向。 #### C++版本的实现方式 如果更倾向于使用C++来进行开发,则可以通过继承AActor类并重写Tick()成员函数的方式来达到相同的效果: ```cpp // .h 文件部分 class FOLLOWER_API AFollower : public AActor { public: UPROPERTY(EditAnywhere, Category="Following") float FollowSpeed; protected: virtual void BeginPlay() override; UFUNCTION() void UpdatePosition(); private: UPROPERTY() AActor* TargetToFollow; }; // .cpp文件部分 void AFollower::BeginPlay() { Super::BeginPlay(); PrimaryActorTick.bCanEverTick = true; //开启每帧调用tick的能力 } void AFollower::UpdatePosition() { if (!IsValid(TargetToFollow)) return; FVector CurrentPos = this->GetActorLocation(); FVector DesiredPos = TargetToFollow->GetActorLocation(); FVector InterpolatedLoc = FMath::VInterpConstantTo(CurrentPos ,DesiredPos , GetWorld()->DeltaTimeSeconds, FollowSpeed); this->SetActorLocation(InterpolatedLoc); FRotator RotationTowardsTarget = UKismetMathLibrary::FindLookAtRotation(this->GetActorLocation(), DesiredPos); this->SetActorRotation(RotationTowardsTarget); } ``` 这段程序同样实现了基于时间步长的速度控制下的平滑位移变换过程,同时还包含了自动转向特性以保持视线恒定地锁定住前方的目的地.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值