• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
YOASOBIComp
博客园    首页    新随笔    联系   管理    订阅  订阅
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 (来自@网易云音乐)

posted on 2022-10-02 06:28  UYOASOBIComponent  阅读(865)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3