Tôi không thể nói chắc chắn cách tiếp cận nào được sử dụng bởi các nhà phát triển WC3, nhưng nó trông khá giống với Phân cấp A * được chú thích A *. Bán kính đơn vị được xác định trong WC3Editor đã được sử dụng cho quy mô mô hình 3d, nhưng kích thước đơn vị thực tế cho quá trình tìm đường là rời rạc, có thể giống như unitSize = (int) (unitRadius / 10). Đó không phải là dựa trên vector, đó là điều chắc chắn.
Giả sử có rất nhiều nút đường dẫn tạo lưới nút có độ phân giải cao. Đơn vị đơn giản như một con ma cà rồng có kích thước là 2, vì vậy để đặt nó ở đâu đó trong lưới, chúng ta cần 4 nút đường dẫn miễn phí gần nhau. Một anh hùng hiệp sĩ tử thần lớn hơn một chút với kích thước 3, chiếm tổng cộng 9 nút đường dẫn. Bây giờ chúng tôi đặt 2 ziggurats với nhau để lại một khoảng trống rộng 2 nút ở giữa, và gửi một con ma cà rồng và một hiệp sĩ tử thần ở phía bên kia. Ghoul sẽ có thể vượt qua giữa hai ziggurats, trong khi hiệp sĩ tử thần sẽ phải di chuyển xung quanh. Làm thế nào nó có thể được xác định?
Để xem liệu một nút có thể chứa một đơn vị kích thước cụ thể hay không, hãy chỉ định một giá trị giải phóng mặt bằng đặc biệt cho mỗi nút xác định kích thước đơn vị tối đa được phép. Về cơ bản, điều đó có nghĩa là một số kiểm tra giới hạn đã được thực hiện cho một nút và giới hạn lớn nhất có thể được ghi nhớ là giải phóng mặt bằng của nút. Vì vậy, khi chúng ta muốn đặt một hiệp sĩ tử thần trên một số nút, việc này trở nên đơn giản như so sánh độ thanh thải của nút với kích thước của hiệp sĩ tử thần. Tất nhiên, mọi thứ sẽ trở nên phức tạp hơn nhiều khi có một số đơn vị nhảy xung quanh cạnh tranh cho các nút, nhưng đó là một câu chuyện khác.
Để biết thêm chi tiết, bạn có thể muốn xem bài viết này:
http://harablog.wordpress.com/2009/01/29/clurdy-basing-pathfinding/