变量改写步骤
-
在C++类头文件中创建同名同类型的变量
-
在变量名之前使用UPROPERTY设置访问修饰符
UE4支持的访问修饰符及其含义参见下文 -
编译代码后,将蓝图中原来的变量删去。(VS中编译热键
Shift+Ctrl+B
)到蓝图中查看发现原来蓝图中的变量被自动改名了。如原来的MaxNum被改成了MaxNum_0。原因是编译代码后检测到了变量名冲突。
为了使用C++中的变量,我们需要手动删除蓝图中原有的变量, 在此之前,需要先将用到这个变量的地方手动替换成c++中的变量:
右键单击蓝图变量-》查找引用-》对每个引用进行手动替换(在事件图标中删除该变量,右键输入变量名选择不带_0的变量即可)
访问修饰符
访问修饰符是在C++代码中声明的,给予编辑器的访问权限。
如何选择需要的访问修饰符:
-
判断需要的编辑器读写性:
给编辑器的访问权限是只可读(RredOnly)还是可读写(ReadWrite) -
判断这个变量需要在什么时候使用:
在默认值(Defaults),实例(Instance)还是蓝图(Blueprint)中使用。
Defaults默认值指的是,在蓝图细节面板中看到的C++中设置的初始值。
Instance实例指的是蓝图拖放到关卡中以后的那一个实例。
若只填写了VisibleDefaultsOnly则只能在细节面板中看到这个变量的值,不能修改。关卡中的实例看不见这个值。该值是在C++中声明的时候写的。
-
选择访问修饰符,填入UPROPERTY()后面的括号中:
protected:
UPROPERTY(EditAnywhere, BlueprintReadOnly)
float MaxGrabDistance = 100.0f;
最常用的访问修饰符是EditAnywhere和VisibleAnywhere。前者可在蓝图的细节面板和实例的细节面板中修改值,后者是只读。
此外,若该值需要在蓝图的事件图表或函数中使用的话,还要添加BlueprintReadOnly或者BlueprintReadWrite。
完整头文件:Grab.h
#pragma once
#include "CoreMinimal.h"
#include "Components/SceneComponent.h"
#include "Grabber.generated.h"
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent), Blueprintable )
class BLUEPRINTSTOCPP_API UGrabber : public USceneComponent
{
GENERATED_BODY()
public:
// Sets default values for this component's properties
UGrabber();
protected:
// Called when the game starts
virtual void BeginPlay() override;
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
protected:
UPROPERTY(EditAnywhere, BlueprintReadOnly)
float MaxGrabDistance = 100.0f;
};