Tiết kiệm tiến trình của người chơi trong trò chơi Unity


22

Tôi đang làm một trò chơi bằng cách sử dụng công cụ trò chơi Unity. Tôi muốn lưu tiến trình của người chơi bao gồm cấp độ, điểm kinh nghiệm, nhân vật được chọn, v.v. Hiện tại tôi đang sử dụng playerprefs nhưng tôi muốn biết liệu điều này có hiệu quả với những game thủ sẽ chạy trò chơi này trên thiết bị di động của họ (Android / iOS) không như máy tính để bàn (OSX / PC)? Nếu không thì tôi nên lưu thông tin này như thế nào? Tôi muốn tự động lưu tiến trình của người chơi sau khi xóa từng giai đoạn.

Câu trả lời:


30

PlayerPrefs sẽ hoạt động đa nền tảng, nhưng không khuyến khích lưu tiến trình chơi trò chơi vì nó không an toàn. Là một tệp văn bản gốc, người chơi có thể dễ dàng mở nó lên và thay đổi nội dung để gian lận hoặc làm cho trò chơi của bạn hoạt động không thể đoán trước. Nó cũng không được đảm bảo để ở xung quanh.

PlayerPrefs dành cho thông tin tùy chọn không cần thiết, như cài đặt ánh xạ kiểm soát hoặc cài đặt nhạc / sfx - những thứ mà người chơi có thể tự do thay đổi và sẽ không bỏ lỡ khủng khiếp nếu họ (ví dụ như trên Windows) sử dụng điểm khôi phục hệ thống và mất một số thông tin đăng ký của họ. Nếu điều này làm mất điểm số cao hoặc tiến trình chiến dịch của họ, người chơi sẽ buồn bã một cách chính đáng!

Thay vào đó, bạn nên lưu tiến trình chơi trò chơi trong tệp của riêng bạn (thường là nhị phân, có thể được mã hóa hoặc ký nếu bạn muốn làm cho nó khó sửa đổi hơn, nhưng hãy xem nhận xét của Philipp bên dưới về điều này).

Bạn có thể sử dụng Application.persistentDataPath để có được vị trí lưu đáng tin cậy trên mỗi nền tảng. Điều này thường trong một thư mục dữ liệu người dùng sẽ không bị xóa trong các trường hợp như ví dụ trên.

Khi bạn có đường dẫn để lưu vào, bạn có thể sử dụng các phương thức IO C # thông thường để tạo, viết và đọc tệp của mình. Các chi tiết sẽ thay đổi rất nhiều tùy thuộc vào định dạng và cấu trúc tệp lưu của bạn, vì vậy nếu bạn gặp rắc rối, tốt nhất nên hỏi một câu hỏi mới nêu chi tiết những gì bạn đang cố gắng làm và nơi bạn bị mắc kẹt.


30
Theo tôi, mã hóa và ký các tập tin lưu trữ của bạn chỉ là trò lừa bịp. Điều đó không an toàn vì bạn phải lưu trữ khóa và thuật toán trong trò chơi của mình, nơi một hacker có thể truy cập chúng. Nó cũng vô nghĩa. Khi đó là một trò chơi đơn: Tại sao phải bận tâm? Hãy để người chơi thưởng thức trò chơi theo cách họ muốn. Khi đó là một trò chơi nhiều người chơi, bạn nên lưu tất cả mọi thứ trên máy chủ, nơi nó an toàn khỏi thao tác.
Philipp

5
@ SamedTarıkÇETtubN Có một sự khác biệt quan trọng giữa đường dẫn dữ liệu (vị trí nơi trò chơi của bạn được cài đặt) và đường dẫn dữ liệu liên tục (một vị trí đáng tin cậy để lưu dữ liệu mới). Trên một số nền tảng, một trò chơi được xây dựng không thể ghi vào đường dẫn dữ liệu đã cài đặt, do đó, việc lưu ở vị trí đường dẫn dữ liệu liên tục được khuyến nghị là một quy tắc chung.
DMGregory

2
Mặc dù tôi đồng ý với @Philipp rằng bộ lưu trữ phía máy khách không bao giờ thực sự an toàn và trong nhiều trường hợp chúng tôi không cần phải nặng tay trong việc bảo mật các trò chơi một người chơi, số lượng bảo mật hoặc che giấu để áp dụng cuối cùng là một lựa chọn mỗi người sáng tạo phải làm cho chính họ. Với câu trả lời này, tôi chỉ muốn cung cấp cho người hỏi thông tin để đưa ra lựa chọn sáng suốt về những gì phù hợp với trò chơi của họ.
DMGregory

1
Một mặt, tôi đồng ý với @Philipp nhưng tôi cũng đã thấy / làm việc với một tệp lưu tuần tự hoàn toàn không thể làm việc với trình soạn thảo văn bản. Vâng, tôi có lẽ đã có thể tìm ra cách đi vào và thực hiện một số thay đổi hoặc thay đổi khác, nhưng vì tập tin trông giống như 2 megs hexidecimal thô, nó sẽ khá khó để tìm ra. Trong những trường hợp như vậy, chỉ những người cực đoan nhất mới cố gắng tháo rời nó và kết quả sẽ cụ thể đến thời điểm đó trong trò chơi (thêm một đơn vị nữa vào lưu sẽ đẩy tất cả dữ liệu tiếp theo xuống). Sau đó, một lần nữa, nó không có ý định được an toàn.
Draco18

2
@ShantanuSingh bằng cách không lưu trữ chúng trong PlayerPrefs. Loại thông tin đó nên được lưu trữ trong cơ sở dữ liệu từ xa và được yêu cầu khi khởi động ứng dụng. Để tương thích khi không có kết nối internet, hãy quay lại tệp đã lưu an toàn cục bộ (đó là: được mã hóa). Các giá trị cơ sở dữ liệu, khi có sẵn, sẽ ghi đè lên các giá trị cục bộ. Có thể có các plugin mua trong ứng dụng cũng xử lý mọi thứ theo cách khác, nhưng nó có thể là "yêu cầu internet", có thể hack (ngay cả một tệp được mã hóa không an toàn 100%) hoặc như chi tiết nhận xét này.
Draco18


-1

PlayerPrefs là một cửa hàng K / V được thiết kế để "chỉ hoạt động" bất kể bạn xây dựng nền tảng nào. Tôi nói chỉ cần tiếp tục sử dụng nó trừ khi bạn có một lý do thuyết phục không.


Tôi nghĩ rằng câu hỏi là khá nhiều nếu có những lý do thuyết phục để không sử dụng PlayerPrefs (vâng, có). Vì vậy, tôi đã đánh giá thấp câu trả lời này vì nó không trả lời câu hỏi.
Peter - Unban Robert Harvey

-1

Vì vậy, cách tốt nhất là tiết kiệm phía máy chủ? Chuyển đổi tất cả lưu thông tin cần thiết sang chuỗi json và lưu trữ nó để sở hữu máy chủ mysql dưới dạng dữ liệu chuỗi và khi cần tải, kết nối với máy chủ và khôi phục nó?


4
Đây không phải là một câu trả lời cho câu hỏi. Nếu bạn có một câu hỏi hãy hỏi như một câu hỏi mới .
Sourav Paul
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.