UCLASS(abstract, config=Game, BlueprintType, hidecategories=("Pawn|Character|InternalEvents"))
class ENGINE_API ACharacter : public APawn
{
GENERATED_UCLASS_BODY()
...
UPROPERTY(Transient)
uint32 bClientWasFalling:1;
/** If server disagrees with root motion track position, client has to resimulate root motion from last AckedMove. */
UPROPERTY(Transient)
uint32 bClientResimulateRootMotion:1;
/** Disable simulated gravity (set when character encroaches geometry on client, to keep him from falling through floors) */
UPROPERTY()
uint32 bSimGravityDisabled:1;
/**
* Jump key Held Time.
* This is the time that the player has held the jump key, in …Run Code Online (Sandbox Code Playgroud) 感恩节快乐,首先,我一直在寻找知道Visual Scripting是否是为游戏引擎制作的新东西.让我向您展示一些可视化脚本的示例
另一件事就是在IDE中编写c ++代码的常规编码现在我尝试了它们,但我一直试图弄清楚的问题是,因为我尝试了它们两者,看起来可视化脚本更容易,更容易理解至少我觉得当我连接节点时将它与我编写代码时的"播放器控制器"进行比较是有道理的我会告诉你我花了多长时间编写一个敌人控制器!在C玩家控制器++编写代码,我花了大约2个小时,而我花了仅一小时连接节点使用可视化脚本它来进行玩家的控制器,但即使这是一个简单的过程,速度快,我没有感觉良好,我开始更多地考虑编写c ++代码而不仅仅是连接节点的优势?所以这里有一个问题:编写代码有什么好处?使用Visual脚本有什么好处?两者有什么缺点?我知道Visual Scripting的这些优点并不像编写c ++代码那么复杂
编写代码也会比"已创建的脚本"(Visual Scripts)更快
最后一个问题,如果您必须在您选择Visual或编写代码之间做出选择?
注意:我决定在这里提问而不是游戏引擎网站,因为在这里我可以找到"程序员",在大多数游戏引擎网站中他们都喜欢"快乐的方式",因为他们称之为(可视化脚本)而不是(悲伤的方式)是(写代码)
我希望这次我没有问一些会导致太多负面投票的"坏"问题:)对我来说很容易就是感恩节;)
更新:这里有一些关于我在虚幻引擎中使用的Visual Scripting的更多信息我从虚幻引擎网站获得它"虚幻引擎中的Blueprints可视化脚本系统是一个完整的游戏性脚本系统,基于使用基于节点的概念从虚幻编辑器中创建游戏元素的界面.该系统非常灵活和强大,因为它使设计师能够使用通常只供程序员使用的几乎所有概念和工具.通过使用蓝图,设计师可以进行原型设计,实现或修改几乎任何游戏元素,例如:游戏 - 设置游戏规则,调整游戏条件等.玩家 - 创建具有不同网格和材质或角色定制的变体.相机 - 原型新相机视角或动态更改相机玩输入-改变播放器控件或允许玩家通过输入笔数-武器,法术,皮卡,触发器,等环境 - 创建随机道具或程序生成的项目."我不认为有一样,如果你必须做出一些复杂的,你需要编写代码为它(我认为)这样的事情
我在虚幻引擎4中有一个项目,它的大小是4.5Gb.我想把它提交给github.是否可以添加到GitIgnore的任何文件夹?

这适用于虚幻引擎4.9
每一帧,我都想把它保存到文件中(覆盖现有的).
对于我制作的简单D3D11演示,我已经能够:
void Engine::CaptureFrame(D3DX11_IMAGE_FILE_FORMAT format, const LPCTSTR fileName){
backbuffer->GetResource(&resource);
ID3D11Texture2D* texture;
HRESULT hResult = resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&texture));
D3DX11SaveTextureToFile(deviceContext, texture, format, fileName);
//Clean up
texture->Release();
resource->Release();
}
Run Code Online (Sandbox Code Playgroud)
我也用OpenGL做了这个,使用了一个名为" FreeImage " 的库.
我不想修改UE4源,并且正在寻找一种"挂钩"到UE4并"捕获"帧的方法.
我已经设法用开放式广播软件做到了这一点,但我想在UE4内本地通过c ++或蓝图进行此操作.
我也知道我可以从编辑器中做到这一点,但这不是我想要做的.我想在运行时自动执行此操作.
我怎么能这样做?它甚至可能吗?
我正在尝试从 Unreal Engine C++ 项目中填充的 UTexture2D 读取像素数据。在我在这里发布问题之前,我尝试使用此链接中描述的方法:https : //answers.unrealengine.com/questions/25594/accessing-pixel-values-of-texture2d.html。但是,它对我不起作用。我从纹理中得到的所有像素值都是一些垃圾数据。
我只想从 SceneCapture2D 和包含 SceneTexture: Depth 节点的后处理材料中获取深度值。我需要 C++ 中可用的深度值,以便我可以使用 OpenCV 进行进一步处理。在 Directx11 中,staging 纹理可用于 CPU 读取,但在虚幻引擎中,我不知道如何像 Dx11 那样创建“staging 纹理”。我无法从当前方法中获得正确的像素值,这让我觉得我可能会尝试访问非 CPU 可读的纹理。
这是我从 RGB UTexture2D 读回数据的实验代码。
初始化 RGB 纹理:
VideoTextureColor= UTexture2D::CreateTransient(640, 480, PF_B8G8R8A8);
VideoTextureColor->UpdateResource();
VideoUpdateTextureRegionColor = new FUpdateTextureRegion2D(0, 0, 0, 0, 640, 480);
ColorRegionData = new FUpdateTextureRegionsData;
PixelDepthData.Init(FColor(0, 0, 0, 255), 640 * 480);
// Populate the texture with blue color
for (int i = 0; i < 640; i++) { …Run Code Online (Sandbox Code Playgroud) 我在看一个虚幻的教程时遇到了这行代码:
class UStaticMeshComponent* Pickup;
Run Code Online (Sandbox Code Playgroud)
这是一个转发声明。我学习c++有一段时间了,以前没有遇到过这样的事情。我了解指针和引用,但我从未见过这种格式:类名*。我们正在创建一个指向另一个类的类指针吗?我尝试搜索后跟 * 的类名,但出现的唯一结果是有关数据类型和指针的。
public:
APickUp ();
virtual void BeginPlay () override;
virtual void tick ( float DeltaSeconds );
private:
class UStaticMeshComponent* Pickup;
Run Code Online (Sandbox Code Playgroud) 在 UnrealEngine 中,UFUNCTION用于通过蓝图使用、复制和委托的附加说明符来丰富功能。
但是,某些委托类型似乎不允许绑定 a UFUNCTION(如多播委托),而其他类型则需要绑定 a UFUNCTION(如动态多播委托)。
是否有可用的概述,哪种委托类型接受哪种类型的函数(普通 c++ 或UFUNCTION)?
我找不到列出子关卡(LevelStreaming)内所有 Actor 的方法。对于枚举,我尝试使用 TActorIterator,但它的构造函数接受对 UWorld 的引用,它不接受对 ULevelStreaming 的引用,因为它们都继承自 UObject,而 ULevelStreaming 不继承自 UWorld。我可以这样列出世界上所有的演员:
UWorld* world = GetWorld();
TActorIterator<AActor> Iterator(world, AActor::StaticClass());
for (; Iterator; ++Iterator)
{
AActor* Actor = Cast<AActor>(*Iterator);
GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::Yellow, Actor->GetFName().ToString()); //Print name of the Actor
}
Run Code Online (Sandbox Code Playgroud)
这可行,但我只从主地图(持久级别)获取对象,并且我不知道如何从我添加为 ULevelStreaming 的附加级别获取所有 Actor 的列表。这是我的尝试(不起作用):
UWorld* world = GetWorld();
auto levels = world->GetStreamingLevels();
for (auto level : levels) {
ULevelStreaming* currentLevel = Cast<ULevelStreaming>(level);
TActorIterator<AActor> It(currentLevel, AActor::StaticClass()); //Here is compiler error with TActorIterator's constructor
for (; It; ++It)
{
AActor* Actor = Cast<AActor>(*It); …Run Code Online (Sandbox Code Playgroud) 每当我创建一个虚幻引擎 4 C++ 项目时,它都会抛出这个错误
Running E:/program_files/UE_4.24/Engine/Binaries/DotNET/UnrealBuildTool.exe -projectfiles -project="D:/Game Development/MyProject2/MyProject2.uproject" -game -rocket -progress
Discovering modules, targets and source code for project...
ERROR: Could not find NetFxSDK install dir; this will prevent SwarmInterface from installing. Install a version of .NET Framework SDK at 4.6.0 or higher.
Run Code Online (Sandbox Code Playgroud)
我已经安装了 ue4 4.24 版本和visual studio 2019,并且在安装visual studio 2019 时也选择了使用c++ 进行游戏开发。我从微软网站下载了 .NET Framework,但是当我安装它时,它说您的安装不会发生,请参见下文,原因是这台计算机上已经安装了 .NET Framework 4.8 或更高版本的更新。那我该怎么办请帮帮我! 提前致谢
我想调用函数,它会更改小部件内的文本。
有一个virtual函数NativeConstruct,它会自动调用。它会更改小部件的文本,但我需要调用函数F1并向其发送我想要显示的文本。但是当我调用它时,变量Name是nullptr. 由于某种原因nullptr,当程序调用NativeConstruct.
Name 是我的文本变量,我想改变dialogBottom 是具有此变量的小部件的名称已编辑
UAccessWidgetFromCpp* AccessWidgetFromCpp
= CreateWidget<UAccessWidgetFromCpp>(
GetWorld()->GetFirstPlayerController(), UAccessWidgetFromCpp::StaticClass()
);
if (AccessWidgetFromCpp)
{
AccessWidgetFromCpp->F1("222");
widgetDialogBottomInstance->AddToViewport();
}
UCLASS()
class HOME_API UAccessWidgetFromCpp : public UUserWidget
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
class UTextBlock* Name = nullptr;
UFUNCTION()
void F1(FString text);
};
void UAccessWidgetFromCpp::F1(FString text)
{
if (auto widget = dynamic_cast<UTextBlock*>(GetWidgetFromName(TEXT("Name"))))
{
Name = widget;
Name->SetText(FText::FromString(text));
}
}
Run Code Online (Sandbox Code Playgroud)