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

效果如图

相关推荐
.YM.Z6 分钟前
C++——【红黑树】原理详解:定义、性质、插入变色与旋转实现
开发语言·c++
无名猿1 小时前
constexpr 能力扩张:从 C++11 到 C++20 的编译期计算
c++·性能优化·现代c++·编译期
007张三丰1 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
三月微暖寻春笋2 小时前
【和春笋一起学C++】(七十二)类模板
开发语言·c++·实例·类模板·使用类模板·数组模板
xlq223222 小时前
全面复习4
c++
殷色玫瑰2 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc
Tri_Function2 小时前
背包:从入门到实战
c++
j7~2 小时前
【C++ 标准项目】发布订阅消息队列 (篇七):项目创建与基础工具模块搭建
开发语言·c++·log4j·uuid·protobuf·helper工具·消息定义类型和交换机类型定义
Lazionr3 小时前
unordered_map和unordered_set的使用
开发语言·c++·算法
进化中的刀盾兽3 小时前
从零实现 C++ Json-Rpc(九):从 TCP 字节流中拆出完整消息——MuduoBuffer 与 LVProtocol
c++·rpc