c5.Interface|接口
大约 1 分钟
class IMyInterface
{
virtual void MyMethod() = 0;
};
// 实现接口的类
class MyClass : public IMyInterface
{
virtual void MyMethod() override
{
// 实现接口方法的具体逻辑
}
};
简单实践
- 继承
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) ;
};
- 调用方继承刚刚定义的接口类后用虚函数重写即可。
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;//重写虚函数。
};
MyClass.cpp
#include "MyClass.h"
void UMyClass::MyMethod_Implementation()
{
// 实现接口方法的具体逻辑
}
2024/2/28
- 其他类中调用
①. 普通调用
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);
}