UE5 C++(十四)— Interface的使用

这篇具有很好参考价值的文章主要介绍了UE5 C++(十四)— Interface的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口(Interface)介绍

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

用c++实现接口类时需要注意一下几点:

  1. 接口类中不可以声明成员变量,静态变量。
  2. 可以声明静态常量作为接口的返回值状态,需要在对应的cpp中定义并初始化,访问时需要使用"接口类型::静态常量名"访问
  3. 定义的接口方法使用virtual 修饰符 和 “=0” 修饰,表示该方法是纯虚的。
  4. 因为接口类是无法创建对象的,所以不应该编写构造函数和析构函数

接口在C++中的应用

主要实现小鸟:==> 出生 ==> 飞行 ==> 活动区域 ==> 死亡 这个过程

实现-接口类-飞行动作
IAction.h

#ifndef IACTION_H
#define IACTION_H
//接口类 表示飞行动作
class IAction
{
public:
    virtual void fly() = 0;
};

#endif // IACTION_H

实现-接口类-活动区域
IShape.h

#ifndef ISHAPE_H
#define ISHAPE_H

// 接口类 表示活动区域
class IShape
{
public:
    virtual int area() = 0;
    static const int MIN_AREA;
};

#endif // ISHAPE_H

IShape.cpp

#include "IShape.h"
 
const int IShape::MIN_AREA = 0;

实现-小鸟实体类
Bird.h

// 这是一种防止多次包含头文件的预处理器技术
#ifndef BIRD_H
#define BIRD_H

#include "IAction.h"
#include "IShape.h"

class Bird : public IShape, public IAction
{
public:
    Bird();
    ~Bird();

    // IAction interface
public:
    void fly() override;

    // IShape interface
public:
    int area() override;
};

#endif // BIRD_H

Bird.cpp

#include "Bird.h"
#include <iostream>

Bird::Bird()
{
    std::cout << "initialize : The bird is born. " << std::endl;
}

Bird::~Bird()
{
    std::cout << "dispose : The bird is die." << std::endl;
}

void Bird::fly()
{
    std::cout << "execute : The bird is flying. " << std::endl;
}

int Bird::area()
{
    std::cout << "activity area : " << IShape::MIN_AREA << std::endl;
    return 0;
}

创建程序入口
main.cpp

#include "Bird.h"

int main()
{
    Bird *bird = new Bird();
    bird->fly();
    bird->area();
    delete bird;
    return 0;
}

目录
UE5 C++(十四)— Interface的使用,UE5 C++ 入门开发,c++,ue5,开发语言
编译C++ 文件,我这里使用是g++编译脚本,指定生成 main.exe运行文件

PS D:\Project\C++\Temp\Cppinterface> g++ main.cpp Bird.cpp IShape.cpp -o main.exe

然后执行运行文件

PS D:\Project\C++\Temp\Cppinterface> ./main.exe

打印结果

initialize : The bird is born. 
execute : The bird is flying.
activity area : 0
dispose : The bird is die.

接口在UE中的使用

这里有官方文档可以参考

创建C++ 接口
UE5 C++(十四)— Interface的使用,UE5 C++ 入门开发,c++,ue5,开发语言
创建接口,在接口中实现两个虚函数

	virtual void Attack(){};
	virtual void CaclulateHealth(){};

MyInterface.h

#pragma once

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

// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UMyInterface : public UInterface
{
	GENERATED_BODY()
};

/**
 *
 */
class DEMO_API IMyInterface
{
	GENERATED_BODY()

	// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
	virtual void Attack(){};
	virtual void CaclulateHealth(){};
};

编译后,在MyCharacter.h 继承自接口

#include "MyInterface.h"
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"

UCLASS()
class DEMO_API AMyCharacter : public ACharacter, public IMyInterface
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AMyCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent *PlayerInputComponent) override;
	
	// 重写接口函数
	virtual void Attack() override;
	virtual void CaclulateHealth() override;
};

在MyCharacter.cpp 实现接口

// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();
	// 执行接口
	Attack();
	CaclulateHealth();
}
// 重写接口函数
void AMyCharacter::Attack()
{
	UE_LOG(LogTemp, Warning, TEXT("Attack"));
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Attack"));
}
void AMyCharacter::CaclulateHealth()
{
	UE_LOG(LogTemp, Warning, TEXT("CaclulateHealth"));
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("CaclulateHealth"));
}

