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

近期笔者在进行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. 利用pandas+pyecharts制作可视化图表

    # 导入pandas包 import pandas as pd # 从pyecharts下的charts 导入Bar和Timeline功能 from pyecharts.charts import B ...

  2. Unity 获取后缀名

    for(int i = 0;i < files.Length;i++) { if(files[i].Name.EndsWith(".meta")) { continue; } ...

  3. ERROR 1862 (HY000): Your password has expired. To log in you must change it using a .....

    navcat 登录本地失败 https://blog.csdn.net/fenniang16/article/details/81216602?spm=1001.2101.3001.6661.1&am ...

  4. 使用cutlass编译时,需要指定架构和sm

    对于Turing架构,nvcc需要加上选项 -gencode=arch=compute_75,code=sm_75   其他架构类似.

  5. wpf treeview 新增右键菜单

    <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <E ...

  6. ideavimrc 示例

    我自己的idea vim配置,用熟悉了以后还真的挺方便的 比较常用的有 ManageRecentProjects,快速切换多个project,经常会遇到同时打开多个project,来回切换方便多了 H ...

  7. WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截]

    最近在使用的 wsl2 的时候突然发现 wsl2 无法正常联网,即 ping 不通外网以及宿主机的 wsl 网卡.但是将 wsl 版本设置为 1 就可以联网了. 如果你是正常使用的时候,并且自己没有手 ...

  8. Hub

    public class StreamHub : Hub { public ChannelReader<string> ReadLogStream() { var channel = Ch ...

  9. 2. Marker 标记(就是在地图上放上标记)

    1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...

  10. antd DatePicker限制日期的选择

    import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...