管理用于移动gameObject的Vector3's内存

本文关键字:内存 Vector3 用于 移动 gameObject 管理 | 更新日期: 2023-09-27 17:52:12

我来自c++背景,对c#和Unity5游戏引擎都是新手。

我目前正在完成一些教程项目(《太空射击》),并且对内存管理有疑问。

考虑以下代码来应用用户输入来移动玩家gameObject:

    void FixedUpdate ()
    {
       float moveHorizontal = Input.GetAxis ("Horizontal");
       float moveVertical = Input.GetAxis ("Vertical");
       Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
       rigidbody.velocity = movement * speed;
      /* additional logic */
   }

我的问题基本上是:

    这不会为用户提供输入的每个物理帧创建一个新的Vector3结构体吗?这个内存是如何管理和清除的,它可以显式处理而不依赖于一些自动垃圾收集吗?
  1. 是否将其分配给刚体的过程以某种方式消耗结构并从内存中删除它,或者这些临时结构在fixeduupdate()结束时被清除?

管理用于移动gameObject的Vector3's内存

  1. 每个FixedUpdate()创建一个新的Vector3(默认每秒60次),即使用户没有提供输入。
  2. Vector3在栈上创建。离开函数后释放。(无垃圾回收)
  3. 当您将变量movement赋值给rigidbody.velocity时,您只是在复制结构体。(无垃圾回收)

如果考虑new运算符。对于结构,它不会在堆中实例化对象。这是一种调用构造函数和初始化字段的方法。