找回密码
 立即注册
查看: 309|回复: 0

2022-06-05【UE】回忆之前,忘记之后【大象无形】

[复制链接]
发表于 2022-6-5 18:35 | 显示全部楼层 |阅读模式
<hr><hr>第四章 对象


《就他这样怎么能找到对象的?》
(找个对象很难吗?)
类对象的创建

    纯c++类型,使用F开头。通过new创建对象。
  • 继承自UObject,使用NewObject创建对象。
    NewObject<T>()
    这会返回一个指向你的类的指针,此时这个对象被分配在临时包中。下一次加载会被清除。
  • 继承自AActor,通过SpawnActor函数来产生对象。
    GetWorld()->SpawnActor<AMyActor>()Slate,暂时不用
类对象的获取


for(TActorIterator<AActor> Iterator(GetWorld()); Iterator; ++ Iterator){}
通过cast转换类型拿到自己想要的actor。
类对象的销毁



  • 再函数体中创建,不是通过new来分配内存,这个对象会在函数调用结束后,随着函数栈空间释放,一起释放掉。不需要操作。
    void Func()
    {
    FClass obj = FClass();
    }

  • 如果是通过new来分配内存,而且直接传递类的指针,那么需要意识到,除非手动删除,否则这一块内存永远不会被释放:内存泄漏。
    但是如果使用new分配了内存,同时使用了智能指针TSharedPtr/TSharedRef进行管理,那么它和c#一样,也不需要并且不应该被手动释放。智能指针通过引用计数来完成自动内存释放。
    可以使用MakeShareable函数来转化普通指针为只能指针。
    TSharedPtr<FClass> objPtr = MakeShareable(new FClass())

  • UObject特殊,无法使用智能指针来管理UObject对象。
    UObject采用自动垃圾回收机制。
    当一个类的成员变量包含指向UObject的对象,同时又带有UPROPERTY宏,那么这个成员变量会触发引用计数机制。
    垃圾回收器会定期从根节点Root开始检查,当一个UObject没有被别的任何UObject引用,就会被垃圾回收。你可以通过AddToRoot函数,让一个UObject一直不被回收。
    Actor类,可以通过调用Destroy函数请求销毁,但这只意味着讲当前Actor从所属世界中摧毁,但是内存回收依然由系统决定。
第七章 引擎系统相关类

字符串处理


FName: const string
FText:static string
FString:string
第十三章 蓝图

蓝图架构概述


从Kismet系统发展而来,是一个完整的面向对象的可视化编程系统。小型蓝图编译速度远远快过c++速度,并且能在发布时将蓝图编译为c++。是基于虚幻UClass Uproperty UFunction框架,根植于Unreal Script字节码编译器系统的一套可视化编程系统。
也就是说,蓝图编译结果依然会转化为UClass,UProperty,UFunction信息。指令代码会存储于UFunction信息中。可视化字节码编程。
前端:蓝图存储与编辑


蓝图系统由三部分组成:蓝图编辑系统、蓝图本身、蓝图编译后的字节码。最终编译完成的蓝图字节码将不会包含蓝图本身的节点信息。这部分信息是在UEdGraph中存储的,这是一种优化。
UEdGraph用于表示蓝图的数据结构。从整体来说,可以把其他看作这个结构。
UEdGraph
|-Schema
|-Nodes
|-SubGraphes
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 09:49 , Processed in 0.086836 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表