首页 > 编程语言 >UE5 C++ Interface

UE5 C++ Interface

时间:2023-06-23 16:11:49浏览次数:45  
标签:OriginalObject 蓝图 接口 Interface C++ UE5 ReactingObject public 接口函数

概述

  • 接口类有助于确保一组(可能)不相关的类实现一组通用函数

接口声明

  • 声明接口类与声明普通的虚幻类相似,但仍有两个主要区别
    • 首先,接口类使用UINTERFACE宏而不是UCLASS宏,且直接从UInterface而不是UObject继承
    • 其次,UINTERFACE类不是实际的接口;它是一个空白类,它的存在只是为了向虚幻引擎反射系统确保可见性。将由其他类继承的实际接口必须具有相同的类名,但是开头字母"U"必须改为"I"。
    • 如果想让蓝图实现此接口,则需要Blueprintable说明符
    #pragma once
    
        #include "ReactToTriggerInterface.generated.h"
    
        UINTERFACE(MinimalAPI, Blueprintable)
        class UReactToTriggerInterface : public UInterface
        {
            GENERATED_BODY()
        };
    
        class IReactToTriggerInterface
        {
            GENERATED_BODY()
    
        public:
            /** 在此处添加接口函数声明 */
        };
    
    • 前缀为U的类不需要构造函数或任何其他函数,而前缀为I的类将包含所有接口函数,且此类实际上将被你的其他类继承

接口说明符

  • BlueprintType 将该类公开为可用于蓝图中的变量的类型
  • DependsOn=(ClassName1, ClassName2, ...)"
    • 所有列出的类都将在该类之前编译。ClassName必须在同一个(或上一个)包中指定一个类。多个依赖性类可以使用以逗号分隔的单个"DependsOn"行来指定,也可以使用单个"DependsOn"行为每个类指定。当一个类使用在另一个类中声明的结构体或枚举时,这一点非常重要,因为编译器只知道它已经编译的类中的内容。
  • "MinimalAPI"
    • 仅导致该类的类型信息被导出以供其他模块使用。你可以向该类转换,但不能调用该类的函数(内联方法除外)。对于不需要其所有函数在其他模块中均可供访问的类,通过不导出这些类的所有内容,这可以缩短编译时间

c++中实现接口

  • 需从"前缀为I(I-prefixed)"的接口类继承(除了你正在使用的任何基于"UObject"的类)即可
     #include "CoreMinimal.h"
        #include "GameFramework/Actor.h"
        #include "ReactToTriggerInterface.h"
        #include "Trap.generated.h"
    
        UCLASS(Blueprintable, Category="MyGame")
        class ATrap : public AActor, public IReactToTriggerInterface
        {
            GENERATED_BODY()
    
        public:
            /** Add interface function overrides here. */
        }
    

声明接口函数

  • 仅C++的接口函数
    • 不带UFUNCTION说明的虚函数,以便在实现接口的类中覆盖它们, 但这些C++接口函数对蓝图不可见
    public:
        virtual bool ReactToTrigger();
    
    • 当在一个Actor类中实现接口后,可以创建并实现一个针对该类的覆盖
     public:
        virtual bool ReactToTrigger() override;
    
  • 蓝图可调用接口函数
    • 要创建蓝图可调用的接口函数,必须在带BlueprintCallable说明符的函数声明中提供一个UFUNCTION
    • 还必须使用BlueprintImplementableEventBlueprintNativeEvent说明
    • 不能为虚函数
     public:
        /**只能在蓝图中实现的React To Trigger版本。*/
        UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, Category=Trigger Reaction)
        bool ReactToTrigger();
    
    public:
        /**可以在C++或蓝图中实现的React To Trigger版本。*/
        UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category=Trigger Reaction)
        bool ReactToTrigger();
    

确定类是否实现了接口

  • 为了与实现接口的C++和蓝图类兼容,可以使用以下任意函数
    // 如果OriginalObject实现了    UReactToTriggerInterface,则bisimplemated将为true
    bool bIsImplemented = OriginalObject->GetClass()->ImplementsInterface(UReactToTriggerInterface::StaticClass()); 
    
    // 如果OriginalObject实现了UReactToTrigger,bIsImplemented将为true
    bIsImplemented = OriginalObject->Implements<UReactToTriggerInterface>(); 
    
    // 如果OriginalObject实现了UReactToTriggerInterface,则ReactingObject将为非空
    IReactToTriggerInterface* ReactingObject = Cast<IReactToTriggerInterface>(OriginalObject); 
    

