Performance Unity3d-在集合中保存大量矢量3的最佳方法?
我试图在任何类型的集合中保存块位置。例如,如果我有一个16*16块的网格,我需要保存256个块位置。我可以只使用数组或列表,对吗?没问题 但当我有一个网格,比如10x10网格时会发生什么呢。所以我突然需要节省10x10x256块。我目前将块保存在每个网格中,因此每个网格都会跟踪自己的块。这里也没有问题 实际上,问题是我需要迭代所有这些网格,以检查网格是否有附加网格。这将导致大量的循环时间 我想知道是否有某种方法可以减少这种情况,或者做得更好。Performance Unity3d-在集合中保存大量矢量3的最佳方法?,performance,loops,grid,unity3d,Performance,Loops,Grid,Unity3d,我试图在任何类型的集合中保存块位置。例如,如果我有一个16*16块的网格,我需要保存256个块位置。我可以只使用数组或列表,对吗?没问题 但当我有一个网格,比如10x10网格时会发生什么呢。所以我突然需要节省10x10x256块。我目前将块保存在每个网格中,因此每个网格都会跟踪自己的块。这里也没有问题 实际上,问题是我需要迭代所有这些网格,以检查网格是否有附加网格。这将导致大量的循环时间 我想知道是否有某种方法可以减少这种情况,或者做得更好。 我曾考虑使用这些块的位置作为集合中的索引,但例如,使
我曾考虑使用这些块的位置作为集合中的索引,但例如,使用多维数组会产生许多越界错误,因此不知何故,我无法使用它。如果我理解正确,您可能需要它 我将每个游戏对象存储在游戏对象数组中 你在这里可能不会有例外
GameObject[,] ArrayOfGameObjects = new GameObject[10, 10];
public void spawnGrid ()
{
for (int y = 0; y < 10; y++) {
for (int x = 0; x <10; x++) {
ArrayOfGameObjects[x,y] = Instantiate (YourPrefabGameObject, new Vector3 (x, y, 0),Quaternion.identity)as GameObject;
}
}
}
public CheckAdjOf (GameObject gameObj)
{
if (gameObj == null)
{
//Do your stuff if its null
//for example break, return
}
int x = (int)gameObj.transform.position.x;
int y = (int)gameObj.transform.position.y;
GameObject Left,Right,Up,Down;
if (x < mArray.GetUpperBound (0))
Right = ArrayOfGameObjects [x + 1, y] == 0);
if (x > 0)
Left = ArrayOfGameObjects [x - 1, y] == 0);
if (y < mArray.GetUpperBound (0))
Up = ArrayOfGameObjects [x, y + 1] == 0);
if (y > 0)
Down = ArrayOfGameObjects [x, y - 1] == 0);
// you can also find diagonal GameObjects
// do your stuff after you getting all adjunctive grid/block
}
GameObject[,]ArrayOfGameObjects=新的GameObject[10,10];
公共网格()
{
对于(int y=0;y<10;y++){
对于(int x=0;x 0)
左=ArrayOfGameObjects[x-1,y]==0);
如果(y0)
向下=ArrayOfGameObjects[x,y-1]==0);
//你也可以找到对角的游戏对象
//在获得所有附加网格/块后完成您的工作
}
我假设您想检查一个网格的一部分是否在另一个网格内?如果不是,则忽略;)
如果是这样的话,你可以通过为每个网格创建来优化事情。每个网格都可以有一个碰撞器,并且只有当两个网格之间发生碰撞时,你才能对单个块执行检查
这将消除通过远处网格的不必要的循环。当添加新块时,您应该能够通过使用来增加网格的边界
hth.你可以做的是为网格制作一个小脚本,然后在该脚本中找到一个带有另一个脚本的空游戏对象,当其中一个网格成为附加网格时,你可以从空游戏对象获取脚本,并将网格注册到该脚本中。如果我理解正确,我已经阅读了我有一个所有网格项的列表。每个网格项都有一个其中所有块的列表。但是,当有大量网格项时,每个网格项都有大量块需要迭代,这个过程会变得非常缓慢。我想知道如何才能明智地提高这个过程的性能是的,我理解并且已经有了很多,但是en有大量的列表,每个列表都有大量的项目需要迭代,这一过程变得非常缓慢。我想知道如何从性能角度改进这一过程。我成功地实现了类似的功能。谢谢!我没有想到这种方法。谢谢,我会研究它