【UE5 C++】鼠标点击发射射线获取物体信息

UE小白,有错误的地方请指出。

本文使用UE5,如在UE4中使用可能需调整某些API

一、获取镜头控制器,并开启点击事件

bash 复制代码
APlayerController* playerController;
void AMeshChangeController::Item()
{
	playerController = FAITestHelpers::GetWorld()->GetFirstPlayerController();
	playerController->bEnableClickEvents = true;
	playerController->SetShowMouseCursor(true);
	playerController->EnableInput(playerController);
	
}
void AMeshChangeController::BeginPlay()
{
	Super::BeginPlay();
	Item();
	
}

二、鼠标点击发射射线

在Tick中调用射线发射逻辑

UE中API看起来没有分鼠标抬起和鼠标按下API,如有大佬知道可以评论一下。

bash 复制代码
void AMeshChangeController::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	TestRay();
}
void
 AMeshChangeController:: TestRay()
{
	//鼠标左键触发
	if(playerController->IsInputKeyDown(EKeys::LeftMouseButton))
	{
		FHitResult OutHit;//用于接收命中的Actor
		FVector Start; //射线起点
		FVector End ;	//射线终点
		FVector Dir;	//鼠标点击的方向
		playerController->DeprojectMousePositionToWorld(Start, Dir);

		End = Start + (Dir * 100000);
		DrawDebugLine(GetWorld(), Start, End, FColor::Green, false, 100, 0, 5);//绘制射线
		bool isFinsh = GetWorld()->LineTraceSingleByObjectType(OutHit, Start, End, ECC_WorldStatic);//进行射线检测

		if (Cast<AActor>(OutHit.GetActor()))
		{
			AActor* gameObject = OutHit.GetActor();
			FString s = gameObject->GetActorNameOrLabel();
			
			UE_LOG(LogTemp, Warning, TEXT("被点击的物体,%s"), *s);
		}
	}
}
相关推荐
还债大湿兄1 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
倔强青铜33 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
u_topian4 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
珊瑚里的鱼4 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上4 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
xingshanchang5 小时前
Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
开发语言·matlab
Risehuxyc5 小时前
C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
开发语言·c++
AI视觉网奇5 小时前
git 访问 github
运维·开发语言·docker
不知道叫什么呀5 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc
liulilittle5 小时前
.NET ExpandoObject 技术原理解析
开发语言·网络·windows·c#·.net·net·动态编程