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

效果如图

相关推荐
郝学胜_神的一滴20 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天2 天前
C++ 基础入门完全指南
c++
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK3 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境4 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境4 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴5 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境7 天前
C++ 的Eigen 库全解析
c++
卷无止境7 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴7 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake