首页 > 编程语言 >UE C++教程之接口 UINTERFACE

UE C++教程之接口 UINTERFACE

时间:2022-10-02 06:44:05浏览次数:75  
标签:UINTERFACE void 接口 C++ UE class

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

近期笔者在进行UE的开发时,实现多武器的换弹与开火需要用到接口。而笔者以前是做Unity开发的,遂没有使用过UE C++的UINTERFACE,而这个接口在使用过程中也不是那么想当然,遂决定出(水)一篇博文出来。

C++ Natives 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 (来自@网易云音乐)

标签:UINTERFACE,void,接口,C++,UE,class
From: https://www.cnblogs.com/YOASOBIComp/p/16748203.html

相关文章

  • Ue4_通用化交互组件设计(待续)
    简述需求:在游戏场景中,碰到可交互物品,显示不同的Widget(提示不同的文字提示),碰到物品时显示,远离有效距离关闭显示,并按某一个按键触发该item交互,默认F常规解决方案:一ItemT......
  • C++实现二分法求零点
    ​ 目录 前言题目:一、零点是什么?二、二分法求零点1.二分法2.完整代码总结 前言首先,我们要清楚我们是干嘛的;其次,知道原理;最后,才能明白自己要怎么办。明确:......
  • c++ vector
    创建vectorvector的几个别名:向量、动态数组头文件:#include<vector>记得加上std命名空间,不然会报错usingnamespacestd;创建vectorvector<int>A;//一维动态数组......
  • C++智能指针
    C++智能指针需要头文件<memory>不需要手动释放指针不是所有指针都能封装成智能指针,很多时候原始指针更加方便。std::unique_ptr任何时刻都只能有一个指针管理内存......
  • C++ 编程中常用的英文单词(首字母是A、B、C开头)
    学习编程不一定需要英语水平很高,能记住认识一些常用的英文单词也可以,有看不明白的文档资料也可以使用翻译工具,编写代码时大部分好用的IDE都是有代码提示的。本文主要介绍C+......
  • C++ 编程中常用的英文单词(首字母是D、E、F开头)
    学习编程不一定需要英语水平很高,能记住认识一些常用的英文单词也可以,有看不明白的文档资料也可以使用翻译工具,编写代码时大部分好用的IDE都是有代码提示的。本文主要介绍C+......
  • 对c++的一些思考
    能用初始化列表就用能写explicit就写能用c++11自带的跨平台函数、对象就用、但也要分情况,如果想完全知道自己在干什么就用系统API能自己写的就不要让编译器......
  • 谷歌浏览器安装vue-devtools插件
    1、访问github地址:https://github.com/vuejs/devtools下载安装包(zip)2、进入到解压后的devtools-add-remote-devtools包中,在文件夹路径中打开cmd窗口,执行npmi(如果慢的话可......
  • C++ 彩票器
    #include<iostream>#include<ctime>#include<cstdlib>usingnamespacestd;intmain(intargc,char**argv){//1.获取一下你买的彩票号码intnumber=0;......
  • vue项目的优化
    vue项目的优化​​代码层面的优化​​​​vue代码层面的优化​​​​Webpack层面的优化​​​​基础的Web技术优化​​代码层面的优化vue项目的优化分为三部分:Vue代码层......