• 初学UE5 C++①


    游戏类

    1.创建所需项的类

    2.创建游戏模式类,在该类上实现所需项,引入头文件和构造函数时实例化


    三种时间函数类型函数和提示类型


    FName、FString、FText类型相互转化

     FName用FName

    FString用ToString()

    FText用FText::FromString、FromName

    1. //转化
    2. FString MyString = TEXT("I am String");
    3. FName MyName = FName("I am Name");
    4. FString x = TEXT("I am a FString");
    5. FText MyText = FText::FromString(x);
    6. //FString-》FName
    7. FName fName = FName(*MyString);//将string解引用为字符数组?
    8. //FText->FName
    9. fName = FName(*(MyText.ToString()));
    10. //FName->FString
    11. FString fString = fName.ToString();
    12. //FText->Fstring
    13. fString = MyText.ToString();
    14. //FString-》FText
    15. FText fText = FText::FromString(MyString);
    16. //FName->FText
    17. fText = FText::FromName(MyName);

    数组容器

    	TArray<int>arr;
    1. //增
    2. arr.Add(10);
    3. arr.Add(25);
    4. arr.Add(40);
    5. arr.Add(60);
    6. arr.AddUnique(35);
    7. arr.AddUnique(40);
    8. printArr();
    9. //删
    10. arr.Remove(10);//移除10元素
    11. arr.RemoveSingle(40);//移除第一个40
    12. arr.RemoveAt(1);//移除第一个
    13. arr.Empty();//移除所有元素
    14. arr.Reset();//全部为0
    15. printArr();
    16. //改
    17. arr.Insert(80, 0);//在index处插入,原元素后移
    18. int& b = arr[0];
    19. b = 24;
    20. printArr();
    21. //查
    22. arr.Contains(10);//是否包含
    23. arr.Find(24);//是否包含,是返回index,不是返回-1
    24. arr.FindLast(24);
    1. void ASGameMode::printArr() {
    2. for (auto It= arr.CreateConstIterator();It;It++)
    3. {
    4. UE_LOG(LogTemp,Warning,TEXT("%d"),*It);
    5. GEngine->AddOnScreenDebugMessage(-1, 5.F, FColor::Blue, FString::Printf (TEXT("%d"),*It));
    6. }
    7. }

     

    键值容器

    TMap<int, int>map;
    1. map.Emplace(0, 1);
    2. map.Emplace(1, 3);
    3. map.Emplace(2, 5);
    4. //删
    5. map.Remove(1);//按Key删除
    6. map.Empty();
    7. //查找
    8. map.Contains(2);//按key查找
    9. int* isFind= map.Find(5);//找5,返回指针
    10. const int*isFindKey= map.FindKey(2);//值找键
    11. //获取查找
    12. TArray<int>arrkey;
    13. TArray<int>arrayVal;
    14. map.GenerateKeyArray(arrkey);
    15. map.GenerateValueArray(arrayVal);
    1. void ASGameMode::printmap()
    2. {
    3. for (auto& TestMap:map) {
    4. GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("key:%d,Value:%d"), TestMap.Key,TestMap.Value));
    5. UE_LOG(LogTemp,Display,TEXT("key:%d,Value:%d"), TestMap.Key, TestMap.Value);
    6. }
    7. }

     

    集合容器

    TSetFruitSet;
    1. //增
    2. FruitSet.Add(TEXT("Apple"));
    3. FruitSet.Add(TEXT("Orange"));
    4. FruitSet.Add(TEXT("Banana"));
    5. FruitSet.Emplace("Purple");//比add好,在插入集合时,避免创建临时文件
    6. PrintFruit();
    7. TSet TestSet2;
    8. TestSet2.Emplace(TEXT("aaa"));
    9. TestSet2.Emplace(TEXT("bbb"));
    10. TestSet2.Emplace(TEXT("ccc"));
    11. FruitSet.Append(TestSet2);
    12. PrintFruit();
    13. FruitSet.Remove(TEXT("aaa"));
    14. FruitSet.Reset();
    15. FruitSet.Empty();
    16. PrintFruit();
    17. int32 len=FruitSet.Num();
    18. bool isFind=FruitSet.Contains(TEXT("bbb"));
    19. FString* isFind2=FruitSet.Find(TEXT("ccc"));
    20. TArray FruitArr = FruitSet.Array();
    21. TSetTS2 = { TEXT("a"),TEXT("aa") ,TEXT("aaa") ,TEXT("aaaa") };
    22. //长度排序
    23. TS2.Sort([](FString A, FString B)
    24. {return A.Len() > B.Len(); });
    1. void ASGameMode::PrintFruit()
    2. {
    3. for (auto& TestSet : FruitSet) {
    4. GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s"),* TestSet));
    5. UE_LOG(LogTemp, Display, TEXT("%s"), *TestSet);
    6. }
    7. }

     

    1. TSetMySet;
    2. MySet.Add(TEXT("abc"));
    3. FSetElementId index = MySet.Add(TEXT("bbc"));
    4. MySet[index] = TEXT("abd");
    5. //预留内存
    6. TSet NewSet2;
    7. NewSet2.Reserve(10);
    8. for (int32 i=0;i<10;i++)
    9. {
    10. NewSet2.Add(FString::Printf(TEXT("No:%d"), i));
    11. }
    12. for (int32 i=0;i<10;i+=2)
    13. {
    14. NewSet2.Remove(FSetElementId::FromInteger(i));
    15. }
    16. NewSet2.Shrink();//删除末端空白元素
    17. NewSet2.Compact();//删除空白元素

     

    基本类型打印

    1. int32 myInt = 10;
    2. float myFloat = 5.f;
    3. bool myBool = true;
    4. char myChar = 'c';
    5. FString myString = TEXT("xxx");
    6. FVector myVector = FVector(1,1,1);
    7. UE_LOG(LogTemp,Display,TEXT("%d,%f,%d,%c,%s,%s"), myInt, myFloat, myBool, myChar, *myString, *myVector.ToString());

    UPROPERTY宏

    1. //在哪些地方可见
    2. UPROPERTY(VisibleAnywhere)
    3. int32 Int32_VisibleAnywhere;
    4. UPROPERTY(VisibleDefaultsOnly)
    5. int32 Int32_VisibleDefaultsOnly;
    6. UPROPERTY(VisibleInstanceOnly)
    7. int32 Int32_VisibleInstanceOnly;
    8. //在哪些地方可编辑
    9. UPROPERTY(EditDefaultsOnly)
    10. FVector V3_EditDefaultsOnly;
    11. UPROPERTY(EditAnywhere)
    12. FVector V3_EditAnywhere;
    13. UPROPERTY(EditInstanceOnly)
    14. FVector V3_EditInstanceOnly;
    15. //在蓝图中可get和getset
    16. UPROPERTY(EditAnywhere,BlueprintReadOnly)
    17. int32 int32_EditAnywhere_BlueprintReadOnly;
    18. UPROPERTY(EditAnywhere,BlueprintReadWrite)
    19. int32 int32_EditAnywhere_BlueprintReadWrite;
    20. //目录
    21. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyIntValue")
    22. int32 valueB1;
    23. //子目录
    24. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyIntValue|MySubIntValue")
    25. int32 ValueB2;
    26. //起别名
    27. UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(DisplayName="displayName"))
    28. int32 ValueB3;
    29. //条件控制编辑,上者影响下者是否能修改
    30. UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(DisplayName="Controller"))
    31. bool isController;
    32. UPROPERTY(EditAnywhere,BlueprintReadOnly,meta=(EditCondition="isController"))
    33. float ValueB4;
    34. //变量提示
    35. UPROPERTY(EditAnywhere,BlueprintReadOnly,meta=(ToolTip="isControllerTrue"))
    36. bool isTrue;

    函数

    1. //暴露在蓝图,可调用
    2. UFUNCTION(BlueprintCallable,category="MyFunction")
    3. void PrintF1();
    4. //纯虚函数,仅返回值
    5. UFUNCTION(BlueprintCallable,BlueprintPure,category="MyFunction")
    6. bool PrintF2();
    7. //不能定义(CPP不实现),只能重载
    8. //无返回值的是事件、有返回值的是函数
    9. UFUNCTION(BlueprintImplementableEvent)
    10. void Test1();
    11. UFUNCTION(BlueprintImplementableEvent)
    12. int Test2();
    13. UFUNCTION(BlueprintImplementableEvent)
    14. void Test3(const FString &MyString);
    15. UFUNCTION(BlueprintImplementableEvent)
    16. int Test4(const FString& MyString);
    17. //在C++中声明蓝图重载或不重载
    18. //有连线-用连线的方法(重载),否则用CPP写好的方法(不重载)
    19. UFUNCTION(BlueprintNativeEvent)
    20. void TestA();
    21. UFUNCTION(BlueprintNativeEvent)
    22. int TestB();
    23. UFUNCTION(BlueprintNativeEvent)
    24. void TestC(const FString& MyString);
    25. UFUNCTION(BlueprintNativeEvent)
    26. int TestD(const FString& MyString);
    27. //起别名
    28. UFUNCTION(BlueprintCallable,Category="MyFunction",meta=(Display="MyPrintTest"))
    29. void Printtest();

    重载不重载那个要加_implementation

    1. void AMyPawn::TestA_Implementation()
    2. {
    3. }
    4. void AMyPawn::TestB_Implementation()
    5. {
    6. }
    7. void AMyPawn::TestC_Implementation(const FString& MyString)
    8. {
    9. UE_LOG(LogTemp, Display, TEXT("%s"), *MyString);
    10. }
    11. void AMyPawn::TestD_Implementation(const FString& MyString)
    12. {
    13. }

    枚举 

    位置同UCLASS

    法1

    1. UENUM(BlueprintType)
    2. namespace MyEnumType
    3. {
    4. enum MyCustomEnum
    5. {
    6. type1,
    7. type2,
    8. type3
    9. };
    10. }
    1. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyEnum")
    2. TEnumAsByte MyCustomEnumInst;

     法2

    1. UENUM(BlueprintType)
    2. enum class MyCustomEnum2 :uint8
    3. {
    4. a UMETA(DisplayName="type1"),
    5. b UMETA(DisplayName="type2"),
    6. c UMETA(DisplayName="type3")
    7. };
    1. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyCustomStruct")
    2. MyCustomEnum2 myCustomStruct;

      

     结构体

    1. //命名必须以F开头
    2. USTRUCT(BlueprintType)//作为蓝图类型,可被蓝图调用
    3. struct FMyStruct
    4. {
    5. GENERATED_USTRUCT_BODY()
    6. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyTestStruct")
    7. int32 Health;
    8. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyTestStruct")
    9. FString MyName;
    10. };
    1. //结构体
    2. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyCustomStruct")
    3. FMyStruct myCustomStruct;

     

    其他

    蓝图生成时暴露

    1. //蓝图生成时暴露
    2. UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyExposeOnSpawn",meta=(ExposeOnSpawn="ExposeOnSpawnValue"))
    3. float Health;

  • 相关阅读:
    QMediaPlaylist 类使用教程
    sklearn机器学习——day14
    解决 Cannot read property ‘key‘ of undefined
    2022眼康品牌加盟展,北京视力保健展,中国眼科医学技术峰会
    Vue-Cli详解
    dex文件反编译为jar异常处理
    C语言----结构体
    MQ系列13:消息大量堆积如何为解决
    向量与矩阵范数的详细解读
    『现学现忘』Docker相关概念 — 2、云计算的服务模式
  • 原文地址:https://blog.csdn.net/weixin_56537692/article/details/134359486