UE4 C++:Interface接口
这部分官方文档写的很明白,建议直接去看官方文档:
虚幻引擎中的接口 | 虚幻引擎5.0文档 (unrealengine.com)
概述:
- 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法可以有不同的具体实现
- 任何使用接口的类都必须实现这些接口
- 实现解耦
- 解决多继承的问题
C++使用接口
定义接口
声明蓝图可调用接口函数
- 用UFUNCTION宏BlueprintCallable声明蓝图可调用,还必须使用BlueprintImplementableEvent或BluepeintNativeEvent说明,而且函数不能为虚函数
- 通过声明virtual虚函数,是的派生类可重载
代码
ReactToTriggerInterface.h
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "ReactToTriggerInterface.generated.h"// 无需更改
// UINTERFACE类不是实际的接口;它是一个空白类,它的存在只是为了向虚幻引擎反射系统确保可见性。
UINTERFACE(MinimalAPI)
class UReactToTriggerInterface : public UInterface
{GENERATED_BODY()
};//开头字母"U"必须改为"I"。
class TIPS_API IReactToTriggerInterface
{GENERATED_BODY()public:// 纯虚函数,实现类必须实现接口virtual void ReactToTrigger_PureVirtual() = 0;// 虚函数,在接口本身的 .h 或 .cpp 文件中提供默认实现.实现类可覆盖virtual void ReactToTrigger_Virtual();//实现类可以在蓝图和C++中实现接口UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="Trigger Reaction")void ReactToTrigger_NativeEvent1(int32 number);//实现类可以在蓝图和C++中实现接口UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Trigger Reaction")bool ReactToTrigger_NativeEvent2(int32 number);//实现类在蓝图中实现接口UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, Category = "Trigger Reaction")void ReactToTrigger_ImplementableEvent();
};
ReactToTriggerInterface.cpp
#include "ReactToTriggerInterface.h"
void IReactToTriggerInterface::ReactToTrigger_Virtual()
{// unimplemented(); //该宏将在执行代码行时发出调试语句, 中断UE_LOG(LogTemp, Warning, TEXT("ReactToTrigger_Virtual 被调用, From 接口本身"));
}
实现接口
MyDrone.h
#include "ReactToTriggerInterface.h"
#include "MyDrone.generated.h"UCLASS()
class TIPS_API AMyDrone : public ADrone, public IReactToTriggerInterface
{GENERATED_BODY()public:virtual void ReactToTrigger_PureVirtual() override;//可蓝图调用,貌似通用写法UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Trigger Reaction")void ReactToTrigger_NativeEvent1(int32 number);virtual void ReactToTrigger_NativeEvent1_Implementation(int32 number) override;//蓝图可调用,,貌似和上面没区别virtual bool ReactToTrigger_NativeEvent2_Implementation(int32 number) override;//void ReactToTrigger_ImplementableEvent();需要在蓝图实现
};
MyDrone.cpp
#include "MyDrone.h"void AMyDrone::ReactToTrigger_PureVirtual()
{UE_LOG(LogTemp, Warning, TEXT("ReactToTrigger_PureVirtual 被调用, From MyDrone"));
}void AMyDrone::ReactToTrigger_NativeEvent1_Implementation(int32 number)
{UE_LOG(LogTemp, Warning, TEXT("ReactToTrigger_NativeEvent1 被调用, From MyDrone"));
}bool AMyDrone::ReactToTrigger_NativeEvent2_Implementation(int32 number)
{UE_LOG(LogTemp, Warning, TEXT("ReactToTrigger_NativeEvent2 被调用, From MyDrone"));return true;
}
虚幻引擎中的接口 | 虚幻引擎5.0文档 (unrealengine.com)
UE4 C++:Interface接口相关推荐
- interface接口_golang 基础(Four) 接口进阶
参考 Understanding Go Interface 感谢 francesc 分享 接口 我们编程中少不了对接口使用和设计,无论你是使用哪种语言或多或少都会使用到**接口**.即使你说明重来没有 ...
- 【C# interface接口】模拟MP3/AVI播放器
注意:本程序仅模拟播放器功能,点击按钮时只会输出一句话,并未真正实现播放. 对接口的理解,见我的另一篇博客,里面有详细说明:[C# interface接口]对接口的理解.接口的使用方式(最通俗的解释) ...
- PHP interface 接口继承(一丶单接口继承)
接口可以认为是规范类的模板,具体怎么运行操作还是需要看继承的子类怎么写,具体需要注意的的地方与写法如下所示: interface 接口中的方法必须为 public 公开的: <?php inte ...
- Interface接口自动化登录图文验证码问题的解决办法
简介:我这段时间新进了一家医疗公司,为了测试的质量和效率能提升,我们需要做接口自动化测试,碰到的第一个拦路虎就是登录时的验证码,本来我是叫开发帮忙在测试环境去掉,线上环境再加上,但是开发觉得麻烦,说为 ...
- Golang interface 接口详细原理和使用技巧
文章目录 Golang interface 接口详细原理和使用技巧 一.Go interface 介绍 interface 在 Go 中的重要性说明 interface 的特性 interface 接 ...
- Java面向对象之interface接口
文章目录 (1)基本概念 (2)语法格式 (3)基本原则 (4)注意事项 (5)案例 (6)JDK内置的两大接口 (7)抽象类和接口的区别 提示:以下是本篇文章正文内容,Java系列学习将会持续更新 ...
- 12、Interface (接口)克隆
文章目录 (一)Interface Note 1.概念 2.基本语法 声明接口 继承接口 实现接口 3.特点 4.抽象类与接口的区别 共同点 区别 选择 5.克隆 附:抽象类 PK 接口 (二)Int ...
- Go语言-Go interface 接口的最佳实践
文章目录 Go语言-Go 接口的最佳实践 什么是Golang中的interface 编写接口的最佳实践 1. 保持interfaces足够小 2. Interfaces Should Have No ...
- abstract(抽象类)与interface(接口)的区别
文章目录 前言 一.abstract(抽象类) 1.用abstract关键字修饰方法 1.用abstract关键字修饰类 二.interface(接口) 总结 前言 abstract(抽象类)与int ...
- abstract类与interface接口的区别
abstract类与interface接口的区别: abstract类:在一个类中的方法被abstract关键字修饰并且这个方法没有方法体,则这个类也必须使用abstract关键字修饰则这个类 ...
最新文章
- 2月书讯 | 冬奥结束看什么?看看“天花板”级别新作!
- SQL 2005 数据库镜像
- MySQL(二)数据的检索和过滤
- java web 静态_「Java Web」主页静态化的实现
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 14丨报告的记录 I【难度简单】
- 今年第一个项目来说NET的中间语言
- Linux C解析命令行参数代码
- Python中的Monkey Patch(猴子补丁)
- VB6 中将数据导出到 Excel 提速之法
- LinkedHashMap 底层分析
- SpringBoot使用thymefeal出现No mapping for GET /xxx的解决办法
- Visual Basic 6.0(VB6.0)最详细安装教程
- 华为机顶盒E6108 V9-V9U-V92-V97免拆机-刷机固件及教程
- php 显示探针_PHP探针
- centos7 下载软件包
- 如何在Google Play 当中使用ASO?google play aso
- 解决:当笔记本连接WIFi,电脑可以打开QQ等,但是不能打开网页,显示DNS错误
- mysql外键级联操作_Mysql 外键级联
- 正确认识智能视频分析技术
- 实时计算 java基础:类的结构之五:内部类
热门文章
- 抓linux肉鸡漏洞,利用MS08067远程溢出漏洞抓肉鸡(3)
- (三)云计算技术学习--OpenStack之KeyStone
- 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
- Diffusion扩散模型简述 + 代码demo
- 网页游戏脱机脚本制作视频教程
- ttc文件linux安装,Linux当中如何安装字体?
- 啦啦外卖独立版41.4+全插件+可运营版本+开源(亲测100%可用)
- 函数项数列以及函数项级数收敛判别
- SIMULATE ANNEAL
- MFC入门之 Ribbon界面设计