基本上,我已经制作了两张蓝图。我首先创建了父类,然后创建了一个应该是第一个子类的类。然而,作为虚幻的初学者,我在创建第二个 BP 时忘记了这样做。有没有办法在创建后将其转换为子 BP 类?
对于一个用例,我有一个动物 BP 和一个狗 BP,狗应该继承动物 BP,但是,在最初创建狗 BP 时,我没有右键单击动物 BP 并创建一个子类。在不破坏Dog BP并重新创建它的情况下,有没有办法对其进行转换,使其继承Animal BP?
所以我最近从Unity切换到Unreal,我无法理解Unreal中Owner的概念。我理解亲子关系,但主人到底是什么?更改演员的所有者并不会改变其层次结构,那么 unreal 到底是如何处理所有权的呢?
先感谢您。
编辑:删除了我发现的与渲染相关的细节,这对于所有权来说不是一个好的用例。
我对虚幻引擎 4 非常陌生,我需要一些帮助,我在互联网上找不到答案,所以我希望这里有人可以提供帮助。
当我打开游戏时进入Package项目(Windows)时,如何使其始终默认全屏?所以当我打开游戏时它将是全屏的。
有我可以用来做到这一点的蓝图吗?如果没有,您必须对其进行编程,您能否告诉我必须放置代码或其他内容的确切位置,因为就像我说的那样。我是个新手,大麦知道这个界面以及如何使用它。(我来自Unity)
我是 C++ 新手,正在尝试从 Unity3D 迁移到虚幻引擎 4。现在我正在尝试编写我的第一个插件(UI 插件和工具是我工作中非常重要的一部分),并坚持将 OnClicked 事件添加到 SButton I从创建独立窗口插件开始并添加一个按钮。
TSharedRef<SDockTab> FAssistLibModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs) {
FText WidgetText = FText::Format(
LOCTEXT("WindowWidgetText", "Add code 111 222 to {0} in {1} to override this window's contents"),
FText::FromString(TEXT("FAssistLibModule::OnSpawnPluginTab")),
FText::FromString(TEXT("AssistLib.cpp"))
);
FText ButtonLabel = FText::FromString("Button?");
return SNew(SDockTab)
.TabRole(ETabRole::NomadTab)
[
// Put your tab content here!
SNew(SVerticalBox)
+SVerticalBox::Slot().VAlign(VAlign_Top)
[
SNew(STextBlock)
.Text(WidgetText)
]
+SVerticalBox::Slot().VAlign(VAlign_Top)
[
SNew(SButton)
.Text(ButtonLabel)
.OnClicked(this, &FAssistLibModule::CollectBlueprintsButtonClicked)
]
];}
Run Code Online (Sandbox Code Playgroud)
编译 UE 后给我这个错误
Info Compiling game modules for hot reload
Info Performing 2 actions (4 …Run Code Online (Sandbox Code Playgroud) 我想在我的 Unreal Projekt 中制作一个服务器系统。我想从服务器下载一个包含所有玩家位置的文件并打开该文件以读取行。到目前为止一切正常。然后我必须分割所有玩家坐标的线。
我不知道如何将FString转换为双精度型,然后从坐标中创建FVector 。
我遇到碰撞问题。我想做简单的射弹。我制作了一个具有根、球体和网格组件的 Actor。当这个演员击中目标物体时,什么也没有发生。我已经尝试了很多方法,也与
void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
void OnOverlapEnd(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);
Run Code Online (Sandbox Code Playgroud)
功能,但没有任何结果..
这是我的自定义射弹的构造函数:
AProjectile_2::AProjectile_2()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
Root = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));
RootComponent = Root;
mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("staticMesh"));
static ConstructorHelpers::FObjectFinder<UStaticMesh>SphereMeshAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
if (SphereMeshAsset.Succeeded())
{
mesh->SetStaticMesh(SphereMeshAsset.Object);
mesh->SetWorldScale3D(FVector(0.2f));
}
mesh->SetEnableGravity(true);
mesh->SetSimulatePhysics(true);
mesh->SetupAttachment(Root); …Run Code Online (Sandbox Code Playgroud) 在一个关卡中,我正在创造一个演员,该演员旨在在某些时候而不是在其他时候存在。我很好地生成了演员,并计划在我不需要它时销毁它。但我想确保我不会处于这样一种状态:当演员不存在时,我会试图对演员采取行动。
我正在考虑带有 new、delete 和 nullptr 的 c++ 对象指针。我将变量初始化为 nullptr,在使用 new 时分配指针,完成后删除指针,然后将变量重新分配为 nullptr。这样我就可以通过检查指针是否不等于 nullptr 来检查指针是否有效。
什么(如果有的话)相当于 UE4 蓝图中这个看似基本的概念?
我目前正在尝试遵循本教程,以便在制作我的第一个游戏时取得良好的开端。除了使用我自己的属性名称之外,我完全遵循了上述教程中的所有内容。我的问题是我的角色类中的这段代码没有被调用:
void AGetOutCharacter::BeginPlay()
{
Super::BeginPlay();
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Using GetOutCharacter"));
}
}
Run Code Online (Sandbox Code Playgroud)
就像在教程中一样,我有一个游戏模式类和一个从该类扩展的蓝图。并且该蓝图类在项目设置中设置为默认游戏模式。该游戏模式使用我的角色类蓝图,它是从我的角色类扩展而来的,作为默认的 pawn 类。同样,这是在项目设置中设置的,就像教程中一样。
我可能只是失去了理智,但我一生都无法弄清楚为什么当我在 PIE 中运行游戏时没有显示调试日志。在我的游戏模式类中,有一个与上面的日志相同的日志,该日志在游戏运行时显示,但不是角色类中的日志。我尝试在游戏模式StartPlay()和角色BeginPlay()函数中放置输出到输出日志控制台的日志语句,同样,游戏模式中的日志语句就像一个魅力,但角色类中的日志语句根本不起作用。我还尝试在字符类中调用该AddOnScreenDebugMessage(...)函数的行放置一个断点,但从未到达该断点。我在游戏模式类中的同一位置放置了一个断点,该断点被击中。Reason 告诉我,这意味着游戏使用我的类的方式有问题,但编辑器显示一切正常。
一个特别有趣且令人困惑的交互是,如下所示,没有设置用于控制玩家移动的映射。因此,当我的游戏模式和角色类别设置为默认值时,正如游戏运行时所预期的那样,角色无法移动。但是,当我将默认 pawn 设置为 stock pawn 类时,这种无法移动的情况仍然存在。只有当我删除游戏模式类作为默认游戏模式时,我才能在运行游戏时重新获得在关卡中移动的能力。这表明正在使用字符类,但它的BeginPlay()函数没有被调用。
任何帮助将不胜感激,因为我已经花了几个小时来解决这个问题。谢谢!
作为参考,以下是游戏模式和角色类别:
游戏模式.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GetOutGameModeBase.h"
#include "GetOutGameMode.generated.h"
/**
*
*/
UCLASS()
class GETOUT_API AGetOutGameMode : public AGetOutGameModeBase
{
GENERATED_BODY()
public:
virtual void StartPlay() override;
}; …Run Code Online (Sandbox Code Playgroud) 因此,我尝试创建一个自定义数据资产以在虚幻引擎中使用。我对此非常陌生,我主要关注艺术,所以尽管我对 OOP 有一个大致的了解,但 C++ 远不是我的强项。无论如何,我的课程如下所示:
USTRUCT()
struct FTrainFormations {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere)
FString TrainEntry;
UPROPERTY(EditAnywhere)
bool Flipped;
UPROPERTY(EditAnywhere)
bool CargoLoaded;
UPROPERTY(EditAnywhere)
bool AllowSubstitution;
};
UCLASS(BluePrintType)
class TS2NEW_API UTrainFormation : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Train")
TArray<FTrainFormations> Formation;
UPROPERTY(EditAnywhere, Category = "Train", DisplayName = "Train Numbering Overrides")
TArray<int> TrainNumberingOverrides;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Vehicle Substitution")
float BlockTrainProbability;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Rail Vehicle Information")
int CommonnessWeighting;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Rail Vehicle Information")
bool IsSubstitutableUnit;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category …Run Code Online (Sandbox Code Playgroud) 我想创建文本“按 {InteractKey} 进行 {Interact}”。
如何在不使用 InputAction 的情况下获取绑定到 Interact 操作绑定 (“F”) 的密钥?我想获得钥匙而不触发事件。
所以最后我的文字会说“按 F 来做这件事”。
unreal-engine4 ×10
c++ ×5
fullscreen ×1
null ×1
package ×1
reference ×1
variables ×1
windows ×1