gpt4 book ai didi

c# - 管理为移动游戏对象而创建的 Vector3 的内存

转载 作者:行者123 更新时间:2023-11-30 21:57:38 25 4
gpt4 key购买 nike

我有 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 */
}

我的问题基本上是:

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

最佳答案

  1. 它会在每个 FixedUpdate()(默认情况下每秒 60 次)创建一个新的 Vector3,即使用户没有提供输入也是如此。
  2. Vector3 在堆栈上创建。一旦你离开功能就释放。 (无垃圾收集)
  3. 当您将变量movement 分配给rigidbody.velocity 时,您只是在复制结构。 (无垃圾收集)

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

关于c# - 管理为移动游戏对象而创建的 Vector3 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com