Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Unity3d-在集合中保存大量矢量3的最佳方法?_Performance_Loops_Grid_Unity3d - Fatal编程技术网

Performance Unity3d-在集合中保存大量矢量3的最佳方法?

Performance Unity3d-在集合中保存大量矢量3的最佳方法?,performance,loops,grid,unity3d,Performance,Loops,Grid,Unity3d,我试图在任何类型的集合中保存块位置。例如,如果我有一个16*16块的网格,我需要保存256个块位置。我可以只使用数组或列表,对吗?没问题 但当我有一个网格,比如10x10网格时会发生什么呢。所以我突然需要节省10x10x256块。我目前将块保存在每个网格中,因此每个网格都会跟踪自己的块。这里也没有问题 实际上,问题是我需要迭代所有这些网格,以检查网格是否有附加网格。这将导致大量的循环时间 我想知道是否有某种方法可以减少这种情况,或者做得更好。 我曾考虑使用这些块的位置作为集合中的索引,但例如,使

我试图在任何类型的集合中保存块位置。例如,如果我有一个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有大量的列表,每个列表都有大量的项目需要迭代,这一过程变得非常缓慢。我想知道如何从性能角度改进这一过程。我成功地实现了类似的功能。谢谢!我没有想到这种方法。谢谢,我会研究它