【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);
		}
	}
}
相关推荐
贵沫末3 分钟前
Python——图像处理项目Conda环境搭建
开发语言·python·conda
白日梦想家6813 分钟前
定时器实战避坑+高级用法,从入门到精通
开发语言·前端·javascript
white-persist7 分钟前
逆向入门经典题:从 IDA 反编译坑点到 Python 解题详细分析解释
c语言·开发语言·数据结构·python·算法·逆向·安全架构
是宇写的啊7 分钟前
MyBaties
java·开发语言·mybatis
誰能久伴不乏8 分钟前
SPI总线通信协议基础与ICM20607传感器驱动开发指南
arm开发·c++·驱动开发·嵌入式硬件·arm
-凌凌漆-11 分钟前
【Qt】const QString &与QString的区别
开发语言·qt
Drone_xjw15 分钟前
Qt QTableView 表头变白问题(Kylin/UKUI系统)原因分析与解决方案
开发语言·qt·kylin
mabing99315 分钟前
Qt 实现自定义分段控制器
开发语言·qt
爱喝雪碧的可乐19 分钟前
【Redis 毁灭计划】7 大高危操作打崩线上服务!从缓存雪崩到数据库宕机,90% 程序员都踩过的坑
开发语言·网络·redis·php
十五年专注C++开发19 分钟前
HDF5: 大数据的 “超级容器“
大数据·数据库·c++·hdf5