我是谁不重要,重要的是,我能做什么。
近期笔者在进行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