UE 运行时编辑效果。Gizom使用增强输入改写

一.获得官方的插件,进行理解

1.核心使用左键点击后,发射射线启用这个函数。它生成小坐标,达成选中功能。

cpp 复制代码
bool ATransformerPawn::MouseTraceByObjectTypes(float TraceDistance
	, TArray<TEnumAsByte<ECollisionChannel>> CollisionChannels
	, TArray<AActor*> IgnoredActors, bool bAppendToList)
{
	FVector start, end;
	bool bTraceSuccessful = false;
	if (GetMouseStartEndPoints(TraceDistance, start, end))
	{
		bTraceSuccessful = TraceByObjectTypes(start, end, CollisionChannels
			, IgnoredActors, bAppendToList);

		if (!bTraceSuccessful && !bAppendToList)
			ServerDeselectAll(false);
	}
	return bTraceSuccessful;
}

2.在选中后,再点击轴拖动可以。实现跟随鼠标做对应移动。

其实也是调用上一个函数,但是选中后会修改bTraceSuccessful的值。导致不一样的逻辑,但是这是正确的。

2.ClearDomin清空点击后的功能,避免一直跟随移动。一般用在鼠标松开后。

cpp 复制代码
void ATransformerPawn::ClearDomain()
{
	//Clear the Accumulated tranform when we stop Transforming
	ResetDeltaTransform(AccumulatedDeltaTransform);
	SetDomain(ETransformationDomain::TD_None);
}

二.对官方插件进行修改

1.添加增强输入的资源,用静态查找的方式。FClassFinder,FObjectFinder也可以动态查找。这里用的TObject智能指针,其实和一般的指针用法一样,带个模板。可以用一般指针给他赋值。

cpp 复制代码
	struct FConstructorStatics {
		ConstructorHelpers::FObjectFinder<UInputMappingContext> TransformInputMappingContext;
		ConstructorHelpers::FObjectFinder<UInputAction> MouseRotateAction;
		ConstructorHelpers::FObjectFinder<UInputAction> MoveAction;
		ConstructorHelpers::FObjectFinder<UInputAction> SelectAction;
		ConstructorHelpers::FClassFinder<ATranslationGizmo> TranslationGizmo;
		
		FConstructorStatics()
			: TransformInputMappingContext(
				TEXT("/Script/EnhancedInput.InputMappingContext'/RuntimeTransformer/TransformInput/IMC_Transform.IMC_Transform'")),
			MouseRotateAction(TEXT("/Script/EnhancedInput.InputAction'/RuntimeTransformer/TransformInput/IA_RotateCam.IA_RotateCam'")),
			MoveAction(TEXT("/Script/EnhancedInput.InputAction'/RuntimeTransformer/TransformInput/IA_MoveCam.IA_MoveCam'")), 
			SelectAction(TEXT("/Script/EnhancedInput.InputAction'/RuntimeTransformer/TransformInput/IA_Select.IA_Select'")),
			TranslationGizmo(TEXT("/Script/Engine.Blueprint'/RuntimeTransformer/GizmoExamples/BP_TranslationGizmo_Example.BP_TranslationGizmo_Example_C'")){}
	};
	static FConstructorStatics ConstructorStatics;

	TransformInputMappingContext =
		(ConstructorStatics.TransformInputMappingContext.Object);
	MouseRotateAction =
		(ConstructorStatics.MouseRotateAction.Object);
	MoveAction =
		(ConstructorStatics.MoveAction.Object);
	SelectAction =
		(ConstructorStatics.SelectAction.Object);
	TranslationGizmoClass =
		ConstructorStatics.TranslationGizmo.Class; //

2.增强输入,修改。

具体可以看,这篇文章。把这个Pawn加上这些功能。

UE5 C++ 最简洁的万能案例,使用增强输入驱动移动旋转Pawn_ue 增强输出pawn移动-CSDN博客

.这里会有一些问题,增强输入对bool返回值比较敏感,很多时候导致编辑器时报错,但又不会完全崩溃。

5.增强输入,这里调用鼠标左键。调用上面的发射射线物体检测的函数。实现点击后的产生坐标

拿到蓝图的资源,并赋值到Pawn内。

效果如图

相关推荐
仰泳的熊猫5 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
Thera7779 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
君义_noip10 小时前
信息学奥赛一本通 1952:【10NOIP普及组】三国游戏 | 洛谷 P1199 [NOIP 2010 普及组] 三国游戏
c++·信息学奥赛·csp-s
旖-旎10 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
顶点多余11 小时前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
汉克老师11 小时前
GESP2026年3月认证C++四级( 第二部分判断题(1-10))
c++·指针·函数重载·文件操作·数组·gesp4级·gesp四级
khddvbe11 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
wWYy.12 小时前
STL:list
开发语言·c++
小比特_蓝光13 小时前
vector模拟实现
c++
咱就是说不配啊13 小时前
3.19打卡day33
数据结构·c++·算法