Làm thế nào tôi có thể giữ cho hai người chơi đua xe được đồng bộ hóa?


8

Tôi đang làm việc trên một trò chơi di động Unity, giống như một phiên bản nhiều người chơi của Temple Run . Tôi đang thấy độ trễ mạng dao động (thường là 200-500ms) vì nền tảng di động.

Hai nhân vật người chơi được hiển thị là chạy dọc theo cùng một đường và phải thực hiện các hành động đơn giản (nhảy, trượt, powerup, v.v.) để vượt qua chướng ngại vật.

Khi một tin nhắn đến muộn, trò chơi giả định rằng người chơi từ xa đã vượt qua một chướng ngại vật. Điều này thường hoạt động tốt, nhưng trong trường hợp một người chơi bị giết bởi một chướng ngại vật, tôi muốn người chơi từ xa dường như chết trên cùng một chướng ngại vật / vị trí như người chơi địa phương. Do độ trễ, người chơi từ xa dường như đã vượt qua chướng ngại vật trước khi tin nhắn thông báo cái chết của họ thậm chí đến.

Làm thế nào tôi có thể giữ cho các cầu thủ được đồng bộ hóa?


Tôi đã cố gắng chuyển người chơi từ xa trở lại vị trí tử vong của người chơi địa phương ngay lập tức khi có thông báo tử vong, nó trông có vẻ khó xử và có thể gây ra các vấn đề đồng bộ hóa khác.

Câu trả lời:


10

Phân tích vấn đề

Giao tiếp thời gian thực qua kết nối có độ trễ cao rõ ràng là không thể.

Tất nhiên bạn có thể thử ảo ảnh (như bạn đang làm bằng cách làm cho trình phát từ xa dường như đã vượt qua một chướng ngại vật khi nó chưa được biết đến). Khi ảo ảnh đó thất bại (như của bạn khi người chơi từ xa không thực sự vượt qua chướng ngại vật, nhưng thay vào đó đã chết ), không còn gì có thể làm được nữa.

vấn đề

Trong một trường hợp (chẳng hạn như ở đây) khi sự thất bại của ảo ảnh trông thực sự tồi tệ , có thể dễ dàng chấp nhận sự thật hơn và chỉ cần làm hết sức mình để đại diện cho tình huống như thực tế.

Giải pháp tiềm năng

Làm thế nào về việc làm chậm người chơi khác theo nghĩa đen nếu quyết định của họ mất thời gian để tuyên truyền?

một giải pháp

Mỗi người chơi nhìn thấy một hình ảnh của người kia, nhưng hình ảnh đó chậm lại khi tiếp cận các chướng ngại vật mà thông điệp quyết định vẫn còn trong không khí. Chỉ khi nhận được tin nhắn, chúng mới vượt qua hoặc vượt qua chướng ngại vật. Sau chướng ngại vật, hình ảnh sau đó tăng tốc trở lại để bắt kịp, giảm tốc độ một lần nữa cho lần tiếp theo, nếu cần thiết.

Trên một kết nối có độ trễ thấp, quyết định sẽ đến sớm và việc chậm lại và tăng tốc sẽ không đáng kể. Trên một kết nối có độ trễ cao, điều này sẽ khiến người chơi khác dường như bị tụt lại phía sau, nhưng đảm bảo rằng trạng thái trò chơi quan trọng hơn của "người đã vượt qua trở ngại này" phù hợp với cả hai người chơi.


Cảm ơn vì đã trả lời. Chúng tôi đã thử giải pháp tiềm năng mà bạn đã đề xuất nhưng không thấy khả thi vì những lý do sau: 1. Lý do đầu tiên là tốc độ cao của trò chơi của tôi. Để che cửa sổ 200ms, tôi sẽ phải làm chậm trình phát từ xa xuống tốc độ 1/4, điều này gây ra sự bất thường về hình ảnh rất khó chịu và có thể nhìn thấy đặc biệt trong trường hợp người chơi chạy cạnh nhau. 2.Since độ trễ đang dao động, Thật khó để tính toán giảm tốc độ cho người chơi từ xa, điều này sẽ đảm bảo rằng tin nhắn sẽ đến trước khi nó vượt qua chướng ngại vật.
Zohaib Javed

