BlueprintNativeEvent

上一章虚幻引擎接口中 用到了这三种函数
这章节进行详细解释

被BlueprintNativeEvent和BlueprintImplementableEvent修饰的函数被称为蓝图可实现函数
即可以在蓝图中实现
不过函数若想在蓝图中调用 还要加上BlueprintCallable

virtual void Say1() const = 0;

//UFUNCTION(BlueprintCallable,BlueprintNativeEvent)
//void Say2();
    
//UFUNCTION(BlueprintCallable,BlueprintImplementableEvent)
//void Say3();
1.纯虚函数

virtual void Say1() const = 0;
c++原生的纯虚函数 要求函数必须在子类c++中实现
带有纯虚函数的类不能实例化

2.BlueprintImplementableEvent

表示必须在蓝图中实现 c++中不能实现
但是 蓝图实现的函数可以在c++中调用 (获得对象的指针/引用)
相当于蓝图版的纯虚函数

左侧面板中找到函数 点击之后实现函数

找到函数say

实现函数

3.BlueprintNativeEvent

必须在c++中默认实现 在蓝图中实现会覆盖c++中的实现
相当于蓝图版的虚函数 并且带有默认的c++实现

UFUNCTION(BlueprintNativeEvent,BlueprintCallable)
void Say2();

我们在c++中需要实现的不是Say2() 而是 Say2_Implementation();

void AMyActor::Say2_Implementation()
{
	UE_Log(LogTemp, Warning, TEXT(" c++ 实现 "))
}

注意不要实现Say2() 否则会导致错误

当调用Say2() 时 会根据有没有在蓝图覆盖 调用不同的版本
如果在蓝图中覆盖 那么就会执行蓝图的实现
如果在蓝图中未覆盖 那么就会调用c++中的实现

也可以使用Say2_Implementation() 强制调用c++中的实现

还可以在蓝图中调用父类实现 将蓝图和c++的实现一起调用
调用父类实现

原理:
当使用BlueprintNativeEvent修饰函数时
UHT会自动创建一个 函数名_Implementation的函数
同时 自动实现Say2()函数

.h
UFUNCTION(BlueprintNativeEvent,BlueprintCallable)
void Say2();

//引擎自动生成
virtual void Say2_Implementation() ;

.cpp
//引擎自动生成
void AMyActor::Say2()
{
	if (/* 检查蓝图是否覆盖了该方法 */) 
	{ 
		// 调用蓝图实现 
		BlueprintImplementableEvent<UMyActor::Say2>(); 
	} else { 
		// 调用 C++ 默认实现 
		Say2_Implementation(); 
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值