Tìm đường và tránh va chạm trên thiết bị di động


8

Hiện tại tôi đang phát triển một trò chơi giống như Diablo cho nền tảng di động (iphone5 +).

Một tìm kiếm A * đơn giản sẽ tìm thấy đường dẫn, nhưng việc tránh va chạm vẫn cần được xem xét.

Sẽ có khoảng 50 quái vật hoạt động cùng một lúc, vì vậy hiệu suất là rất quan trọng.

Tôi tìm thấy một số phương pháp có thể làm việc.

  1. NavMesh + RVO

    Các Recast / đường vòng thư viện hoạt động tốt trên các pathfindingphần, nhưng mô phỏng đám đông của mình một cách nhanh chóng đạt tới giới hạn (hơn 5ms cho 30 đại lý).

    Một thư viện RVO2 khác có vẻ ổn (dưới 2ms cho 50 đại lý), nhưng thư viện có một số vấn đề về giấy phép.

  2. Dòng chảy + Động cơ Vật lý

    Nhiều trò chơi RTS sử dụng phương pháp này, nhưng có vẻ như cần phải có động cơ vật lý để giải quyết va chạm. Nếu nhiều tác nhân không chia sẻ một mục tiêu chung, phương pháp này có thể có giá cao hơn so với tìm đường truyền A * truyền thống.

  3. Hành vi chỉ đạo + Động cơ Vật lý

    Hành vi chỉ đạo bao gồm nhiều khái niệm, tôi nghĩ simple avoidance behaviorcó thể hoạt động (chỉ cần rẽ trái / phải nếu có thứ gì đó ở phía trước), nhưng phương pháp vẫn yêu cầu một công cụ vật lý để làm việc cùng nhau.

Tôi vẫn không chắc chắn nên sử dụng cái nào, có thể tồn tại các phương pháp tránh va chạm và tránh va chạm khác.

PS Halo:Spartan Strikesử dụng Havok AI (dựa trên RVO?), Nhưng tôi không thấy nhiều kẻ thù trong trò chơi đó, vì vậy tôi tự hỏi liệu phương pháp đầu tiên (NavMesh + RVO) sẽ hoạt động tốt trên nền tảng di động.


GPU của bạn có hơn 50 đơn vị xử lý, do đó, việc chạy A-star trên GPU cho mỗi quái vật sẽ chạy nhanh như trên CPU thông thường cho tác nhân ne.
Pieter Geerkens 16/07/2015

@PieterGeerkens Phần tìm đường hiện hoạt động tốt trên thiết bị di động (dưới 0,1ms mỗi yêu cầu), nhưng phần tránh va chạm thì không. Ngoài ra, chúng tôi có rất nhiều tác vụ kết xuất, vì vậy tôi đoán GPU sẽ không có thời gian rảnh để tránh va chạm.
Lostyzd 16/07/2015

Câu trả lời:


4

Đây là một câu hỏi khá thú vị và tôi sẽ cố gắng đóng góp với những gì tôi có thể.

Đầu tiên, tôi nghĩ bạn phải xác định rõ ràng ranh giới cho trò chơi mà bạn đang cố gắng tạo và xác định những câu hỏi đó (một số có thể đã được trả lời).

  • Làm thế nào xa là quái vật aggro?
  • Có bao nhiêu quái vật cùng một lúc là mục tiêu của bạn?
  • Địa hình của bạn được tổ chức như thế nào? Nó được lát gạch?
  • Bạn muốn tránh va chạm bao nhiêu?

Để trích dẫn câu trả lời từ đây về cách thực hiện tìm đường trong starcraft 2:

Starcraft II sử dụng một tam giác Delaunay bị hạn chế về địa hình và các tòa nhà trên bản đồ để tạo ra một hải quân; A * với bộ lọc phễu được sử dụng để dẫn dọc theo lưới này, có tính đến bán kính đơn vị; sau đó các lớp tránh va chạm cục bộ và tránh va chạm cục bộ được thêm vào trên đó, bao gồm tính năng "đẩy các đơn vị nhàn rỗi ra khỏi đường đi" trong đó có thể thay thế một đơn vị thay vì đi xung quanh nó trong một số trường hợp nhất định. Ngoài ra, các đơn vị di chuyển song song được bỏ qua cho các mục đích tránh va chạm vì chúng có thể được đảm bảo để không ảnh hưởng lẫn nhau; [...] SC2 sử dụng sáu lực lái: theo sau, đổ xô, nhóm, tách, tránh và đến.

