private void DetectPoint(Vector3 center, Collider cld) { var pos = m_DetectClosest ? cld.ClosestPoint(center) : cld.transform.position; if (IsVisiblePoint(center, pos, out NormalizedPoint point)) { var item = Result.NewDetectionDataItem(); item.AdditionalDetectionData = new DetectedCollider { Position = pos, Collider = cld }; item.Tag = cld.tag; item.AddPoint(point); Result.AddDetectionDataItem(item); m_VisiblePointCount++; } m_TotalPointCount++; }
private void DetectShape(Vector3 center, Collider cld) { var pos = cld.ClosestPoint(center); if (IsVisiblePoint(center, pos, out NormalizedPoint point)) { // Should always be true. We want at least the // closest point's coords, even if all scanned // points happen to be outside the field of view. var item = Result.NewDetectionDataItem(); item.AdditionalDetectionData = new DetectedCollider { Position = pos, Collider = cld }; item.Tag = cld.tag; item.AddPoint(point); m_VisiblePointCount++; m_TotalPointCount++; if (!s_SharedColliderShapeCache.TryGetValue(cld, out ColliderShape shape)) { shape = new ColliderShape(cld); shape.Scan(m_ScanResolution, m_ScanExtent); s_SharedColliderShapeCache.Add(cld, shape); } var shapePoints = shape.GetWorldPoints(); foreach (Vector3 p in shapePoints) { if (IsVisiblePoint(center, p, out point)) { item.AddPoint(point); m_VisiblePointCount++; } } Result.AddDetectionDataItem(item); m_TotalPointCount += shape.NumPoints; } }