UE C++教程之接口 UINTERFACE
我是谁不重要,重要的是,我能做什么。
近期笔者在进行UE的开发时,实现多武器的换弹与开火需要用到接口。而笔者以前是做Unity开发的,遂没有使用过UE C++的UINTERFACE,而这个接口在使用过程中也不是那么想当然,遂决定出(水)一篇博文出来。
C++ Native Interface
我们知道,实际上C++不像C#,他原生是没有接口这个概念的,而C#等高级语言有interface这个类。C++原生的接口实际上是用抽象类实现的。
Unreal Interface
我们知道,实际上UE的反射系统是非常强大的,您在C++中声明的枚举、结构体只需要加一个BlueprintType的宏即可暴露给蓝图。
但UINTERFACE是稍有不同的,接下来我将告诉您怎样去使用它。
首先,创建一个Unreal Interface

`// Fill out your copyright notice in the Description page of Project Settings.
井号pragma once
井号include "CoreMinimal.h"
井号include "UObject/Interface.h"
井号include "WeaponInterface.generated.h"
// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UWeaponInterface : public UInterface
{
GENERATED_BODY()
};
class NEWTUTORIALPROJECT_API IWeaponInterface
{
GENERATED_BODY()
// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
//下方为只有C++可用的接口,不暴露给蓝图,需要在头文件创建inline的默认实现(可为空)
virtual void WeaponFire() override;
virtual void WeaponReload() override;
inline void WeaponFire()
{
}
inline void WeaponReload()
{
}
//
};`
您现在成功创建了只有C++可用的接口,在其他类中如何使用呢?
实际上很简单,例如Actor类,我们在头文件类的声明中public AActor,public IWeaponInterface即可
然后您就可以用IDE实现接口的功能实现它们(不用也ok)
暴露给蓝图的接口
实际上很简单,用前文的WeaponFire举例
UFUNCTION(BlueprintNativeEvent,BlueprintCallable)
void WeaponFire();//这里不是虚函数
我们如果需要在蓝图中使用它,只需要在类设置中实现接口就ok啦。
文章到这里就结束了,笔者目前是发了两篇文章,在写博文这里确实是新手没有什么经验,还请各位多谅解。如果我帮到你的话,还请给我一个关注,我会继续更新更多游戏引擎相关内容的。谢谢各位能看到这里
分享YOASOBI的单曲《祝福 (TV动画《机动战士高达:水星的魔女》主题曲)》: https://y.music.163.com/m/song?id=1983292457&userid=1767475082&dlt=0846 (来自@网易云音乐)
UE C++教程之接口 UINTERFACE的更多相关文章
- CPI教程-异步接口创建及使用
CPI教程-异步接口创建及使用 create by yi 转载请注明出处 先简单介绍一下同步接口和异步接口 什么是同步接口 同步接口的意思就是发送方发送Message后,接口方处理完成后会立刻返回执行 ...
- Java基础教程(17)--接口
就像类一样,接口也是引用类型.它可以包含常量,方法签名,默认方法,静态方法和嵌套类型.在接口中,只有默认方法和静态方法有方法体.但不同于类,接口无法实例化,它只能被类实现或被其他接口继承. 一.定 ...
- Golang教程:接口
什么是接口 在面向对象语言中,接口一般被定义为 :接口定义了一个对象的行为.它仅仅指定了一个对象应该做什么.具体怎么做(实现细节)是由对象决定的. 在 Go 中,一个接口定义为若干方法的签名.当一个类 ...
- MyBatis实例教程--以接口的方式编程
以接口的方式编程: 只需要修改两个地方即可, 1.mapper.xml(实体类)配置文件, 注意mapper的namespace的名字是mapper对象的完整路径名com.xiamen.mapper. ...
- java Vamei快速教程10 接口的继承和抽象类
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在实施接口中,我们利用interface语法,将interface从类定义中独立出 ...
- C#的接口基础教程之六 接口转换
C#中不仅支持.Net 平台,而且支持COM平台.为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性.一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息.属性使 C# 能够支 ...
- DRF教程5-API接口文档和接口测试
配置 配置好,就可以访问web页面 pip install coreapi #安装依赖 from rest_framework.documentation import include_docs_ur ...
- Node教程——API接口开发(MangoDB+Express)
一.大纲 大纲: 关于架构, 首先我们的有一个app.js这个就是根路由起点,用来最初的打入口 它的功能有: 1.1 引入模块创建基础的网站服务器, 1.2 导入bodyPasser,过滤还有处理我们 ...
- Node教程——API接口开发(Node版的CRUD通用接口的搭建)(MangoDB+Express_Version2)
1. 概述 时间跨度有点大,之前就跟大家唠嗑过一些知识点,也开启了一个Node书写一个后台api项目的开始,出于各种原因,迟迟没有更新博文.现在我把这个坑填上,如果你还有阅读过我之前的文章,我建议你先 ...
- 全网最全postman接口测试教程和接口项目实战~从入门到精通!!!
Postman实现接口测试内容大纲一览: 一.什么是接口?为什么需要接口? 接口指的是实体或者软件提供给外界的一种服务. 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改.从而使得内 ...
随机推荐
- CentOS8安装pycharm报错【Can't connect to X11 window server using ':0' as the value of the DISPLAY variable. 】
在CentOS8 安装pycharm报出如下错误,原来是自己画蛇添足的用sudo执行pycharm.sh,没有按照Install说明里边的直接执行 ./pycharm.sh. 原因见这里:https: ...
- tensorflow-gpu安装遇到的坑
tensorflow-gpu安装好导入,一直出现以下错误 折腾了好久. 错误之前也按照中国官网安装及配置各环境变量:https://tensorflow.google.cn/install/gpu 其 ...
- 《Rust权威指南》学习笔记——8.通用集合类型
Rust通用集合类型 动态数组Vec 字符串String 和&str 哈希映射HashMap
- openssl的自签名证书不被信任问题
1.不同的浏览器安全策略不同 1.1谷歌系的会提示没有绑定域名. 此服务器无法证实它就是 192.168.0.127 - 它的安全证书没有指定主题备用名称(Subject Alternative Na ...
- everything 基本功能是本地搜索 高级功能 可以建立 HTTP服务器
局域网,可以查看,播放,等操作
- 一个MySQL双引号把我坑惨了!
一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程,把我坑得够惨. 二.过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新, ...
- ubuntu iptables 做为路由转发
实现功能,本地服务器的号段的192.168.8.0/24,而做为路由器的机器有2个ip,192.168.8.x和另一个ip,而另一个ip可以访问 192.168.2.0/24号段, 为了让其它192. ...
- android studio 导出 release aar
- 2022.11.09 NOIP2022 模拟赛六
科学 Source:CF461C Appleman and a Sheet of Paper,*2200. 注意到对于 \(p\le \lfloor \frac {now}{2}\rfloor\),直 ...
- 记一次SpringBoot整合Redis的Bug
SpringBoot整合Redis遇见的坑 <!--Redis配置开始--> <dependency> <groupId>org.springframework.b ...