AI để di chuyển tàu vũ trụ có hình dạng tùy chỉnh (hình dạng ảnh hưởng đến hành vi di chuyển)


15

Tôi đang thiết kế một trò chơi chiến lược chiến đấu hạm đội không gian 3D-6DOF dựa trên mạng, phụ thuộc rất nhiều vào việc tùy biến tàu. Hãy để tôi giải thích trò chơi một chút, vì bạn cần biết một chút về nó để đặt câu hỏi.

Mục đích của tôi là khả năng tạo ra đội tàu của riêng bạn với hình dạng tùy chỉnh và các mô-đun kèm theo (cánh quạt, dầm máy kéo ...) sẽ mang lại lợi thế và bất lợi cho mỗi tàu, do đó bạn có rất nhiều phân phối đội tàu khác nhau. Ví dụ, con tàu dài có hai cánh quạt ở bên cạnh sẽ giúp con tàu quay xung quanh chiếc máy bay đó một cách dễ dàng, những con tàu lớn hơn sẽ di chuyển chậm trừ khi bạn đặt nhiều cánh quạt ở phía sau (do đó sẽ tiêu tốn nhiều điểm và năng lượng "xây dựng" hơn khi di chuyển, và nó sẽ chỉ di chuyển nhanh về hướng đó.) Tôi dự định cân bằng tất cả các trò chơi xung quanh tính năng này.

Trò chơi sẽ xoay quanh hai giai đoạn: mệnh lệnh và giai đoạn chiến đấu. Trong giai đoạn đặt hàng, bạn chỉ huy các tàu khác nhau. Khi tất cả người chơi kết thúc giai đoạn đặt hàng, giai đoạn chiến đấu bắt đầu và các lệnh tàu được giải quyết trong thời gian thực một thời gian, sau đó hành động tạm dừng và có một giai đoạn đặt hàng mới.

Vấn đề xảy ra khi tôi nghĩ về đầu vào của người chơi. Để di chuyển một con tàu, bạn cần bật hoặc tắt các cánh quạt khác nhau nếu bạn muốn điều khiển, di chuyển về phía trước, phanh, xoay tại chỗ ... Những cánh quạt này không phải làm việc với toàn bộ sức mạnh của chúng, để bạn có thể đạt được nhiều chuyển động hơn kết hợp với cánh quạt ít hơn.

Tôi nghĩ rằng cách tiếp cận này là một chút nhàm chán. Người chơi không muốn nghịch ngợm với động cơ hay bất cứ thứ gì, bạn chỉ muốn M CHUYỂN và GIẾT. Cách tôi dự định người chơi sẽ ra lệnh cho các tàu này là theo điểm đếnvòng quay , và sau đó AI sẽ tính toán công suất chân vịt chính xác để đạt được chuyển động và xoay đó. Lực đẩy không nhất thiết phải giống nhau trong toàn bộ tính toán lần lượt (sau khi đã có lệnh) nên sẽ rất tuyệt nếu các tàu phản ứng khi chúng di chuyển, điều chỉnh sức mạnh của cánh quạt theo nhu cầu của chúng một cách linh hoạt, nhưng có thể là quá khó để thực hiện và nó không thực sự cần thiết để trò chơi hoạt động.

Trong cả hai trường hợp, AI sẽ quyết định kích hoạt cánh quạt nào cho quỹ đạo tốt nhất (hoặc ít nhất là không tệ nhất) để đạt được?

Tôi mặc dù về một số cách tiếp cận:

  • Học AI: Các loại tàu sẽ học về chuyển động của chúng bằng cách thử và sai, điều chỉnh hành vi của chúng với nhiều cách sử dụng hơn và cuối cùng trở nên "thông minh". Tôi không muốn tham gia RẤT NHIỀU vào mã hóa AI và tôi nghĩ nó có thể gây khó chịu cho người chơi (ngay cả khi bạn có thể để nó học mà không cần chơi.)
  • Chuyển động dấu thời gian được tính toán trước: Khi tạo tàu, TẤT CẢ các chuyển động có thể được tính cho từng cấu hình cánh quạt và công suất trong một thời gian delta nhất định. Trí nhớ chuyên sâu, xấu xí, xấu.
  • Các quỹ đạo được tính toán trước: Tương tự như trên nhưng không phải cho từng đồng bằng mà là toàn bộ quỹ đạo, sau đó sẽ được trang bị càng nhiều càng tốt. Yêu cầu cấu hình cánh quạt cố định cho toàn bộ giai đoạn chiến đấu và vẫn còn nhiều bộ nhớ, xấu và xấu.
  • Buộc vũ phu liên tục: AI liên tục kiểm tra TẤT CẢ các cấu hình cánh quạt có thể trong toàn bộ giai đoạn chiến đấu, xác định trước một vài bước thời gian và quyết định xem cái nào là tốt nhất dựa trên đó. Con: những gì tốt bây giờ có thể không tốt về sau và nó quá nặng về CPU, xấu và xấu.
  • Buộc vũ phu duy nhất: Tương tự như trên, nhưng chỉ buộc vũ phu khi bắt đầu mô phỏng, do đó, nó cần cấu hình cánh quạt không đổi trong toàn bộ giai đoạn chiến đấu.
  • Kiểm tra góc liên tục: Đây không phải là một phương pháp di chuyển đầy đủ, nhưng có thể là một cách để loại bỏ các cấu hình cánh quạt "ngu ngốc". Với vectơ bình thường của chân vịt hiện tại và vectơ cuối cùng, bạn có thể tính gần đúng công suất cần thiết cho chân vịt dựa trên góc. Bạn phải làm điều này liên tục trong toàn bộ giai đoạn chiến đấu. Tôi đã tìm ra điều này gần đây vì vậy tôi đã không suy nghĩ quá nhiều. Một tiên nghiệm, nó có nhược điểm "những gì tốt bây giờ có thể không tốt sau này" và nó không quan tâm đến các cánh quạt khác có thể hoạt động cùng nhau để tạo ra một cấu hình đẩy tốt hơn.

