zoukankan      html  css  js  c++  java
  • 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++函数中实现默认,在蓝图中可实现重写。

  • 相关阅读:
    如何让一个浮动垂直居中:两种方式!带来效果~~~~~~
    rgba()和opacity之间的区别(面试题)
    常用浏览器内核!IE,Chrome ,Firefox,Safari,Opera 等内核
    有关Option.inSamplSize 和 Compress 图片压缩
    Android App 启动 Activity 创建解析
     (转)windows一台电脑添加多个git账号
    Handler向子线程发送数据
    Android Touch事件分发
    int 转十六进制
    JVM client模式和Server模式
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/12872640.html
Copyright © 2011-2022 走看看