首页 > 其他分享 >【UE架构】虚幻GamePlay架构

【UE架构】虚幻GamePlay架构

时间:2022-12-06 09:22:59浏览次数:59  
标签:架构 函数 删除 创建 Actor UE UWorld GamePlay SpawnActor

一. Actor 和 Component

1.1 创建 Actor 的两种方式

  • 静态创建:直接在场景中编辑拖拽,创建由引擎构建场景时进行创建
    • 无需编码,更加直观简单
    • 但会影响游戏启动速度,增加场景构建负担
  •  动态创建:通过编码动态进行生成
    • 复杂度上升
    • 但可控性更强,动态生成的Actor会持有有效的操作指针,我们可以根据实际情况进行生成,更加灵活

 

1.2 SpawnActor函数

 

 

1.3 创建Actor

  •  ① 在头文件中,对其父类函数BeginPlay和Tick进行虚函数重写
    //在MyGameModeBase.h文件
    UCLASS()
    class UE_C_API AMyGameModeBase : public AGameModeBase
    {
        GENERATED_BODY()
    
    public :
        //虚函数重写
        virtual void BeginPlay()override;
        virtual void Tick(float DeltaSeconds)override;
    };
    复制代码

     

  • ② 在 .cpp 文件中,定义BeginPlay和Tick函数
    //在MyGameModeBase.cpp文件
    void AMyGameModeBase::BeginPlay()
    {
    }
    
    void AMyGameModeBase::Tick(float DeltaSeconds)
    {
    }

     

  • ③ 调用函数SpawnActor()
    //在MyGameModeBase.cpp文件
    void AMyGameModeBase::BeginPlay()
    {
        //调用父类同名函数(Super相当于父类)
        //Super::BeginPlay();
    
        //1.调用函数SpawnActor():
        GetWorld()->SpawnActor<AActor>();
    
        //2.
        GetWorld()->SpawnActor(AActor::StaticClass());
        //GetWorld 获得当前运行世界实例指针(全局函数 UWorld类型对象)
        //SpawnActor 是 UWorld类的一个成员函数(工厂函数),帮助我们在场景中生成Actor
        //AActor::StaticClass() 是一个类的实例数据(类型是 UClass)
    
        //3.
        UWorld* world = GetWorld();
        world->SpawnActor<AActor>();
    
        //4.滞后生成 Actor:
        //创建一个 UWorld类对象的指针
        UWorld* pWorld = GetWorld();  
    
        //创建一个 FTransform
        FTransform tran;
    
        //滞后生成 Actor
        AActor* pActor = pWorld->SpawnActorDeferred<AActor>(AActor::StaticClass(), tran);
    
        //确定生成对象到世界
        pActor->FinishSpawning(tran);
    }
    
    void AMyGameModeBase::Tick(float DeltaSeconds)
    {
        Super::Tick(DeltaSeconds);
    }

     

  • ④ 上面采用了4种方式创建Actor,编译后运行结果如下:

  • 虚幻中除了使用模版构建对象外,还增加了映射关系,可以将类作为对象构建依据,这可以方便的将类提供给蓝图使用
  • 注意:C++本身是编译型语言,在编辑器中看到的文件类并不是真正的C++类,只是编译后生成的映射文件

 

1.4 Actor 生命周期

  • ① Actor的创建分为两种方式,两种方式的创建有细微差异,但总体不大,基本分为以下流程:
    • 构造函数调用

    • 初始化成员变量

    • (如有蓝图,则初始化蓝图数据)

    • 构建组件

    • BeginPlay(标志着Actor被创建到世界当中)

    • Tick

  • ② 消亡Actor

    //创建一个 UWorld类对象的指针
    UWorld* pWorld = GetWorld();  
    
    //创建一个 FTransform
    FTransform tran;
    
    //滞后生成 Actor
    AActor* pActor = pWorld->SpawnActorDeferred<AActor>(AActor::StaticClass(), tran);
    
    //确定生成对象到世界
    pActor->FinishSpawning(tran);
    //调用自身Destroy函数进行强制消亡操作
    pActor->Destroy();
    
    //滞后5秒删除
    pActor->SetLifeSpan(5);
    • Destroy函数

      • 参数说明:

      • bNetForce 是否强制网络同步删除

      • bShouldModifyLevel 主要是用来控制先删除actor再修改关卡,还是先修改关卡再删除actor,默认是true,即为先修改关卡,再删除actor(修改关卡即为把actor先移除出场景)

    • SetLifeSpan函数

      • 参数说明:

      • 设置延时删除(单位秒)

 

  • ③ 消亡Actor通知
    • Destroyed函数

      • 当对象被删除时(非内存删除)进行回调操作

    • EndPlay函数

      • 对象被彻底清除时回调,回调会进行删除类型通知

 

  •  ④ 删除类型介绍
    • Destroyed:当actor或是component彻底被删除时(内存中)

    • LevelTransition:关卡切换时删除回调(非关卡流)

    • EndPlayInEditor:编辑器关闭时,回调通知

    • RemovedFromWorld:关卡流切换被释放时调用

    • Quit:游戏退出时被删除回调

 

 

 

 

 

 

 

 


 

临时草稿 

 

 

 

 

 

 

 

 

未完待续...

标签:架构,函数,删除,创建,Actor,UE,UWorld,GamePlay,SpawnActor
From: https://www.cnblogs.com/ZWJ-zwj/p/16954240.html

相关文章

  • CMW500 Bluetooth信令测试
    一、简介R&SCMW500宽带无线通信测试仪是适用于射频集成和协议开发的通用测试平台,其内部集成RF功率计和带List模式的CW发生器,可以完成无线设备的快速校准;同时还集成了矢量......
  • Vue.js:v-charts根据E-charts修改样式
    以饼状图为例子:首先importimportVeRingfrom'v-charts/lib/ring'在<template>加上<ve-ring><ve-ringstyle="background:#F9F9F9":data="chartDataRing":sett......
  • 2*STACK = QUEUE √ , 2*QUEUE = STACK?吗
    232.用栈实现队列classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();sta......
  • 【Git】The Requested URL return error 403
    问题描述git执行push命令时提示:TheRequestedURLreturnerror403问题分析权限不够,仓库在创建后重装过电脑,管理员不同解决办法删库重开......
  • Vue的MVVM模型
    MVVM模型            1.M:模型(Model):data中的数据            2.V:视图(View):模板代码        ......
  • Vue之el与data的两种写法
    data与el的2种写法          1.el有2种写法                  (1).newVue时候配置el属性。     ......
  • Vue数据绑定
    Vue中有2种数据绑定的方式:          1.单向绑定(v-bind):数据只能从data流向页面。          2.双向绑定(v-model):数据不仅能......
  • vue3 webstorm 快捷新建组建模板
          <template><h1>${COMPONENT_NAME}</h1></template><scriptlang="ts"setup>import{reactive}from'vue';import{useRouter}from"vue......
  • Queries Gym - 100741A - 树状数组
    给定\(n\)和\(m\),对于\(n\)个数字\(a_i\),进行下列三种操作:(1)+pr:将p位置的元素加上r,输出此时p位置的值;(2)-pr:将p位置的元素减去r,若p位置的值小......
  • day32-JQuery05
    jQuery059.作业9.1homework01对多选框进行操作,输出选中的多选框的个数,并且把选中爱好的名称显示。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-......