跳至主要內容

c5.Interface|接口

Mr.Si大约 1 分钟u++

头像
UEC++中怎么写接口?
头像
你指的是接口类吧!
头像
是的,我知道多态虚函数本身也是接口,我想知道UE中有没有什么特殊的地方。
    class IMyInterface
    {
        virtual void MyMethod() = 0;
    };

    // 实现接口的类
    class MyClass : public IMyInterface
    {
        virtual void MyMethod() override
        {
            // 实现接口方法的具体逻辑
        }
    };
头像
安排!

简单实践

  1. 继承UInterface

声明接口类与声明普通的虚幻类相似,但仍有几个区别。
1.接口类使用UINTERFACE宏而不是UCLASS宏.
2.继承自"UInterface"而不是"UObject"。
3.依然可以使用传统虚函数方法定义接口。

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "MyInterface.generated.h"

UINTERFACE(MinimalAPI)
class UMyInterface : public UInterface//继承自UInterface
{
	GENERATED_BODY()
};

class MYPROJECT_API IMyInterface//使用时继承这个即可。
{
	GENERATED_BODY()
public:

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "CameraInterface")
	void  IChangeCamera (int32 CameraID,float CameraSwitchTime) ;

};
  1. 调用方继承刚刚定义的接口类后用虚函数重写即可。
MyClass.h
#pragma once
#include "CoreMinimal.h"
#include "MyInterface.h"
#include "MyClass.generated.h"

// 声明类并实现接口
UCLASS()
class MYPROJECT_API UMyClass : public UObject, public IMyInterface
{
    GENERATED_BODY()

public:
    virtual void IChangeCamera_Implementation() override;//重写虚函数。
};

2024/2/28

  1. 其他类中调用

①. 普通调用

Interface->ISetLockVisibility(FocusActor,IsFocus);

②. BlueprintNativeEvent

IMenuInterface* Interface = Cast<IMenuInterface>(FocusActor);
if (Interface)
{
    Interface->Execute_ISetLockVisibility(FocusActor,IsFocus);
}
if (Actor->Implements<UHighlightInterface>())
{
    IHighlightInterface::Execute_UnHighlightActor(Actor);
}

参考链接

官方文档open in new window