引自免费微信小程序:皆我百晓生
要实现一个UE5中的摄像机漫游功能,并且可以跟踪并自动解除跟踪当前目标单位的AI移动,你需要创建一个新的蓝图组件来控制摄像机的行为。首先,确保已经安装了FbxMesh和UObject类。
1. 创建蓝图组件
在编辑器中,打开Assets文件夹下的Blueprints目录,然后新建一个蓝图(例如命名为CameraMove)。右键点击CameraMove蓝图,在弹出菜单中选择Create New Blueprint Component。接下来,将CameraMove蓝图拖放到场景中。
2. 设置追踪机制
在CameraMove蓝图中,为追踪对象设置一个OnMouseButtonDown事件监听器。当用户按下鼠标左键时,此事件被激活,表明玩家正在尝试跟踪一个单位。
void CameraMove::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
// 获取鼠标坐标
FVector2D MousePosition;
if (MouseEvent.GetScreenSpacePosition(MousePosition))
{
// 计算相机位置到鼠标的距离
float Distance = FVector2D(MyGeometry.BoundingSphere.Center - MousePosition).Size();
// 如果鼠标位置与单位相对应的位置很近,表示可以进行跟踪
if (Distance < UnitRadius)
{
SetViewTargetWithBlend(UnitGuid);
bIsTrackingUnit = true;
}
else
{
bIsTrackingUnit = false;
}
}
}
3. 定义追踪单位的结构体
为了方便管理,定义一个UnitInfo结构体,包含追踪的目标单位的唯一标识符、位置等信息。
struct FUnitInfo
{
int32 UnitGuid; // 单位的GUID
FVector Location; // 单位的位置
};
4. 实现自动解除跟踪
在CameraMove蓝图中添加一个名为SetViewTargetWithBlend的方法,用于自动解除跟踪。
void CameraMove::SetViewTargetWithBlend(FGuid TargetGuid, float BlendTimeInSeconds)
{
// 获取目标单位的信息
UWorld* World = GetWorld();
if (World && !bIsTrackingUnit)
{
auto UnitActor = World->GetFirstPlayerController()->GetPawn();
if (UnitActor)
{
FUnitInfo Info;
Info.UnitGuid = UnitActor->GetUniqueNetId();
Info.Location = UnitActor->GetActorLocation();
// 检查是否是同一单位
if (Info.UnitGuid == TargetGuid)
{
UE_LOG(LogTemp, Warning, TEXT("Detected same unit"));
return;
}
// 更新目标单位信息
TargetUnitGuid = TargetGuid;
TargetUnitLocation = Info.Location;
// 开始跟踪
SetViewTarget(TargetGuid);
// 设置过渡时间
if (BlendTimeInSeconds > 0)
{
FTimerHandle Handle;
FTimerDelegate Delegate = FTimerDelegate::CreateLambda([this]
{
SetViewTargetWithBlend(TargetGuid, 0.0f);
});
GetWorld()->GetTimerManager().SetTimer(Handle, Delegate, BlendTimeInSeconds, false);
}
}
}
}
5. 初始化和释放
确保在游戏开始时正确初始化CameraMove蓝图,并在游戏退出前正确释放它。
// 在GameStart函数中初始化
void GameStart()
{
if (!CameraMove) { return; }
CameraMove->Initialize();
}
// 在GameEnd函数中释放
void GameEnd()
{
if (CameraMove) { CameraMove->Release(); }
}
6. 测试与优化
运行游戏并检查CameraMove蓝图的工作情况。根据测试结果调整追踪逻辑,可能需要进一步优化和调试。
通过以上步骤,你应该能够在UE5中实现一个能跟踪并自动解除跟踪的摄像机。记得在实际应用中不断迭代和完善,以满足特定的游戏需求。