Vì vậy, quay trở lại 3 đề xuất của bạn:

  1. NavMesh + RVO -> Nếu có vấn đề về giấy phép, thì đó không phải là một tùy chọn. Nó có thể là thực hiện dễ dàng nhất mặc dù.
  2. Dòng chảy + Công cụ vật lý -> Nó phụ thuộc một cách trung thực, nhưng có vẻ như thực sự tính toán chuyên sâu trong một môi trường bán động như những gì bạn muốn
  3. Hành vi chỉ đạo + Động cơ vật lý -> Hành vi lái dường như đối với tôi con đường để đi. Bằng cách đó, bạn có thể xác định một số hành vi đàn khá đẹp cho trò chơi của mình, ví dụ, tùy thuộc vào loại quái vật. Và nó quy mô tốt với số mob. Tuy nhiên, tôi sẽ tránh xa vật lý để phát hiện va chạm. Hành vi tránh đơn giản là đủ, giảm tốc độ hoặc tăng, rẽ, v.v.

Một số lưu ý về các hành vi Chỉ đạo, bạn có thể xác định bao nhiêu lực lái mà bạn cần, với các khu vực bạn muốn. Bạn cần ít nhất 3, để đổ xô / thu hút / đẩy lùi, nhưng nhiều hơn có lẽ là thú vị.

Sau đó, hãy thử tìm một thư viện thực hiện các hành vi chỉ đạo để xem nó có phù hợp với nhu cầu của bạn không (như thế này ? Tôi không thực sự biết bất kỳ, nhưng nó tồn tại).

Nếu thư viện không phù hợp với nhu cầu của bạn, thì bạn sẽ vui! Nhưng có đủ tài nguyên và thuật toán để tự thực hiện các hành vi đổ xô. Ví dụ 1 Ví dụ 2

Nếu bạn chọn tự thực hiện, hãy biết rằng có một số tối ưu hóa tốt sẽ được thực hiện, vì phạm vi của đại lý của bạn bị giảm chẳng hạn bởi vị trí của nó trong đàn. Dù sao nó cũng nên được đưa vào một số thuật toán.

Vâng, đó là kiến ​​thức tốt nhất của tôi, dù sao tôi cũng không chắc


Cảm ơn đã trả lời. Hành vi lái sẽ hoạt động tốt trong một cảnh dày đặc? Các bản demo trong hướng dẫn này có nhiều va chạm và dao động.
Lostyzd 20/07/2015

1

Nếu đường dẫn của kẻ thù không linh hoạt (Động sẽ là mỗi cặp nhân viên đang tấn công các mục tiêu khác nhau và các đường dẫn đến các mục tiêu đó phải được cập nhật mỗi khung hình đôi)

Sau đó, tôi sẽ thực hiện kết hợp các trường dòng chảy và hành vi lái nếu hiệu suất là mối quan tâm chính của bạn. Có một số đối tượng phức tạp hơn liên quan như phân vùng không gian các đại lý của bạn để tìm hàng xóm dễ dàng hơn nhưng đó là cách tốt nhất để bạn thực hiện. (xóa tìm kiếm A * của bạn và sử dụng các trường lưu lượng để chỉ đạo các đại lý của bạn)

Hai thuật toán này được kết hợp thường được coi là giải pháp tối ưu hóa nhất cho các cảnh dày đặc tác nhân với không có nhiều đường dẫn động.

Tôi sẽ tránh vật lý bất kể lựa chọn cuối cùng của bạn vì nó có thể trở nên nặng nề.

Va chạm giữa các tác nhân gần như hoàn toàn có thể được xử lý bằng các hành vi lái và trường dòng chảy làm giảm trọng lượng của 50 tác nhân tính toán đường dẫn. Tuy nhiên, hãy nhớ rằng các trường lưu lượng ngày càng đắt hơn khi kích thước bản đồ của bạn càng lớn và kích thước lưới của bạn càng nhỏ và lựa chọn mục tiêu của bạn phải linh hoạt hơn.


Tôi thích ý tưởng của các trường dòng chảy. Nhưng theo như tôi biết, cả Hành tinh hủy diệtStarcraft đều sử dụng vật lý để tránh va chạm, vì vậy tôi không chắc liệu trường dòng chảy có thể được thực hiện mà không có hệ thống phyics hay không.
Lostyzd 24/07/2015

Họ có thể, tất cả những gì bạn cần làm là tạo ra một hành vi điều khiển trường dòng chảy. Chức năng duy nhất của nó là kiểm tra vị trí lưới hiện tại của nó cho vectơ dòng chảy của nó. Tất cả một trường dòng chảy là chỉ đạo các đại lý của bạn, các hành vi lái khác chăm sóc va chạm.
Saevax 24/07/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.