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内。

效果如图

相关推荐
野生风长7 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
Escalating_xu9 小时前
C++可变参数模板与引用折叠精讲
开发语言·c++
云泽8089 小时前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
fqbqrr10 小时前
2607d,C++细节比不上d
c++·d
^yi10 小时前
【C++】继承的那些事儿~
c++·继承·菱形继承·隐藏·final·继承原理·多继承的指针偏移
ShineWinsu12 小时前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket
hold?fish:palm13 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Duo1J14 小时前
【UE】Slate 编辑器工具开发03 - 节点编辑器 (EdGraph)
ue5·编辑器·游戏引擎·ue4
啦啦啦啦啦zzzz14 小时前
算法:回溯算法
c++·算法·leetcode
Lzg_na14 小时前
订阅发布模块事例
c++