Tôi thực sự bị mắc kẹt ở đây. Có ý kiến ​​gì không?


Bạn đã nhìn vào hành vi lái?
ném đá vào

1
@stonemetal chắc chắn. Vấn đề ở đây là các hành vi lái thường được mô hình hóa với việc kiểm soát hoàn toàn vị trí và góc quay của đối tượng và một số ràng buộc (hoặc ít nhất đó là những gì tôi tìm thấy trên web.) AI ở đây không có toàn quyền kiểm soát thực thể , nhưng chỉ hơn những thứ (cánh quạt) làm cho thực thể di chuyển. Tôi gặp khó khăn khi kết nối các hành vi lái này với đầu máy thực tế của tàu vũ trụ.
kaoD

đó là lý do tương tự hành vi lái không hoạt động tốt trên xe đua. Hành vi chỉ đạo là tuyệt vời nhưng chúng không phải là giải pháp phổ quát cho mọi thứ.
tenpn

@haoD Tôi đang suy nghĩ điều gì đó dọc theo dòng ghostonline đã trả lời. Hãy để họ xây dựng những gì đã từng, sau đó dịch nó thành các ràng buộc cho một hành vi lái. Mặc dù từ phản ứng của bạn, có vẻ như hành vi lái có thể không đủ linh hoạt.
stonemetal

1
Tôi biết điều này là siêu cũ, nhưng những gì bạn đang tìm kiếm được gọi là kế hoạch chuyển động động học
mklingen

Câu trả lời:


4

Xin lỗi đã không có một giải pháp thử và thử, nhưng điều này không thể được giải quyết bằng toán học?

Cho bất kỳ chân vịt và phần bù của nó từ tâm khối lượng, bạn có thể tính toán mặt phẳng nào bạn có thể xoay.

Đối với bất kỳ chuyển động, bạn có thể sử dụng 1 hoặc nhiều cánh quạt. Mỗi cánh quạt có thể được truy vấn để xem liệu mặt phẳng của nó có thể đóng góp vào hướng mục tiêu hay không, phải mất bao nhiêu nỗ lực từ cánh quạt để đóng góp (cánh quạt cách xa CoM có thể sử dụng ít năng lượng hơn để tạo ra nhiều vòng quay hơn) và mức độ gần của nó bạn đến mục tiêu. Sau đó, bạn A * trên không gian tìm kiếm đó cho đến khi bạn đưa ra giải pháp với chi phí thấp, có thể là tổng năng lượng ít nhất được sử dụng hoặc chuyển động nhanh nhất.

Tiếp tục đánh giá lại rằng khi bạn hoàn thành lượt và sức mạnh vừa phải khi bạn tiếp cận mục tiêu, có thể với bộ điều khiển PID.

Đối với chuyển động về phía trước, một giải pháp đơn giản sẽ thúc đẩy bạn luôn tiến về phía trước, giảm tốc độ mục tiêu khi bạn tiếp cận mục tiêu. Khi bạn có không gian 3D để chơi, bạn có thể tránh các thói quen rẽ 3 điểm phức tạp. Bạn cần tính hệ số đầu ra từ các chân vịt được chọn cho tốc độ đường thẳng vào các tính toán rẽ của bạn, như một loại trạng thái ban đầu.

Điều này rất lạc hậu nhưng tôi không thấy bất kỳ sai sót lớn nào. Chỉ cần rất nhiều công việc khó khăn và điều chỉnh số. :)


Đây là khi tôi đang tìm kiếm, một giải pháp toán học ... cảm ơn! Tôi hy vọng nó dễ dàng như âm thanh.
kaoD

