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