Làm cách nào tôi có thể triển khai một tính năng chuyển tiếp nhanh về phía trước trong trò chơi của mình?


15

Làm cách nào tôi có thể triển khai tính năng chuyển tiếp nhanh cho trò chơi phòng thủ tháp của mình như trong http://fieldrunners.com/ và các trò chơi TD khác?

Tôi đang sử dụng Unity 3D. Sẽ có một cái gì đó để quản lý ít khung hình hơn mỗi giây hoặc một số loại chuyển động nhanh của kẻ thù và tốc độ bắn của tháp, et cetera?


Bạn đã cố gắng để tăng tần suất cập nhật ?? bạn có thể cần phải bỏ qua các khung ..
Concept3d

Câu trả lời:


7

nếu trò chơi của bạn không có các mô phỏng phức tạp hoặc đắt tiền về mặt tính toán đòi hỏi phải tách chúng thành các mốc thời gian cập nhật độc lập, bạn có thể sử dụng một cách tiếp cận đơn giản dựa trên mã trong các Update()chức năng của mình theo giá trị Time.time của Unity và trong mã của bạn đặt giá trị Thời gian .timeScale là bất cứ điều gì bạn muốn. 0 == đã tạm dừng, 1 = bình thường, những người thử nghiệm của chúng tôi thích đặt timeScale> 1 để hoàn thành công việc nhanh hơn.

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

Cách tiếp cận: Tỷ lệ mô phỏng cao hơn

Thời gian của bạn cho giao diện người dùng của bạn nên được tách rời khỏi vòng lặp trò chơi thực tế của bạn, cũng như kết xuất của bạn. Nói ví dụ thế giới của bạn chạy ở tốc độ gấp 4 lần. Hãy nói rằng với tốc độ cơ bản (1x), trò chơi của bạn chạy 30 cập nhật mỗi giây.

Sau đó, bạn sẽ có một cái gì đó như sau, khi ở chế độ tua nhanh:

  • World logic chạy 4 bản cập nhật cho mỗi bản cập nhật của UI và renderer. Điều này có nghĩa là nó cần chạy 120 cập nhật mỗi giây. Do đó, mô hình thế giới (dữ liệu) của bạn được cập nhật với tốc độ này.
  • Trình kết xuất và logic UI đều tiếp tục thăm dò ý kiến ​​hoặc làm bất cứ điều gì với 30 cập nhật mỗi giây.

Nói cách khác, toàn bộ trò chơi không chạy nhanh hơn. Phần mô phỏng là.

Bạn có thể suy luận hai điều từ đây:

  1. Bạn cần giữ cho logic trò chơi của mình đủ đơn giản để bạn có thể dễ dàng chạy nó nhanh hơn bốn lần trên nền tảng mục tiêu của mình, HOẶC bạn cần giới thiệu các phương pháp để ngoại suy các khía cạnh khác nhau của trò chơi nhanh hơn - tuy nhiên, điều này có thể dẫn đến một mô hình khác với những gì nó đã có nếu bạn chỉ đơn giản là sử dụng một mô phỏng nhịp độ nhanh hơn. Vì vậy, sự đánh đổi sẽ được xử lý chi phí cho chính xác. Xem cách tiếp cận 2, bên dưới.

  2. Đó là sự tách biệt các mối quan tâm cho phép bạn dễ dàng tăng tốc mô phỏng thế giới của mình, sự tách biệt đó là mô hình, chế độ xem và bộ điều khiển ( MVC ). Nếu dữ liệu thế giới của bạn (M), logic kết xuất (V) và logic trò chơi (C) bị trộn lẫn, bạn thực sự sẽ không thể làm điều này, ít nhất là không phải không bị đau nửa đầu.

Cách tiếp cận: Phép ngoại suy dựa trên thời gian deltas

Như đã đề cập ở trên, bạn sẽ cần tính toán chuyển động dựa trên khoảng cách mà một thứ gì đó sẽ đi được trong một thời gian nhất định. Điều này giả định rằng vật lý trò chơi của bạn vốn đã thực tế hơn trong mô phỏng của họ, tuy nhiên, điều này có thể không phải là trường hợp. Đây là một chủ đề khá lớn và phức tạp hơn đáng kể. Bạn sẽ cần hỏi thêm câu hỏi về nếu bạn muốn biết. Về cơ bản, bạn sẽ thực hiện một số tính toán để làm mọi thứ đúng. Bạn sẽ cần phải đối phó với sự thâm nhập lẫn nhau trong các vụ va chạm và một loạt các vấn đề khác mà tôi sẽ không đi vào đây.

Để kết luận

Điều này cung cấp cho bạn các phác thảo chung. Lựa chọn ngôn ngữ của bạn là của riêng bạn, có lẽ bạn biết cách làm điều đó trong Unity hoặc bạn không biết. Thời gian trong bất kỳ ngôn ngữ nào đòi hỏi bạn phải hiểu chi tiết về các vấn đề, tôi khuyên bạn nên bắt đầu với các bài viết của Gaffer và kiểm tra các tài liệu API của Unity.


Nếu bạn định sử dụng cách tiếp cận tốc độ mô phỏng cao hơn và bạn muốn hỗ trợ làm chậm , có lẽ bạn cần thực sự có tốc độ mô phỏng cơ sở cực kỳ chậm , sau đó chạy theo mặc định ở 100 bước / khung mô phỏng.
bobobobo

9

Theo nguyên tắc chung, việc cập nhật logic trò chơi nên được tách rời khỏi cập nhật đồ họa của trò chơi - nghĩa là mô phỏng lối chơi, AI, chuyển động đơn vị, et cetera của bạn không nên gắn với tốc độ mà trò chơi đang hiển thị . Thông thường, vòng lặp trò chơi chính sẽ tính thời gian thực đã trôi qua kể từ lần cập nhật trò chơi cuối cùng và gửi bước thời gian delta đó đến thói quen cập nhật của từng đối tượng logic trò chơi riêng lẻ.

Trong một kịch bản như vậy, việc thực hiện mở rộng thời gian (bao gồm chuyển tiếp nhanh) trở nên đơn giản trong trò chơi của bạn. Đơn giản chỉ cần đặt trước thời gian logic trò chơi theo một số giá trị vô hướng để kiểm soát mức độ "nhanh chóng" hoặc làm chậm thời gian. Theo mặc định, giá trị này sẽ là một và ví dụ: khi người dùng nhấn phím "chuyển tiếp nhanh", bạn đặt nó thành 1,5 và tất cả các mô phỏng sẽ xuất hiện nhanh hơn 50%. Tuy nhiên, bạn vẫn sẽ hiển thị ở cùng một tỷ lệ.

Tôi không quen thuộc lắm với Unity và do đó có thể sai trong đề xuất sau, nhưng Unity có một thành phần quản lý thời gian có thể hữu ích để thực hiện điều này. Nó trong thực tế đã có một tài sản thời gian. Mô tả của thành phần ngụ ý rằng lớp được thiết kế cho các đối tượng vật lý, nhưng nó cũng có thể được áp dụng cho kịch bản của bạn.


1
Nó chắc chắn có thể áp dụng cho scenerio của mình. Tất cả những gì anh ta cần làm là đặt Time.timeScale thành một số nhân và mọi thứ sẽ nhanh hơn. Đó là một sự thay đổi trên bảng, do đó, nếu có những thứ như tương tác menu và như vậy chúng cũng sẽ đi nhanh hơn.
Tetrad

thnx một lần nữa Tetrad :)
Syed
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.