7

Vì bạn muốn từ bỏ một chút kiểm soát của người chơi để có thể chơi bằng AI, bạn có thể muốn xem xét đơn giản hóa hiệu ứng của việc tấn công cánh quạt và thay đổi kích thước tàu thành các tham số dễ quản lý hơn cho thuật toán máy tính. Người chơi vẫn được phép thêm cánh quạt trên bất kỳ phần nào của con tàu, nhưng sau khi hoàn thành, nó được 'nén' thành các tham số.

Mỗi cánh quạt ảnh hưởng đến tốc độ quay của con tàu, hoặc, kết hợp với một chân vịt được đặt song song, ảnh hưởng đến tốc độ di chuyển trong một chiều cụ thể. Kết hợp các thông số này cho mỗi cánh quạt, và bạn có được tốc độ và tốc độ quay tối đa cho một con tàu. Kết hợp hai tham số này cho mỗi chân vịt và chân vịt được đặt thành tổng tốc độ và tốc độ tối đa cho toàn bộ con tàu, cho tất cả các kích thước có sẵn (lên, xuống, trái, phải, tiến, lùi).

Sử dụng tốc độ quay và vận tốc cho mỗi chiều, bạn có đủ thông tin để thực sự cho phép tàu di chuyển đến đích. Người chơi sẽ thấy hiệu ứng của cấu hình cánh quạt của mình, nhưng dưới mui xe, đầu vào của anh ta được đơn giản hóa rất nhiều. Bạn có thể đưa ra nhiều chiến lược bay dựa trên quãng đường mà con tàu phải đi, để chuyến bay trông tự nhiên hơn và tăng cảm giác của người chơi mà anh ta hoặc cô ta đã kiểm soát chuyển động của con tàu. Nhưng cuối cùng, như bạn đã nói, sẽ không có vấn đề làm thế nào con tàu đến đích và liệu tuyến đường của nó có tối ưu hay không, nó chỉ cần ở đó và thời gian đến của nó bị ảnh hưởng bởi cấu hình cánh quạt.

Đối với kích thước tàu, bạn có thể tính toán chúng khi bạn có các giá trị vận tốc nén cho hiệu ứng thô hoặc sử dụng chúng trong khi tính toán để có hiệu ứng chính xác hơn. Bạn có thể muốn kiểm tra xem phương pháp chính xác có đáng để nỗ lực hay không, bởi vì sự khác biệt có thể không ảnh hưởng đến ý thức kiểm soát của người chơi.


Không chính xác những gì tôi đang tìm kiếm, nhưng có thể thực hiện các mẹo nếu tôi thực sự cần. Upvote cho ý tưởng :)
kaoD

0

Trong không gian, hình dạng không ảnh hưởng đến chuyển động. Không có không khí để kéo về.

Đó là con tàu cộng với tổng khối lượng bổ sung mới là vấn đề. Đó là một vấn đề trọng lực đẩy khối lượng đơn giản hơn. Vì vậy, bạn có thể thực hiện các tính toán này hoặc vì đây là một trò chơi cơ bản, hãy phát triển một hệ thống chuyển động như game nhập vai như Traveller có.


Chào mừng đến với GD.SE! Câu hỏi này đã có câu trả lời được chấp nhận và đã được hỏi 2 năm trước - có lẽ bạn có thể trả lời một số câu hỏi mới hơn trên trang web.
Cực

Vâng, tất cả đều đúng, nhưng tôi luôn cho rằng người khác sẽ vấp ngã sau đó (như tôi đã làm) và tìm thấy nó có ích. hehe, tôi không đến đây để trả lời câu hỏi giống như hầu hết, tìm hiểu các giải pháp cho vấn đề của riêng tôi.
gnoll110

@Pole câu hỏi poster ở đây. Tôi thấy câu trả lời của anh ấy rất thú vị! Tôi rất vui vì anh ấy đã quay lại để trả lời và tôi nghĩ rằng việc tăng thêm giá trị nhiều năm sau đó là một trong những phần có giá trị nhất của SO.
kaoD

@ gnoll110 Tôi có thể sai ở đây. Không có lực cản, được thôi, nhưng góc của vectơ lực đẩy với tâm khối lượng ảnh hưởng đến cách con tàu dịch hoặc xoay ... đúng không? Ví dụ: một động cơ nội tuyến với trung tâm dịch khối, trong khi di chuyển nó ra khỏi tâm khối sẽ thêm một thành phần quay cho tàu.
kaoD

@kaoD Xin lỗi nếu nó xuất hiện một chút khắc nghiệt - rõ ràng rất nhiều SO đang gia tăng giá trị sau này. Tôi chỉ gợi ý rằng anh ấy cũng có thể trả lời những câu hỏi mới hơn - càng nhiều câu hỏi được trả lời thì càng tốt!
Cực
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.