(是的,我实际上需要动态创建变量,而不仅仅是使用数组,列表或字典。)
我正在使用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进行此操作?
(再次使用数组,列表或字典,会产生太大的内存空间并影响性能)
答案 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");
}