UE4 C++编程常用知识点总结

1,给角色添加组件:
      UCameraComponent* Camera = CreateDefaultSubobject< UCameraComponent >( TEXT ( "Camera0" ));
2,字符串组合(蓝图中组合字符串):
   BuildString, string +int/float/Object/vector2/boolean……+ string
3.将属性公开到编辑器(UE4 Doc)
  UPROPERTY(EditAnyWhere,BlueprintReadWrite,Category="Damage")
  UPROPERTY(BlueprintReadOnly,VisibleAnywhere,Transient,Category="Damage")
  VisibleAnywhere标记意为在编辑器中可见,但不能进行编辑
  Transient意为无法从硬盘保存或加载,它应该为派生的非持久值
  用于编辑器属性值的状态更新:
  PostInitProperties()函数
  #if WITH_EDITOR
  PostEditChangeProperty(FPropertyChangeEvent& PropertyChangedEvent)
  {
  }
  #endif
  UE4中蓝图中显示C++函数:
  UFUNCTION(BlueprintCallable,Category="Damage")
  C++/蓝图混合实现同一种函数:
  UFUNCTION(BlueprintNativeEvent,Category="Damage")
  void CalledFromCpp();
  CalledFromCpp_Implementation()
  {
  }
  当你创建的类不是继承自Actor时,要找到你创建的UCLASS,你必须关掉Class Viewer中的过滤器中的Actors Only(默认的情况下是被检测的,也就是说会过滤掉非继承自Actor的自定义UCLASS)。--摘选自Cookbook
  用FStringAssetReferences 和 StaticLoadObject加载资源也是一种选择方式
  可以通过全局函数ConstructObject<> 或者NewObject<>来创建继承自UObject的类
  UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=UClassNames)
  TSubclassOf<UUserProfile> UPBlueprintClassName;
  ObjectType* object = ConstructObject<ObjectType>(UClassReference);
  例如:
  AChapterGameMode *gm = Cast<AChapterGameMode>(GetWorld()->GetAuthGameMode());
  if(gm)
  {
     UUserProfile* object = ConstructObject<UUSerProfile>(gm->UPBlueprintClassName);
  }
  //NewObject用法
  UProfile* object = NewObject<UProfile>(GetTransientPackage(),uclassReference);
  删除一个非使用的UObject:
   objectInstance->ConditionalBeginDestroy();
   强制GC进行资源回收的方式:
   GetWorld()->ForceGarbageCollection(true)
   结构体的写法:
   #pragma once
   #include "Chapter2.h"
   #include "ColoredTexture.generated.h"
  USTRUCT()
  struct CHAPTER2_API FColoredTexture
  {
  GENERATED_USTRUCT_BODY()
  public:
  UPROPERTY( EditAnywhere, BlueprintReadWrite, Category =
  HUD )
 UTexture* Texture;
 UPROPERTY( EditAnywhere, BlueprintReadWrite, Category =
  HUD )
  FLinearColor Color;
  }
  枚举的写法:
 
UENUM()
enum Status
{
Stopped UMETA(DisplayName = "Stopped"),
Moving UMETA(DisplayName = "Moving"),
Attacking UMETA(DisplayName = "Attacking"),
};
使用方法:
 UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=Status)
TEnumAsByte<Status> status;
继承自Actor的类使用NewObject<>和SpawnActor<>方式进行实例化,例如:
UAction* action = NewObject<UAction>(GetTranientPackage(),UAction::StaticClass());
UObject类的回收(你也可以通过设置引用计数为0的方式来达到释放的目的):
UObject *o  = NewObject<UObject>(……);
o->ConditionalBeginDestory();
或者通过:
GetWorld->ForceGarbageCollection(true);
的方式也可以达到同样的目的。
UObject和它的派生类(创建的任何东西NewObject或ConstructObject)不能使用TSharedPtr!
TSharedPtr,TSharedRef,TWeakPtr,TAutoPtr基本使用方法:
class MyClass{}
TSharedPtr<MyClass> sharedPtr(new MyClass());
weak pointers 与 shared pointers之间有一些不同,弱指针没有能力保留对象的内存当引用计数到0时
弱指针的好处是它回收内存后,指针的引用会变成NULL,可以通过检测弱指针是否可用来进一步处理:
if(ptr.IsValid())
{
}
那些继承自UObjects的类不能使用TSharedRef
TScopedPointer<AWarrior>warrior(this);
TScopedPointer在作用域内避免被销毁的指针类型,也是通过引用计数的方式来进行管理的

生成继承自Actor的对象,例:
SpawnActor = GetWorld()->SpawnActor<AChapter04Actor>(AChapter04Actor::StaticClass(),SpawnLocation);
定时器的基本使用方法:
FTimerHandle Timer;
GetWorldTimerManager().SetTimer(Timer,this,&AUE4GameMode::DestroyActorFunction,10);
设置对象的生命周期可以对Actor进行销毁控制:
SetLifeSpan(10);
初始化物体组件:
auto MeshAsset = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("Static Mesh'/Engine/BasicShapes/Cube.Cube'"));
if(MeshAsset.Object!=nullptr)
{
Mesh->SetStaticMesh(MeshAsset.Object);
}
需要在头文件中加入:
#include “ConstructorHelpers.h”

Debug信息到屏幕上:
GEngine->AddOnScreenDebugMessage(-1, 1, FColor::Red,
FString::Printf(TEXT("%s left me"), *(OtherActor-
>GetName())));

1、委托写法(无参):
DECLARE_DELEGATE(FStandardDelegateSignature)

定义成员:
FStand
  • 5
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值