(是的,我確實需要動態地創建變量,而不是僅僅使用數組,列表或字典)。動態創建變量在運行時
我開發使用Unity視頻遊戲。 我有從大炮發射的炮彈。起初,我使用Unity的「Object.Instantiate」方法動態創建了投射物(好,所以我知道它可以完成)。這會導致我的遊戲在彈丸加載到內存中時大塊。
我的解決方案是創建一個對象緩存/對象池。 對象緩存使用Unity的「Object.Instantiate」方法在開始播放之前將遊戲對象的「cacheAmount」放入字典中。
這對於「cacheAmount」小於64時的性能有效。如果「cacheAmount」增加到64以上,則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?
(再次使用數組,列表或字典,國債收益率的存儲空間過大並影響性能)
你能詳細說明你的意思是「內存空間太大」嗎?這種說法根本沒有意義。如果你的字典表現不佳,你還有其他問題 - 字典沒有錯。也許你有一個糟糕的'GetHashCode'方法?很難知道 - 但它絕對不是字典本身。 – 2014-09-01 10:41:28
我必須同意西蒙,也許發佈一些代碼。你發佈的簡化示例對數組完全可以工作。唯一的問題是,一次實例化256個GameObjects可能會導致打嗝,但僅限於此,而不是從數組中檢索或存儲事物 – Tom 2014-09-01 10:45:41
不,您不需要動態創建變量。數組和字典都很好。 – LearnCocos2D 2014-09-01 12:52:41