获取鼠标在世界中的位置

news/2024/11/19 16:35:48/

-获取鼠标位置有很多方法,这里说三种,但只是提供方法,具体并不是很清楚

一、GetHitResultUnderCursorByChannel

FHitResult TraceHitResult;//检测结果
GetHitResultUnderCursorByChannel(TraceTypeQuery1, true, TraceHitResult);    
FVector pos = TraceHitResult.Location;//位置

看一下源码

bool APlayerController::GetHitResultUnderCursorByChannel(ETraceTypeQuery TraceChannel, bool bTraceComplex, FHitResult& HitResult) const
{ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player);bool bHit = false;if (LocalPlayer && LocalPlayer->ViewportClient){FVector2D MousePosition;if (LocalPlayer->ViewportClient->GetMousePosition(MousePosition)){bHit = GetHitResultAtScreenPosition(MousePosition, TraceChannel, bTraceComplex, HitResult);}}if(!bHit)   //If there was no hit we reset the results. This is redundant but helps Blueprint users{HitResult = FHitResult();}return bHit;
}

我推测是根据追踪类型进行定位,不是很清楚

二、GetHitResultUnderCursor

FHitResult bTraceHitResult;
GetHitResultUnderCursor(ECC_Visibility, true, bTraceHitResult);
FVector pos = bTraceHitResult.Location;//位置

看一下源码

bool APlayerController::GetHitResultUnderCursor(ECollisionChannel TraceChannel, bool bTraceComplex, FHitResult& HitResult) const
{ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player);bool bHit = false;if (LocalPlayer && LocalPlayer->ViewportClient){FVector2D MousePosition;if (LocalPlayer->ViewportClient->GetMousePosition(MousePosition)){bHit = GetHitResultAtScreenPosition(MousePosition, TraceChannel, bTraceComplex, HitResult);}}if(!bHit)   //If there was no hit we reset the results. This is redundant but helps Blueprint users{HitResult = FHitResult();}return bHit;
}

和第一种很像,只有一个参数是变化的,推测是根据碰撞类型进行定位,因为在碰撞设置的时候也会设置对于Trace的反应。

三、LineTraceSingleByChannel,之前说过LineTraceSingleForObjects,这里是ByChannel

        FHitResult HitResult,Start, Dir, End, ;DeprojectMousePositionToWorld(Start, Dir);//获取初始位置和方向End = Start + (Dir*8000.0f);//设置追踪终点GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Visibility);FVector pos = HitResult.Location;//位置

只看一下DeprojectMousePositionToWorld的源码吧

bool APlayerController::DeprojectMousePositionToWorld(FVector& WorldLocation, FVector& WorldDirection) const
{ULocalPlayer* const LocalPlayer = GetLocalPlayer();if (LocalPlayer && LocalPlayer->ViewportClient){FVector2D ScreenPosition;if (LocalPlayer->ViewportClient->GetMousePosition(ScreenPosition)){return UGameplayStatics::DeprojectScreenToWorld(this, ScreenPosition, WorldLocation, WorldDirection);}}return false;
}//被调用的方法
bool UGameplayStatics::DeprojectScreenToWorld(APlayerController const* Player, const FVector2D& ScreenPosition, FVector& WorldPosition, FVector& WorldDirection)
{ULocalPlayer* const LP = Player ? Player->GetLocalPlayer() : nullptr;if (LP && LP->ViewportClient){// get the projection dataFSceneViewProjectionData ProjectionData;if (LP->GetProjectionData(LP->ViewportClient->Viewport, eSSP_FULL, /*out*/ ProjectionData)){FMatrix const InvViewProjMatrix = ProjectionData.ComputeViewProjectionMatrix().InverseFast();FSceneView::DeprojectScreenToWorld(ScreenPosition, ProjectionData.GetConstrainedViewRect(), InvViewProjMatrix, /*out*/ WorldPosition, /*out*/ WorldDirection);return true;}}// something went wrong, zero things and return falseWorldPosition = FVector::ZeroVector;WorldDirection = FVector::ZeroVector;return false;
}

http://www.ppmy.cn/news/404515.html

相关文章

Windows上更换鼠标指针图标

今天试着将自己的电脑的指针图标个性化升升级&#xff0c;试了一下还是非常简单。 1.打开漫锋网的鼠标下载地址&#xff08;我们需要的鼠标、壁纸、主题都在这下载&#xff0c;很安全放心进&#xff09; https://zhutix.com/tag/cursors/ 2.选择一款自己喜欢的鼠标皮肤&#xf…

【WIN10更改鼠标指针默认图标】

WIN10更改鼠标指针默认图标 1.制作素材2.更改鼠标设置 1.制作素材 选择一张png格式的图片来制作鼠标的格式 通过在线工具: onlineconvertfree将.png格式的图片转换成.ico格式 注&#xff1a;这里不直接转换成.cur格式是因为直接转换的.cur文件不可用 F2将.ico的后缀重命名为…

win10更换自己喜欢的鼠标样式,马里奥、wow、lol都可以哦

window自带的鼠标样式多少年了还是这几个&#xff0c;一点美感也没有&#xff0c;看都看腻了&#xff0c;想起自己玩的游戏中丰富多彩的鼠标样式&#xff0c;可是如何更改呢&#xff0c;下面是小教程&#xff0c;以作者很喜欢的马里奥为例。 首先进入下面这个网站选择自己喜欢…

图标跟鼠标一起移动

撰写时间&#xff1a;2019.04.24 今天学会了一个新技能&#xff0c;动态获取鼠标位置&#xff0c;可以在网页上随机移动图标&#xff0c;可以应用在一些个性的导航交互或者页面icon交互。 首先要设置一张图片: 在写样式的时候除了基本宽高&#xff0c;导入图片&#xff0c;最重…

鼠标移入图标显示颜色

今天有些空闲&#xff0c;了解了解现在前端的技术&#xff0c;无意中看到一个鼠标移入图片显示颜色这个功能&#xff0c;通常的时候我们会用雪碧图&#xff0c;改变不同的位置显示不同的图片&#xff0c;或者两张图片替换&#xff0c;但是今天意外发现一整更简便的方法&#xf…

前端-鼠标经过后图标变色

这是两个小图标&#xff1a; 鼠标经过后发现变了颜色&#xff1a; 本来以为是一个普通的鼠标经过事件然后进行变换背景颜色&#xff0c;然后我发现我太天真了&#xff0c;他居然是一张图片&#xff01;&#xff01;&#xff01; 然后我就研究了相关知识&#xff1a; 首先我们…

鼠标放在NPC身上 改变鼠标 图标

1.找好一张改变鼠标图标&#xff1b;如&#xff1a;小手等 2.把其放在Resources文件夹下面如&#xff1a;SHOP_05图片 3.利用这张图片创建Texture2D &#xff1a; private Texture2D mouseNPCTexture; void Start () { //不需要加.PNG后缀名// mouseNPCTexture Resources.Load…

18.4 项目:“现在鼠标在哪里?”

能够确定鼠标的位置&#xff0c;对于建立 GUI 自动化脚本是很重要的。但光看屏幕&#xff0c;几 乎不能弄清楚像素的准确坐标。如果有一个程序在移动鼠标时随时显示x y 坐标&#xff0c;就会很方便。 总的来说&#xff0c;你希望该程序做到&#xff1a; • 获得鼠标当前的 …