Đây không phải là một câu trả lời hoàn chỉnh, nhưng hy vọng nó sẽ giúp ích.
Bản đồ / gạch của bạn được đặt tĩnh hay động? Nếu nó là tĩnh, tôi rất khuyến khích bạn thực hiện xử lý ngoại tuyến và tính toán trước càng nhiều càng tốt theo cách đó. Bạn có thể làm điều đó theo bất kỳ cách nào bạn muốn (raycasting hoặc thứ gì đó thông minh hơn), nhưng bạn không thực sự quan tâm đến việc thực hiện rất nhanh bởi vì tất cả sẽ xảy ra ngoại tuyến trong khi bạn "nướng" các cấp độ của mình. Bạn có thể tính toán chính xác các ô có thể nhìn thấy từ mỗi vị trí hoặc tạo một số loại vùng lớn hơn và tất cả các ô có khả năng hiển thị từ mỗi vùng.
Sau đó, trong thời gian chạy, truy vấn cho các ô hiển thị sẽ rất đơn giản và rất nhanh.
Tất nhiên, nếu bạn đang có các cấp được tạo động, thì điều này hoàn toàn không áp dụng :-)