编译后,运行打印结果
UE5 C++(十四)— Interface的使用,UE5 C++ 入门开发,c++,ue5,开发语言文章来源地址https://www.toymoban.com/news/detail-799038.html

到了这里,关于UE5 C++(十四)— Interface的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

    本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P16 会话接口委托(Session Interface Delegates)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。 本节课我们将向新创建的子系统添

    2024年02月20日
    浏览(51)
  • UE5使用Advanced-VR-Framework开发VR介绍

    插件地址:https://www.unrealengine.com/marketplace/zh-CN/product/advanced-vr-framework UE5在三维的表现力上非常优秀;有基于Twinmotion等三维工具支持,制作流程上比较顺畅;UE5场景素材也非常多且优质,VR技术框架也齐全。所以,UE5非常适合开发VR。 Advanced-VR-Framework VR Expansion Plugin : https://

    2024年02月12日
    浏览(41)
  • Ue5 C++ metahuman

    参考官网: 创建MetaHuman | Epic Developer Community (epicgames.com) 参考: Quixel Bridge中的MetaHuman | Epic Developer Community (epicgames.com) 参考:导出到虚幻引擎5 | Epic Developer Community (epicgames.com) 参考:在Sequencer中使用MetaHuman | Epic Developer Community (epicgames.com) 待补充

    2024年02月10日
    浏览(51)
  • UE5 C++(十七)— 射线检测

    射线检测简单来说就是通过相机发射一条射线,用来检测对象的一种检测机制。 官网介绍:使用射线进行命中判定 这里主要介绍4种常用的射线检测方式。 关键API: LineTraceSingleByChannel 声明变量 MyCharacter.h 在Tick中实现通道进行射线检测 MyCharacter.cpp 编译 之后,在场景中添加

    2024年01月18日
    浏览(94)
  • UE5 C++ UObject实例化

    一.创建UObject C++类  在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面,先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf  是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类,允许设计者指定伤害类型。您可只创建一个 UClass 类型的 UPROPER

    2024年02月21日
    浏览(48)
  • Ue5.1创建C++项目(Rider)

    1、下载地址 2、选择左侧“Visual Studio Community 2019” 3、选择这两个 4、单体里添加这几个: 注意最后一个选下边这个 5、下载完成后到这个目录 将原来的14.29.30133文件夹重复名,改成14.29.30136,否则报错 整整baidu、google了1天,网上都没有解决办法 Unable to find valid 14.29.30136 too

    2024年02月02日
    浏览(56)
  • UE5创建C++项目里报错

    UE5创建C++项目里报错: Running C:/Program Files/Epic Games/UE_5.0/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe  -projectfiles -project=\\\"F:/zhanting6.30/PAK/ReadWriteTxtProject/ReadWriteTxtProject.uproject\\\" -game -rocket -progress You must install or update .NET to run this application. App: C:Program FilesEpic GamesUE_5.0EngineBin

    2024年02月05日
    浏览(49)
  • UE5 c++ 的文件操作(记录备忘)

    函数库.h 函数库.cpp      

    2024年02月14日
    浏览(47)
  • UE5 C++ 静态加载资源和类

    一.上篇文章创建组件并绑定之后 在Actor中加载初始化了组件,现在在组件中赋值。使用static ConstructorHelpers::FObjectFinderTTempName(TEXT(\\\"Copy Reference\\\"));再用TempName.Object 里面的资源都来自StarterContent   效果如下: 二.静态加载类 1.在Actor中再声明一个AActor类  2.在静态加载类时使用

    2024年02月21日
    浏览(56)
  • UE5 C++ UENUM 和 USTRUCT

    一.首先在APawn里声明 UENUM 和 USTRUCT。UENUM 有两种定义方式 一种是使用命名空间: 还有是继承uint8: 通过申明class类 别名来替代 USTRUCT的定义 上面的第二种有类似但仍然有很多的差异: 首先要有GENERATED_USTRUCT_BODY()这个函数 并且参数要有 宏定义UPRPERTY 二.在 AMyPawn 里定义 En

    2024年02月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包