Ejemplo n.º 1
0
        public bool CheckBounds(Bounds bounds, List <GameObject> objects, List <GameObject> ignoreList = null)
        {
            var result = false;

            k_Renderers.Clear();
            if (m_SpatialHashContainer.GetIntersections(k_Renderers, bounds))
            {
                for (var i = 0; i < k_Renderers.Count; i++)
                {
                    var renderer = k_Renderers[i];
                    if (ignoreList != null && ignoreList.Contains(renderer.gameObject))
                    {
                        continue;
                    }

                    var transform = renderer.transform;

                    IntersectionUtils.SetupCollisionTester(m_CollisionTester, transform);

                    if (IntersectionUtils.TestBox(m_CollisionTester, transform, bounds.center, bounds.extents, Quaternion.identity))
                    {
                        objects.Add(renderer.gameObject);
                        result = true;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public bool CheckSphere(Vector3 center, float radius, List <GameObject> objects, List <GameObject> ignoreList = null)
        {
            var result = false;

            k_Renderers.Clear();
            var bounds = new Bounds(center, radius * 2 * Vector3.one);

            if (m_SpatialHashContainer.GetIntersections(k_Renderers, bounds))
            {
                for (var i = 0; i < k_Renderers.Count; i++)
                {
                    var renderer = k_Renderers[i];
                    if (ignoreList != null && ignoreList.Contains(renderer.gameObject))
                    {
                        continue;
                    }

                    var transform = renderer.transform;

                    IntersectionUtils.SetupCollisionTester(m_CollisionTester, transform);

                    if (IntersectionUtils.TestSphere(m_CollisionTester, transform, center, radius))
                    {
                        objects.Add(renderer.gameObject);
                        result = true;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        public bool Raycast(Ray ray, out RaycastHit hit, out GameObject obj, float maxDistance = Mathf.Infinity, List <GameObject> ignoreList = null)
        {
            obj = null;
            hit = new RaycastHit();
            var result   = false;
            var distance = Mathf.Infinity;

            k_Renderers.Clear();
            if (m_SpatialHashContainer.GetIntersections(k_Renderers, ray, maxDistance))
            {
                for (int i = 0; i < k_Renderers.Count; i++)
                {
                    var renderer = k_Renderers[i];
                    if (ignoreList != null && ignoreList.Contains(renderer.gameObject))
                    {
                        continue;
                    }

                    // Skip destroyed objects
                    if (renderer == null)
                    {
                        continue;
                    }

                    var transform = renderer.transform;

                    IntersectionUtils.SetupCollisionTester(m_CollisionTester, transform);

                    RaycastHit tmp;
                    if (IntersectionUtils.TestRay(m_CollisionTester, transform, ray, out tmp, maxDistance))
                    {
                        var point = transform.TransformPoint(tmp.point);
                        var dist  = Vector3.Distance(point, ray.origin);
                        if (dist < distance)
                        {
                            result       = true;
                            distance     = dist;
                            hit.distance = dist;
                            hit.point    = point;
                            hit.normal   = transform.TransformDirection(tmp.normal);
                            obj          = renderer.gameObject;
                        }
                    }
                }
            }

            return(result);
        }