UE4杂项

获取编辑器视口选中了哪些Actors?

USelection* SelectedActors = GEditor->GetSelectedActors();
if (SelectedActors)
{
	TArray<UObject*> SelectedActorsArr;
	SelectedActors->GetSelectedObjects(AActor::StaticClass(), SelectedActorsArr);

	if (SelectedActorsArr.Num() != 1)
	{
		UE_LOG(LogTemp, Error, TEXT("SelectedActorNum != 1"));
		return;
	}

	FTransform SelectedActorTransform;
	UObject* curObj = SelectedActorsArr[0];
	AActor* Actor = Cast<AActor>(curObj);
	if (Actor)
	{
		SelectedActorTransform = Actor->GetTransform();
		UE_LOG(LogTemp, Warning, TEXT("SelectedActor Transform:%s"), *SelectedActorTransform.ToString());
	}
	else
	{
		return;
	}
}

编辑器视口中如何生成Actor?

UWorld* World = GCurrentLevelEditingViewportClient ? GCurrentLevelEditingViewportClient->GetWorld() : nullptr;
	if (!World)
	{
		return;
	}

	//创建可生成的镜头代码参考void FSequencer::CreateCamera()
	//void FSequencer::CreateCamera()主要是点击sequencer工具Toolbar上的“Create Camera”执行的。

	const FScopedTransaction Transaction(LOCTEXT("CreateCameraFromTemplete", "Create Camera From Templete"));

	FActorSpawnParameters SpawnParams;
	// Don't bother transacting this object if we're creating a spawnable since it's temporary
	SpawnParams.ObjectFlags &= ~RF_Transactional;

	// Set new camera to match viewport
	ACameraActor* NewCamera = World->SpawnActor<ACameraActor>(cameraClass,SelectedActorTransform,SpawnParams);
	if (!NewCamera)
	{
		UE_LOG(LogTemp,Error,TEXT("Spawn Templete Camera Actor return null."));
		return;
	}

知道两个世界坐标系下的FTransform,如果计算坐标B对于坐标A的相对坐标?

如果只计算Location,可以通过

 A.InverseTransformPosition(B.Location);

类似的函数参见InverseTransform*相关函数。

如果计算的是Transform,可以知道:

B = F(相对坐标)*A;
B*Inverse(A) = F(相对坐标)*A*Inverse(A)=F(相对坐标)
所以F(相对坐标) = B*Inverse(A)

如何在游戏运行时动态获得屏幕的截图信息(例如巫师中的存档图片等)?

一开始尝试调用的是GetViewportScreenShot函数,但是发现直接调用这个函数是存在问题,比如打包后运行或者standalone模式运行发现返回的是纯黑的内容,问了下官方人员,官方人员建议我使用FScreenshotRequest::RequestScreenshot,而且不用长时间等待数据。具体如何使用可参考:Engine\Source\Developer\FunctionalTesting\Private\ScreenshotFunctionalTest.cpp,这个调用不仅能生成图片文件,而且还可以通过注册回调函数拿到图片的数据。

如图,如果Idle动画播放了一半切换成了Stand状态,动画会从idle融合到Stand动画,如果这时候再切到Idle状态,stand融合到的是idle一半时候的姿势,我们想融合到Idle最开始的姿势。

解决办法:勾选Blend Poses by int结点的Reset Child on Activation.

蓝图中的And和Or操作没有短路原则。

行为树资源如果出现了循环引用,则会出现REINST的错误,解决办法就是解除循环引用。比如Pawn运行行为树,行为树内部引用了Pawn,导致了循环引用,我的做法是在Pawn的C++层面运行行为树。行为树配置到全局的表格当中。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值