星鸿阁

 找回密码
 立即注册
搜索
热搜: 活动 交友 动画
查看: 1343|回复: 0

获取编辑器视口选中了哪些Actors等一系列常见问题

[复制链接]

2250

主题

2760

帖子

9610

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9610
发表于 2020-12-28 15:59:17 | 显示全部楼层 |阅读模式

获取编辑器视口选中了哪些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++层面运行行为树。行为树配置到全局的表格当中。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|starfluidga

GMT+8, 2025-1-2 06:27 , Processed in 0.015121 second(s), 22 queries .

Made by Liga 星鸿阁

Copyright © 2020-2048, LigaStudio.

快速回复 返回顶部 返回列表