Unity 2D 游戏。纹理的遮挡剔除

问题描述 投票:0回答:1
我想制作一个非平铺(不使用平铺地图)的开放世界。我发现基于场景的系统并不擅长构建开放世界,所以我想出了创建具有许多方形平面的单一场景。我的脚本会自动为每个平面创建纹理和材质片段。所以,如果世界有我想要的那么大,我就会遇到内存问题:所有这些纹理大约为 1GB。

最好对它们进行遮挡剔除,这样相机附近的纹理就会加载到内存中,其他任何东西都不会。 我已经尝试过,但是我的表现真的很差。

这是我位于相机对象上的脚本:

void Update() { if (playerRB.velocity == Vector2.zero) return; var coords = Vector2Int.RoundToInt(transform.position / 10); for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) { var chunk = _terrainRoot.GetChunk(coords + new Vector2Int(x, y)); _terrainRoot.ActivateChunk(chunk); _activeChunks.Add(chunk); } } for (var i = _activeChunks.Count - 1; i >= 0; i--) { if (_activeChunks[i].isVisible) continue; _terrainRoot.DeactivateChunk(_activeChunks[i]); _activeChunks.RemoveAt(i); } Resources.UnloadUnusedAssets(); }
我明白在更新中进行如此多的操作并不是一个好的决定。也许有人知道更好的选择?
非常感谢您的任何提示。

c# performance unity-game-engine optimization unityscript
1个回答
0
投票
你的区块是单一行为吗?您可以使用 OnBecameInvisible/OnBecameInvisible 方法来激活和停用它们

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.