Day3
制作引擎使用的属性
//制作引擎使用的属性
UPROPERTY()
class UPaperFlipbook* RedBird;
UPROPERTY(EditAnywhere,Category="SelfProprety|Number") //可读可写标记
int32 Number;//在细节面板中可以被编辑,同时也能被访问
UPROPERTY(VisibleAnywhere) //只读标记
int32 Age;//在细节面板中可以被访问,但是不能被编辑
UPROPERTY(BlueprintReadOnly)//蓝图可读,不能编辑
int32 Leg;
UPROPERTY(BlueprintReadWrite)//蓝图可读可写
bool IsToggle;
UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="SelfProprety|Number") //在细节面板中可读可写, 在蓝图中只读
int32 Number2;
UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="SelfProprety|Number|T") //组合标记
int32 Number3;
UPROPERTY(VisibleAnywhere,DisplayName="FirstNumber",Category="SelfProprety|Number")
int32 Number4;
UPROPERTY(EditAnywhere)
bool bToggle; //限定当前属性的开关
UPROPERTY(EditDefaultsOnly,meta=(EditCondition="bToggle"))
int32 Number5;
UPROPERTY(EditAnywhere,meta=(UIMin=0,UIMax=3))//滑动限定值为0--3
int32 Number6;
//滑动限定值为0--3 输入值的范围在-1--100之间
UPROPERTY(EditAnywhere,meta=(UIMin=0,UIMax=3,ClampMin=-1,ClampMax=10))
int32 Number7;
UPROPERTY(EditAnywhere,EditFixedSize)
TArray<int32> NumberArray;
UPROPERTY(EditAnywhere)
TArray<int32> NumberArray1;
//Number8被隐藏在了高级项中
UPROPERTY(EditAnywhere,AdvancedDisplay)
int32 Number8;
制作节点
//制作节点
/*
* 本函数用于测试
* N 数字
* B 判断标记
*/
UFUNCTION(BlueprintCallable)
int32 TestFunc1(int32& N,bool& B,FString Name);
UFUNCTION(BlueprintCallable)
int32 TestFunc2(const int32& N,bool& B,FString Name);
UFUNCTION(BlueprintCallable,BlueprintImplementableEvent)
void TestFunc3();//在C++中写声明,在蓝图中给出定义,但是C++和蓝图都可以调用这个函数
UFUNCTION(BlueprintCallable,BlueprintNativeEvent)
void TestFunc4();//在C++中写声明和定义,在蓝图中也可以给出定义,C++和蓝图都可以调用这个函数
C++加载蓝图为默认角色
ConstructorHelpers::FClassFinder<AMyPawn> MyClassPath(TEXT("/Script/Engine.Blueprint'/Game/FlappyBird/Blueprint/BP_Pawn.BP_Pawn_C'"));
if(MyClassPath.Class)
{
DefaultPawnClass=MyClassPath.Class;
}
//_C 重点
加载类为蓝图组件
C++类中作为成员变量使用
UPROPERTY(EditAnywhere)
class USpringArmComponent* ArmComponent;
UPROPERTY(EditAnywhere)
class UCameraComponent* MainCamera;
C++建插槽 , 蓝图选择
UPROPERTY(EditAnywhere)
class UPaperFlipbookComponent* RenderBirdComponent;
UPROPERTY(EditAnywhere)
class UPaperFlipbook* RedBirdFlipbook;
UPROPERTY(EditAnywhere)
class UPaperFlipbook* YellowBirdFlipbook;
UPROPERTY(EditAnywhere)
class UPaperFlipbook* BlueBirdFlipbook;
加载枚举
//枚举(用于描述状态信息)
UENUM()
enum EBirdStateTest //传统枚举
{
EBS_Wait,//等待游戏开始状态的小鸟
EBS_Fly,//游戏开始小鸟可以飞
EBS_Dead,//游戏结束,小鸟标记为死亡状态
};
UENUM(BlueprintType)
enum EColor //传统枚举
{
EC_Wait UMETA(DisplayName="Wait"),//等待游戏开始状态的小鸟
EC_Fly UMETA(DisplayName="Fly"),//游戏开始小鸟可以飞
EC_Dead//游戏结束,小鸟标记为死亡状态
};
UENUM()
namespace EBirdStateSecondTest //加命名空间的枚举,明明空间名是枚举名
{
enum Type
{
Wait,//等待游戏开始状态的小鸟
Fly,//游戏开始小鸟可以飞
Dead//游戏结束,小鸟标记为死亡状态
};
}
UENUM()
enum class EBirdState:uint8 //C++11的枚举(UE中常见)
{
Wait,//等待游戏开始状态的小鸟
Fly,//游戏开始小鸟可以飞
Dead//游戏结束,小鸟标记为死亡状态
};
USTRUCT(BlueprintType)
struct FUserInfo
{
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite)
FString Name;
UPROPERTY(BlueprintReadWrite)
int32 Age;
};
UCLASS() //NotBlueprintType在蓝图中禁止BirdPawn类被当作数据类型使用
//NotBlueprintable在蓝图中禁止BirdPawn被当作蓝图父类使用
class FLAPPYBIRD_API ABirdPawn : public APawn
{ GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite)
FUserInfo Info;
//传统的枚举和加命名空间的枚举需要借助TEnumAsByte转为一个类类型加UPROPERTY
UPROPERTY(EditAnywhere)
TEnumAsByte<EColor> SetColor;
UPROPERTY(EditAnywhere)
TEnumAsByte<EBirdStateSecondTest::Type> SetBirdState1;
//加限定符的C++11的枚举不需要转换,直接可以使用(加了关键字class,已经被处理为一个类了)
UPROPERTY(EditAnywhere)
EBirdState SetBirdState2;
}
Day4