ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UE蓝图和CPP通信

2021-02-13 22:03:26  阅读:242  来源: 互联网

标签:Category 蓝图 void float UFUNCTION CPP FName UE


UE蓝图和CPP通信

目录

Blueprint Library

  • 在内容浏览器 Content中 右键创建Function Library 打开后会让填一个函数名。然后打开关卡蓝图。发现可以作为一个函数被调用到。
  • 在C++ Classes中创建C++类,选择Blueprint Function Library 在生成的cpp和h文件中添加一个函数如下。
// .h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "FuncLibTest.generated.h"

/**
 * 
 */
UCLASS()
class UECPP_API UFuncLibTest : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable, Category = "MyTest")
		static void TestPrint();  // 注意这里不写static在蓝图中使用就要多连一个self
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "FuncLibTest.h"

void UFuncLibTest::TestPrint()
{
    if (GEngine)
	{
		GEngine->AddOnScreenDebugMessage(-1, 9.f, FColor::Red, TEXT("Debug"));
	}
}

同理,添加对应的函数参数和返回值。会体现在蓝图参数中

FName FString FText

  • FName不区分大小写,用于快速定位资源是否相同,所以内部维护了哈希值

  • FText比较重,描述文本,可以用于多语言

  • FString最接近 std::string

转换规则

  • FName,FText可以通过 ToString()转FString

  • FString=>FName 通过FName构造函数丢入一个FString实例FName var = FName(*FStringIns)

  • FString=>FText通过 FText::FromString()

  • FName=>FText FText::FromName()

  • TEXT宏主要是为了不乱码。ASCII到 TCHAR

Cpp和蓝图通信

创建Actor的cpp类,然后创建对应蓝图脚本。添加注解可被蓝图使用

  • 暴露变量给蓝图
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
		float TestFloat;
  • 暴露函数给蓝图
	UFUNCTION(BlueprintCallable, Category = "UI")
		void TestFunc();
  • Cpp调用蓝图逻辑通过事件

如下,函数不用实现,在蓝图中实现函数体。Cpp中调用这个函数相当于触发了蓝图的这个Event。实现cpp中调用蓝图逻辑

	UFUNCTION(BlueprintImplementableEvent)
		void TestEvent();
	UFUNCTION(BlueprintNativeEvent)
		void TestNativeEvent();

注意其在对应cpp的实例函数比较特殊

void ATestActor::TestNativeEvent_Implementation()
{

}
  • 不知道取什么标题
	UFUNCTION(BlueprintPure, Category = "UI", meta = (NativeBreakFunc))
		void BreakFunc(const FRandomStream &MyRendom, bool isV);

	UFUNCTION(BlueprintPure, meta = (DisplayName = "HelloW", CompactNodeTitle = "Hello", Keywords = "Hello", CommutativeAssociativeBinaryOperator = "true"), Category = "UI")
		float MyHello(float a, float b);


void ATestActor::BreakFunc(const FRandomStream &MyRendom, bool isV)
{
}

float ATestActor::MyHello(float a, float b)
{
	return a > b ? a : b;
}

  • Make节点
UFUNCTION(BlueprintPure, meta = (Z = "1", NativeMakeFunc), Category = "UI") // Z 是初始值
    FVector TestMakeVector(float x, float y, float z);

FVector ATestActor::TestMakeVector(float x, float y, float z)
{
	FVector v;
	v.X = x;
	v.Y = y;
	v.Z = z;
	return v;
}

  • 枚举到蓝图
UENUM()
namespace MyType 
{
	enum Type 
	{
		Type_1,
		Type_2,
	};
}

UPROPERTY(EditAnywhere, Category = "UI")
    TEnumAsByte<MyType::Type> Var;

标签:Category,蓝图,void,float,UFUNCTION,CPP,FName,UE
来源: https://www.cnblogs.com/Q1143316492/p/14401102.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有