基于C++代码的UE4学习(四十四)——将鼠标坐标变为三维坐标

 

需要用到DeprojectScreenPositionToWorld()方法,这个方法与GetViewportSize一样,只能在PlayerController里使用。

新建一个PlayerController

 

 

 1 void AMyPlayerController::setAll() {
 2     
 3     int32 viewx;
 4     int32 viewy;
 5     GetViewportSize(viewx,viewy);
 6 
 7     FVector WorldLocation;
 8     FVector WorldDirection;
 9 
10     if (DeprojectScreenPositionToWorld(viewx * 0.5, viewy * 0.5, WorldLocation, WorldDirection)) {
11         //UE_LOG(LogTemp, Warning, TEXT("WorldDirection is %s"), *WorldDirection.ToString());
12         GetWorld()->GetFirstPlayerController()->bShowMouseCursor = false;
13     }
14 
15     FHitResult hit;
16     FVector startLocation;
17     FVector endLocation;
18     startLocation = PlayerCameraManager->GetCameraLocation();
19     endLocation = startLocation + PlayerCameraManager->GetCameraRotation().Vector() * 1000;
20 
21     DrawDebugLine(GetWorld(),startLocation,endLocation,FColor::Red,false,-1.0f,'\000',5.0f);
22 
23     auto pawn = GetWorld()->GetFirstPlayerController()->GetPawn();
24 
25 
26     if (GetWorld()->LineTraceSingleByChannel(
27         hit,
28         startLocation,
29         endLocation,
30         ECollisionChannel::ECC_Vehicle,
31         FCollisionQueryParams(),
32         FCollisionResponseParams(ECR_Block)
33     )) {
34         UE_LOG(LogTemp, Warning, TEXT("Name is %s"), *hit.GetActor()->GetName());
35     }
36     
37 }
38 
39 
40 
41 void AMyPlayerController::Tick(float DeltaSeconds) {
42     setAll();
43 }


WorldLocation就是Camera的Location。

 

文中使用的按照通道进行射线检测:

ECollisionChannel::ECC_Vehicle,  检测的物体必须是Vehicle类型

FCollisionQueryParams(), 是否开启复杂碰撞,是否忽略自己等等。

FCollisionResponseParams(ECR_Block) 检测的物体必须是Block的碰撞预设。

DeprojectScreenPositionToWorld(viewx * 0.5, viewy * 0.5, WorldLocation, WorldDirection)  //前两个坐标是画布的中心点,第四个参数是鼠标在三维世界的坐标。当画面指向X轴的时候,x的值为1.以此类推。

 

此节没有图例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值