[7] UE C++ 拓展知识 UPROPERIY();UFUNCTION():制作节点.....

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

posted @ 2024-04-03 21:23  啊賢  阅读(27)  评论(0编辑  收藏  举报