类型转换

  • 虚幻引擎的转换系统支持从一个接口转换到另一个接口,或者在适当的情况下,从一个接口转换到一个虚幻类型
     // 如果接口被实现,则ReactingObject将为非空。
     IReactToTriggerInterface* ReactingObject = Cast<IReactToTriggerInterface>(OriginalObject); 
     
     // 如果ReactingObject为非空而且还实现了ISomeOtherInterface,则DifferentInterface将为非空。
     ISomeOtherInterface* DifferentInterface = Cast<ISomeOtherInterface>(ReactingObject); 
    
     // 如果ReactingObject为非空且OriginalObject为AActor或AActor派生的类,则Actor将为非空
     AActor* Actor = Cast<AActor>(ReactingObject); 
    

标签:OriginalObject,蓝图,接口,Interface,C++,UE5,ReactingObject,public,接口函数
From: https://www.cnblogs.com/scyrc/p/17499221.html

相关文章

  • 第一阶段C++基础入门(黑马程序员)——Day2
    3运算符作用:用于执行代码的运算本章主要学习以下几类运算符:运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋值给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值3.1算术运算符作用:用于处理四则运算算术运......
  • unreal engine 5.2 c++ 自定义gameplay
    1.新建c++工程2.打开worldsetting3.修改默认GamePlay4.依次新建对应GamePlay替换默认GamePlayDefaultPawnHUDPlayerControllerGameStatePlayerStateSpectatorPawn5.添加AhellogpGameModeBase默认构造函数#include"hellogpGameModeBase.h"#include......
  • 21互联网从业必读中文-C++ 模板(第二版)
    本书介绍    本书第一版大约出版于15年前。起初我们的目的是编写一本对C++工程师有帮助的C++模板权威指南。目前该项目从以下几个方面来看是成功的:它的作用得到了不少读者的认可,也多次被推荐为参考书目,并屡获好评。 第一版已经很老了,虽然其中不少内容对modernC++工......
  • C++面向对象技术与C++课程设计任务书[2023-06-23]
    C++面向对象技术与C++课程设计任务书[2023-06-23]面向对象技术与C++课程设计任务书题目1 小型学籍管理系统班级 21060101~02 指导教师 耿军雪姓名 学号 地点 G1-203 完成时间 2023/6/262023/6/30【目的与要求】1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基......
  • C++面试题 --imxiangzi 看看
    目录语言基础类0.各种类型和0值比较1.指针和引用的区别?2.static和const的用法,(能说出越多越好)(重点)3.externc 作用4.堆和栈的区别6. 头文件中的ifndef/define/endif 干什么用?7. 用struct与class的区别8.派生类与虚函数概述9. 虚函数与纯虚函数区别10.深拷贝与......
  • 原创 C++的校招的面试题,看看你能答对几个?
    嗨~大家好呀,最近后台有人问小谷,C++校招的话,需要了解哪些内容,大家知道的,小谷有求必应的,那么之后我就来周期性更新一下作为一名C++开发工程师要掌握的知识,本期主要介绍一下C++基础知识吧!1、面向对象的三大特性:封装、继承、多态封装:就是把客观事物封装成抽象的类,可以使某个属性只......
  • 宇宙最全面的C++面试题v2.0
    作为一个后端人,是无论如何要对C++有一定了解底。很多同学都对C++有一定的抵触情绪,因为C++知识点繁杂全面,深度与广度俱在,准备面试需要很长的时间。本篇的主要目的是梳理知识脉络,挑选最精华的面试题,以飨读者,事半功倍!准备面试一定要有侧重点,标为❤属于高频考点,需要反复记忆。建议平......
  • C++/C 试题 (面试必看)
    本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。笔试时间90分钟。请考生认真答题,切勿轻视。一、请填写BOOL,float,......
  • C++ 复习要点
    本文总结一下C++面试时常遇到的问题。C++面试中,主要涉及的考点有 关键字极其用法,常考的关键字有const,sizeof,typedef,inline,static,extern,new,delete等等语法问题类型转换指针以及指针和引用的区别面向对象的相关问题,如虚函数机制等泛型编程的相关问题,如模板和......
  • 19道必须掌握的C++面试题
    在面试C++方面的工作时,经常会遇到各种面试题,这对应聘人员的知识掌握能力要求较高。本文将为大家带来的就是19道必须掌握的C++面试题,不要错过哦! 想要快速轻松掌握C++知识,请点击C++微课边学习边实践 问1:请用简单的语言告诉我C++是什么?答:C++是在C语言的基础上开发的一种面向......