在公司学习UE4下的C++代码编程时,依照《Unreal Engine4总动员》上的示例编写代码时,总是发生代码六的错误以及一些莫名其妙的错误。下图是书上示例:
这是我敲的代码:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Foat.generated.h"
UCLASS()
class QUICKSTART_API AFoat : public AActor
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Damage")
int32 TotalDamage;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Damage")
float DamageTimeInSecond;
UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category = "Damage")
float DamagePerSecond;
public:
// Sets default values for this actor's properties
AFoat();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
void PostInitProperties() ;
UFUNCTION(BlueprintCallable,Category="Damage")
void CalculateValues();
void PostEditChangeProperty(FPropertyChangedEvent& FPropertyChangedEvent);
};
明明已经按照书上的示例敲下来了,一摸一样,却发生了代码六错误和一些莫名其妙的错误,在公司一下午盯着书开始怀疑人生(真郁闷,明明就是一样的)
错误提示如下:
?后来经过我的慢慢思索和试验,发现当UPROPERTY()宏有一些需要暴露给蓝图进行读或者写的参数的时候(如:BlueprintReadWrite,BlueprintReadOnly等),就会发生这个错误,而没有这些参数时,系统就能编译通过。
下图为没有涉及蓝图参数的UPROPERTY()宏代码通过示例图
?那么我就开始思考,他们有什么区别,为什么UPROPERTY()加了暴露给蓝图的参数就会编译不通过,后来我终于想明白了,当这些加了暴露给蓝图参数的UPROPERTY()不能在类里设定为私有成员,因为他们会暴露给蓝图,所以设置成私有会报错(class里若没有定义,默认私有),当我们把这些带有蓝图参数的变量定义设置为public公有或者protected保护时,就不会出现问题,编译通过。
下图为带有蓝图参数的代码通过的截图。
?哈哈哈,终于找到问题所在啦,解决问题的感觉真爽!!!!!!!
如果觉得对你有帮助,请点个赞支持下(下班了,溜了溜了。)
|