Пример #1
0
        public void LoadObstacles(GridBase gridBase, bool isInEdit = false)
        {
            Obstacle[] allObstacle = GameObject.FindObjectsOfType <Obstacle>();
            obstacles.AddRange(allObstacle);

            foreach (Obstacle obstacle in obstacles)
            {
                BoxCollider bx = null;
                if (obstacle.mainRenderer)
                {
                    bx = obstacle.mainRenderer.gameObject.AddComponent <BoxCollider>();
                }
                if (bx)
                {
                    float halfX = bx.size.x * 0.5f;
                    float halfY = bx.size.y * 0.5f;
                    float halfZ = bx.size.z * 0.5f;

                    Vector3 center = obstacle.mainRenderer.bounds.center;
                    Vector3 from   = obstacle.mainRenderer.bounds.min;

                    from.y = 0;

                    Vector3 to = obstacle.mainRenderer.bounds.max;
                    to.y = 0;

                    int stepX = Mathf.RoundToInt(Mathf.Abs(from.x - to.x) / gridBase.scaleXZ);
                    int stepZ = Mathf.RoundToInt(Mathf.Abs(from.z - to.z) / gridBase.scaleXZ);

                    for (int x = 0; x < stepX; x++)
                    {
                        for (int z = 0; z < stepZ; z++)
                        {
                            Vector3 tp = from;
                            tp.x += gridBase.scaleXZ * x;
                            tp.z += gridBase.scaleXZ * z;
                            //tp.y = obstacle.mainRenderer.transform.position.y;

                            Vector3 p = obstacle.mainRenderer.transform.InverseTransformPoint(tp) - bx.center;
                            tp.y = 0;

                            if (p.x < halfX && p.y < halfY && p.z < halfZ && p.x > -halfX && p.y > -halfY && p.z > -halfZ)
                            {
                                Node n = gridBase.GetNodeFromWorldPosition(tp);
                                n.ChangeNodeStatus(false, gridBase);
                            }
                        }
                    }
                }
                if (isInEdit)
                {
                    DestroyImmediate(bx);
                }
                else
                {
                    Destroy(bx);
                }
            }
        }