2
@ZahaibJatted Thường là giải pháp thực sự duy nhất là che giấu độ trễ thông qua hình ảnh động. Thay vì chạy chậm lại khi đến chướng ngại vật, hãy cân nhắc dừng lại hoàn toàn ở rìa và thực hiện một hoạt hình "chuẩn bị nhảy" mất một giây để chơi. Khi gói "đã làm cho nó" xuất hiện, hãy thực hiện bước nhảy thực tế và chuyển tiếp về vị trí thực của chúng.
BlueRaja - Daniel Pflughoeft 7/214

Xin lỗi vì đã trả lời trễ. Vì vậy, giải pháp tôi thực hiện là trong đoạn cắt cảnh bắt đầu được chơi ở đó tất cả người chơi có thể được nhìn thấy. Người chơi địa phương luôn ở vị trí đầu tiên. Sau khi cắt xong. Tôi chỉ cần di chuyển tất cả các trình phát từ xa phía sau đủ để họ có thể có thời gian để nhận thông tin rằng người chơi cục bộ đã chết trên chướng ngại vật cụ thể hoặc trượt hoặc nhảy chính xác trên đường dẫn. Và cuối cùng, có một con đường thẳng, nơi tôi chỉ cần đồng bộ hóa người chơi một lần nữa. Vì vậy, kết quả được hiển thị chính xác.
Zohaib Javed

4

Để bổ sung cho câu trả lời của Anko, bạn có thể thay đổi một chút thiết kế trò chơi của mình bằng cách thêm hậu quả của chướng ngại vật thất bại sau thất bại, ví dụ, một cú nhảy thất bại dẫn đến việc rơi xuống vũng bùn khiến người chơi không đủ điều kiện. Bằng cách này, người chơi khác nhận thấy sự thất bại bằng cách nhìn thấy người khác rơi xuống bùn, trong khi người chơi không nhìn thấy nó ngay lập tức.

Đây là một bài đăng blog hay về vấn đề này (không phải gần đây nhưng nó khá thú vị): Quản lý và đồng bộ hóa thời gian của Darrin West .


1

Điều đó có quan trọng đối với người chơi địa phương để biết chính xác vị trí của cái chết của người chơi từ xa không? Giả sử người chơi từ xa không thể nhảy qua một trong những chướng ngại vật của bạn, và do đó đã chết.

Người chơi đã chết sẽ thấy cái chết của họ ngay lập tức và sẽ tiếp tục từ vị trí xảy ra tai nạn. Không có gì kỳ diệu ở đây.

Người chơi địa phương (người vẫn còn sống và đá) sẽ thấy người chơi từ xa vượt qua chướng ngại vật thành công. Một thông báo về cái chết sẽ đến. Người chơi từ xa sẽ vấp ngã, ngã và từ từ biến mất. Lần tới khi bạn biết vị trí của người chơi từ xa, người chơi sẽ mờ dần đến vị trí chính xác đó, chạy lại bình thường. Trong một thiết lập như vậy, người chơi sẽ nhận thức được độ trễ, nhưng độ trễ sẽ được biểu diễn dưới dạng một yếu tố trò chơi (vấp ngã) thay vì giật mình xuất hiện và biến mất người chơi.

Nếu tốc độ của hai người chơi là không đổi, quỹ đạo chạy được xác định trước và thời gian cần thiết để phục hồi sau cú ngã, bạn có thể loại bỏ hoàn toàn phần mờ dần / biến mất. Hãy tưởng tượng một người chơi từ xa chết ở một trong những chướng ngại vật. Đại diện cục bộ của nó vẫn đang chạy khi có thông báo đến. Người chơi được hiển thị vấp ngã ngay lập tức. Phải mất thời gian để họ đứng dậy và bắt đầu chạy lại. Trên thực tế, phải mất nhiều thời gian như thể chúng được hiển thị chết ở chướng ngại vật. Do đó, khi chúng hoạt động trở lại, cả vị trí cục bộ và từ xa đều được đồng bộ hóa.

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.