Hiện tại, tôi đang mô phỏng các lực tác động vật lý để tránh các đơn vị cục bộ nhưng phương pháp này đôi khi đẩy các đơn vị ra khỏi đội hình và có tác dụng rất không mong muốn khi các đơn vị co cụm lại.
Đối với các game RTS như Starcraft 2, việc tránh cục bộ được thực hiện như thế nào? Là vật lý mô phỏng hoặc một bộ điều khiển omnicient quyết định mọi thứ nên ở đâu? Tôi biết câu hỏi này có thể hơi rộng nên tôi đang hỏi cụ thể cách thực hiện các hành vi tránh né cục bộ của Starcraft 2; mặc dù bất cứ điều gì làm việc sẽ được đánh giá rất cao
Tôi không tìm kiếm bất kỳ mã nào - chỉ là các tài nguyên hoặc giải thích hữu ích về cách Starcraft 2 (hoặc các trò chơi tương tự) xử lý việc tránh cục bộ.
Hiện tại, tôi đã phát hiện va chạm (với vectơ xuyên thấu), lực va chạm và chuyển động theo vận tốc được thực hiện. Mỗi đơn vị được kiểm tra chống lại sự va chạm khác - nếu chúng va chạm, các vật thể ngay lập tức được bù bởi vectơ xuyên thấu thì lực va chạm được áp dụng. Sau đó, một vòng lặp khác di chuyển các vật thể bằng vận tốc của chúng và áp dụng lực kéo cho vận tốc. Việc bù đắp giảm thiểu vấn đề lực va chạm quá mức được áp dụng trên các đơn vị bị vón cục, nhưng các đơn vị đôi khi vẫn bắn ra.
Giải pháp tôi đang tìm kiếm để đáp ứng các yêu cầu sau (như trong Starcraft 2):
- Đối tượng không chồng chéo; hoặc ít nhất là chồng chéo phải được giải quyết cuối cùng.
- Các vật thể không đẩy nhau ra xa hơn mức cần thiết để 2 đơn vị có thể đứng và di chuyển cạnh nhau trong một đội hình.
- Không nên có bất kỳ hành vi kỳ lạ nào khi các vật thể co cụm về cùng một đích.
- Có thể hỗ trợ các đơn vị có kích thước khác nhau, và thậm chí các hình dạng lồi khác nhau.
Những gì tôi đã nghĩ cho đến nay là thay vì phát hiện va chạm, phát hiện các va chạm trong tương lai để sự chồng chéo không bao giờ xảy ra. Sau đó áp dụng các ràng buộc, đảm bảo vận tốc của 2 đơn vị không làm cho chúng trùng nhau. Tôi vẫn đang nghiên cứu thuật toán để hạn chế chuyển động vượt ra ngoài sự chồng chéo.