在一个宇宙飞船类中,我有一个变量float CameraHeight
,它定义了相机应该在网格上方创建多高。
我想在Blueprint(基于C类)中设置这个变量,这样我就可以 * 选择最佳值 *。但是,当我从Blueprint更改此变量时,相机不会更改其位置。我相信这是因为构造函数只在创建对象时被调用,当我试图改变蓝图中的变量时,它已经创建,尽管我不知道如何解决这个问题。
是否有可能在C constructor中将相机高度设置为一个变量,但只能在稍后的蓝图中初始化该变量的值?
ASpaceship.h
UCLASS()
class SPACESHIPSHOOTER_API ASpaceship : public ACharacter
{
GENERATED_BODY()
public:
ASpaceship();
protected:
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
UPROPERTY(EditAnywhere)
float CameraHeight; // This variable
UPROPERTY(EditDefaultsOnly)
USkeletalMeshComponent* MeshComponent;
UPROPERTY()
UCameraComponent* CameraComponent;
UFUNCTION()
void MoveForward(float value);
UFUNCTION()
void MoveRight(float value);
};
ASpaceship.cpp constructor
ASpaceship::ASpaceship()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
MeshComponent = GetMesh();
CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
CameraComponent->SetupAttachment(MeshComponent);
CameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, CameraHeight)); // Here I try to set the camera position with a variable
CameraComponent->bUsePawnControlRotation = true;
}
2条答案
按热度按时间ukqbszuj1#
在C++中,你可以有一个“构造脚本”功能,它将响应你在蓝图中设置的任何值,如果你添加以下覆盖:
唯一重要的是,在你的蓝图的构造脚本中,你需要调用父构造脚本。如果没有看到它的节点,请右键单击构造脚本节点,然后选择“添加对父函数的调用”。
ylamdve62#
正如@goose_lake所说,这是使用
OnConstruction
函数的一个选项。但请记住,这是在Blueprint的组件创建和注册之后调用的,因此如果您想更改一些BP数据,它将不起作用。如果它不起作用,你可以在蓝图中使用UserConstructionScript
。它是BlueprintImplementableEvent
,所以之前被称为。