UE4全反射零耦合笔记——蓝图与C++交互

  1. 创建新的C++类
  • 添加到文件Public/GameFrame中:
    FWGameMode
    FWGameInstance
    FWPlayerController
    FWCharacter
  • 添加到文件Public/Common中:
    FWCommon(Object类:公共的类)
  1. 在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()
    };

  2. 创建四个蓝图类(基于第一步中的四个类创建的)
    FWGameMode_BP
    FWGameInstance_BP
    FWPlayerController_BP
    FWCharacter_BP
    修改设置:地图与模式->FWGameInstance_BP

  3. 打开蓝图类FWCharacter_BP,创建变量
    在蓝图中创建四个变量,类型如下:
    在这里插入图片描述

  4. 在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,然后就可以加载资源了。

  1. C++中方法(函数)和蓝图交互
UFUNCTION()
BlueprintCallable				//蓝图可调用且由C++定义
BlueprintImplementableEvent		//C++声明,由蓝图实现
BlueprintNativeEvent			//C++实现,蓝图可覆盖,C++实现的方法需要加后缀_Implementation,但实现的方法不需要声明
Exec							//控制台可调用
meta							//可以限定对象属性

猜你喜欢

转载自blog.csdn.net/qq_41363459/article/details/111466243