• Unreal 读书笔记 (二) 类对象的设计


    一.命名规则

      F 纯C++类

      U 继承自UObject,但不继承自Actor
      A 继承自Actor
      S Slate控件类
      H HitResult相关类

    二.生成

      在标准C++中,一个类产生一个对象,被称为“实例化”。实例化对象的方法通过new关键字。
      而在虚幻中,对于某些类型,我们不得不通过调用某些函数来产生对象。
        ①如果你的类是纯C++的类(F开头),你可以通过new来产生对象。
        ②如果你的类继承自UObject但不继承自Actor,你需要通过NewOBject函数来产生对象。
        ③如果你的类继承自AActor,你需要通过SpawnActor函数来产生对象。

    三.类对象的获取

      获取一个对象的唯一的方法,就是通过某种方式传递到这个对象的指针或引用。
        ①获取场景中某种Actor的所有实例?
          for(TActorIterator<AActor> Iterator(GetAorld());Iterator;++Iterator)

    四.销毁

      ①如果是纯C++类在函数体重创建,而不是通过new来分配的,则这个类的对象在函数调用结束后会随着函数栈空间的释放,一起释放掉,不需要手动干涉。
      ②如果是纯C++类使用new来分配内存,而且你直接传递类的指针。那么需要意识到:除非你手动删除,否则这一块内存将永远不会被释放。如果忘记了,就会产生内存泄漏。
      ③如果你使用纯C++类来使用new分配内存,同时使用智能指针TSharedPtr/TSharedRef
    来进行管理,那么你的类对象将不需要也不应该被你手动释放。智能指针会使用引用计数来完成自动的内存释放。你可以使用MakeShareable函数来转换为普通指针为智能指针:
    TSharedPtr<YourClass> YourClassPtr = MakeShareable(new YourClass());
      ④继承自UObject采用垃圾回收机制。当一个类的成员变量包含指向UObject的对象,同时又带有UPROPERTY宏定义,那么这个成员变量将会触发引用计数机制。
    垃圾回收期会定期从根节点Root开始检查,当一个UObject没有被别的任何UObject引用,就会被垃圾回收。你可以通过AddToRoot函数来让一个UObject一直不被回收。
      ⑤Actor类
         Actor类对象可以通过Destroy函数来请求销毁,这样的销毁意味着当前的Actor从所属的世界中被摧毁,但是对象对应的内存的回收依然由系统决定。

    五.从C++到蓝图

      1.UPROPERTY
        当你需要将一个UObject的子类的成员变量注册到蓝图中
        UPROPERTY(BlueprintReadWrite,VisibleAnyWhere,Category = "Object")
      2.UFUNCTION
        当你需要将一个函数供蓝图调用
        UFUNCTION(BlueprintCallable,Category="TestLogory")
          BlueprintImplementEvent 必须由蓝图的子类实现,不应该在C++中给出实现,否则会导致链接错误
          BlueprintNativeEvent 必须在C++函数中实现默认,在蓝图中可实现重写。

  • 相关阅读:
    <EditText /> This text field does not specify an inputType or a hint
    phpmailer【PHP邮件】的用法
    IOS-Quartz2D(Paths元素)
    IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)
    IOS学习路线图
    Android学习必备--java工具15个
    IOS-网络(ASI使用)
    IOS-网络(ASIHTTPRequest的使用简介)
    IOS-网络(AFNetworking)
    IOS-网络(文件压缩和解压缩)
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/12872640.html
Copyright © 2020-2023  润新知