我是谁不重要,重要的是,我能做什么。

近期笔者在进行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的更多相关文章

  1. CPI教程-异步接口创建及使用

    CPI教程-异步接口创建及使用 create by yi 转载请注明出处 先简单介绍一下同步接口和异步接口 什么是同步接口 同步接口的意思就是发送方发送Message后,接口方处理完成后会立刻返回执行 ...

  2. Java基础教程(17)--接口

      就像类一样,接口也是引用类型.它可以包含常量,方法签名,默认方法,静态方法和嵌套类型.在接口中,只有默认方法和静态方法有方法体.但不同于类,接口无法实例化,它只能被类实现或被其他接口继承. 一.定 ...

  3. Golang教程:接口

    什么是接口 在面向对象语言中,接口一般被定义为 :接口定义了一个对象的行为.它仅仅指定了一个对象应该做什么.具体怎么做(实现细节)是由对象决定的. 在 Go 中,一个接口定义为若干方法的签名.当一个类 ...

  4. MyBatis实例教程--以接口的方式编程

    以接口的方式编程: 只需要修改两个地方即可, 1.mapper.xml(实体类)配置文件, 注意mapper的namespace的名字是mapper对象的完整路径名com.xiamen.mapper. ...

  5. java Vamei快速教程10 接口的继承和抽象类

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在实施接口中,我们利用interface语法,将interface从类定义中独立出 ...

  6. C#的接口基础教程之六 接口转换

    C#中不仅支持.Net 平台,而且支持COM平台.为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性.一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息.属性使 C# 能够支 ...

  7. DRF教程5-API接口文档和接口测试

    配置 配置好,就可以访问web页面 pip install coreapi #安装依赖 from rest_framework.documentation import include_docs_ur ...

  8. Node教程——API接口开发(MangoDB+Express)

    一.大纲 大纲: 关于架构, 首先我们的有一个app.js这个就是根路由起点,用来最初的打入口 它的功能有: 1.1 引入模块创建基础的网站服务器, 1.2 导入bodyPasser,过滤还有处理我们 ...

  9. Node教程——API接口开发(Node版的CRUD通用接口的搭建)(MangoDB+Express_Version2)

    1. 概述 时间跨度有点大,之前就跟大家唠嗑过一些知识点,也开启了一个Node书写一个后台api项目的开始,出于各种原因,迟迟没有更新博文.现在我把这个坑填上,如果你还有阅读过我之前的文章,我建议你先 ...

  10. 全网最全postman接口测试教程和接口项目实战~从入门到精通!!!

    Postman实现接口测试内容大纲一览: ​ 一.什么是接口?为什么需要接口? ​ 接口指的是实体或者软件提供给外界的一种服务. 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改.从而使得内 ...

随机推荐

  1. Springboot打包部署的步骤

    1.配置pom.xml 引入插件 <groupId>com.bostech</groupId> <artifactId>dcs</artifactId> ...

  2. 字符串类型如何格式化保留小数点后两位【ToString("0.00")】

    废话都不想写了,直接上图 遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法 也就是 str.ToString(& ...

  3. EMQX 在 Kubernetes 中如何进行优雅升级

    背景 为了降低 EMQX 在 Kubernetes 上的部署.运维成本,我们将一些日常运维能力进行总结.抽象并整合到代码中,以 EMQX Kubernetes Operator 的方式帮助用户实现 E ...

  4. Jenkins拉取GitHub上代码

    1.github 生成 Personal Access Token 2.github 设置 GitHub webhooks (具体需要持续集成的项目),新建或者设置现有项目的 webhooks 选项, ...

  5. easyui subGrid实现

    $(function(){ $('#dg').datagrid({ view: detailview, detailFormatter:function(index,row){ return '< ...

  6. CAD坐标显示不全怎么办?CAD坐标常见问题解答!

    今天小编来和大家聊一下浩辰CAD看图王中关于CAD坐标的那些事,比如:CAD坐标为何显示不全?CAD坐标显示结果和之前不一样?以及不能精准捕捉CAD坐标等情况,应该如何轻松解决?今天就和小编一起来了解 ...

  7. Visual Studio 2022(VS2022) 产品密钥

    Visual Studio 2022(VS2022) 激活码: Pro: TD244-P4NB7-YQ6XK-Y8MMM-YWV2JEnterprise: VHF9H-NXBBB-638P6-6JHC ...

  8. Oracle 存储过程4:PL/SQL动态执行DDL语句

  9. Java实现输出三角形

    本来是想实现空心的,想了太久没写出来就算了 代码 package com.qaq.strruct;public class TestDemo01 { //打印三角形 //思路:空格的距离和星星的数量成 ...

  10. 【翻译】了解Flink-概览 -- Learn Flink-Overview

    了解Flink: 上手手册 目录 手册目标和范围 流处理 并行数据流 及时的流处理 有状态流处理 通过状态快照进行容错 翻译来源 Learn Flink:Overview , Learn Flink: ...