- 创建新的C++类
- 添加到文件Public/GameFrame中:
FWGameMode
FWGameInstance
FWPlayerController
FWCharacter - 添加到文件Public/Common中:
FWCommon(Object类:公共的类)
-
在FWCommon中添加Debug函数
FWCommon.h
#pragma once
#include “CoreMinimal.h”
#include “UObject/NoExportTypes.h”
#include “Engine/GameEngine.h”
#include “FWCommon.generated.h”
namespace FWHelper
{
FORCEINLINE void debug(FString Message,float Duration)
{
if (GEngine)
GEngine->AddOnScreenDebugMessage(-1, Duration, FColor::Yellow,Message);
}
}
UCLASS()
class FRAMECOURSE_API UFWCommon : public UObject
{
GENERATED_BODY()
}; -
创建四个蓝图类(基于第一步中的四个类创建的)
FWGameMode_BP
FWGameInstance_BP
FWPlayerController_BP
FWCharacter_BP
修改设置:地图与模式->FWGameInstance_BP -
打开蓝图类FWCharacter_BP,创建变量
在蓝图中创建四个变量,类型如下:
-
在FWCharacter.h中添加如下代码,创建不同的变量
public:
//硬引用,已经加载到内存里面的
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
AActor* CAOne;// 场景中实际存在的对象指针
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
TSubclassOf<AActor> CATwo;//对象的类的类型, 允许使用类型安全传递UClass的模板
//软引用,加载的时候不在内存中,就是需要的时候才加载进来
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
TSoftObjectPtr<AActor> CAThree;//对象的软引用,需要的时候再加载
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
TSoftClassPtr<AActor> CAFour;//对象的类的类型的软引用,需要的时候再加载
//资源引用
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
TAssetPtr<AActor> CAFive;//资源引用,是对FStringAssetReference的封装,包含对象路径与对象弱指针
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Framework")
FStringAssetReference CASix;//资源路径的引用, 不用区分类型
UPROPERTY(EditAnywhere, BlueprintReadWrite,meta=(MateClass="AActor"), Category = "Framework")
FStringAssetReference CASeven;//资源路径的引用, 加了mate=(MateClass="AActor"),功能和CAFive差不多
//CAFive只能引用基于AActor的资源,而CASix可以引用所有类型的资源
//使用meta可以设置变量的属性,CASeven只能引用AActor类型的资源
下面是蓝图和C++中创建好的变量:
注:现在select asset是没有任何资源的,需要先在场景中放一些对象。
我们在场景中放置FWCharacter_BP,然后就可以加载资源了。
- C++中方法(函数)和蓝图交互
UFUNCTION()
BlueprintCallable //蓝图可调用且由C++定义
BlueprintImplementableEvent //C++声明,由蓝图实现
BlueprintNativeEvent //C++实现,蓝图可覆盖,C++实现的方法需要加后缀_Implementation,但实现的方法不需要声明
Exec //控制台可调用
meta //可以限定对象属性