管理用于移动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结构体吗?这个内存是如何管理和清除的,它可以显式处理而不依赖于一些自动垃圾收集吗?
- 是否将其分配给刚体的过程以某种方式消耗结构并从内存中删除它,或者这些临时结构在fixeduupdate()结束时被清除?
- 每个
FixedUpdate()
创建一个新的Vector3
(默认每秒60次),即使用户没有提供输入。 -
Vector3
在栈上创建。离开函数后释放。(无垃圾回收) - 当您将变量
movement
赋值给rigidbody.velocity
时,您只是在复制结构体。(无垃圾回收)
如果考虑new
运算符。对于结构,它不会在堆中实例化对象。这是一种调用构造函数和初始化字段的方法。