管理为移动游戏对象而创建的 Vector3 的内存
Managing memory of Vector3's created to move gameObject
我有 C++ 背景,是 C# 和 Unity5 游戏引擎的新手。
我目前正在完成一些教程项目 (Space Shooter),对内存管理有疑问。
考虑使用此代码应用用户输入来移动玩家游戏对象:
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 结构吗?
- 这些内存是如何管理和清除的,是否可以在不依赖某些自动垃圾收集的情况下显式处理?
- 将它分配给刚体的过程是否以某种方式消耗了该结构并将其从内存中删除,或者这些临时结构可能在 FixedUpdate() 结束时被清除?
- 它每
FixedUpdate()
创建一个新的 Vector3
(默认情况下每秒 60 次),即使用户没有提供输入也是如此。
Vector3
在堆栈上创建。一旦你离开功能就释放。 (无垃圾回收)
- 当您将变量
movement
分配给 rigidbody.velocity
时,您只是在复制结构。 (无垃圾回收)
如果您考虑 new
运算符。对于结构,它不会实例化堆中的对象。这是一种调用构造函数和初始化字段的方法。
我有 C++ 背景,是 C# 和 Unity5 游戏引擎的新手。
我目前正在完成一些教程项目 (Space Shooter),对内存管理有疑问。
考虑使用此代码应用用户输入来移动玩家游戏对象:
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 结构吗?
- 这些内存是如何管理和清除的,是否可以在不依赖某些自动垃圾收集的情况下显式处理?
- 将它分配给刚体的过程是否以某种方式消耗了该结构并将其从内存中删除,或者这些临时结构可能在 FixedUpdate() 结束时被清除?
- 它每
FixedUpdate()
创建一个新的Vector3
(默认情况下每秒 60 次),即使用户没有提供输入也是如此。 Vector3
在堆栈上创建。一旦你离开功能就释放。 (无垃圾回收)- 当您将变量
movement
分配给rigidbody.velocity
时,您只是在复制结构。 (无垃圾回收)
如果您考虑 new
运算符。对于结构,它不会实例化堆中的对象。这是一种调用构造函数和初始化字段的方法。