在运行时动态创建变量

时间:2014-09-01 10:36:10

标签: c# unity3d unityscript

(是的,我实际上需要动态创建变量,而不仅仅是使用数组,列表或字典。)

我正在使用Unity开发视频游戏。 我的射弹是用大炮射出的。起初,我正在使用Unity" Object.Instantiate"动态创建弹丸(很好,所以我知道它可以完成)。方法。当弹丸被装入记忆中时,这会导致我的游戏大块出局。

我的解决方案是创建一个对象缓存/对象池。 对象缓存使用Unity" Object.Instantiate"放置" cacheAmount"的方法在我们开始游戏之前将游戏对象放入字典中。

当" cacheAmount"小于64.如果" cacheAmount"当ObjectCache的表现比使用Unity" Object.Instantiate"时更糟糕。方法

我猜了一下,并认为字典的内存空间太大,访问整个块所花费的时间正在减慢游戏速度。

我决定将字典分成8个卷,每个卷有8个对象,第1-8卷,总共64个对象。这些较小的音量再次提高了我的表现。

我捏了一下,用8个物体硬编码了32个卷。这允许发射256枚射弹而不会对性能产生影响。

最理想的是,我根本不会使用字典,只需创建" cacheAmount"变量,并循环遍历它们。这样我就可以更改cacheAmount,并缓存256个或更多的单个对象,而无需事先对它们进行256次硬编码。

所以为了简单起见,我需要这样的东西:

int cacheAmount = 256;
    for (int i = 0; i < cacheAmount; i++)
    {
        GameObject dynamicVariable>i< = (GameObject)Instantiate(projectile);
    }

然后我必须访问dynamicVariable1,dynamicVariable2,dynamicVariable3,dynamicVariable4等。

如何使用C#或JavaScript / UnityScript进行此操作?

(再次使用数组,列表或字典,会产生太大的内存空间并影响性能)

2 个答案:

答案 0 :(得分:0)

你真的需要实例化256个游戏对象吗?你不能重用一些游戏对象吗?

答案 1 :(得分:0)

您不需要字典,也不需要动态变量(无论它们是什么),只需创建一个数组并使用RoundRobin即可访问数组中的下一个自由射弹。

在伪代码上,您没有将引用存储在任何地方,而是在本地声明它,然后忘记,因此无法访问它们。

您想要做的更多是

public List<String> ListOfBrandNames(string id)
{
    var result = db.Items.Where(x => x.Category.Name.Equals(id)).Select(x => x.BrandID).ToList();
    var ListOfBrands = db.Brands.Where(t => result.Contains(t.BrandID)).ToList();
    List<String> BrandNames = ListOfBrands.Select(f => f.Name.ToString()).ToList();
    TempData["Brands"]=BrandNames;
    return RedirectToAction("BrandsOfACategory");
}