Chương 1: Tổng quan về đề tài 1. Lý do chọn đề tài. Năm 2022 và 2023 được đánh giá là giai đoạn mà ngành game phát triển vượt bậc nhất. Theo số liệu từ NewzooŸ, cuối năm 2022, thế giới có gần 3,2 tỷ người chơi game, tong doanh thu toàn ngành đạt tới con số lớn nhất từ trước tới nay là 182,9 tỷ USD.
Năm 2023, doanh thu ước tính sẽ chạm mốc mới là 187,7 tỷ USD. Trong đó, riêng game di động đã đóng góp hơn 92,6 tỷ USD. Tuy thị trường game Việt Nam đang có các bước tiến rõ rệt, đại đa số các tựa game phổ biến tại thị trường nước ta hiện nay là game nước ngoài, với các studio Việt đang gặp rất nhiều khó khăn trong việc cạnh tranh với các studio triệu đô của các cường quốc ngành giải trí như Mỹ và Trung Quốc, đặc biệt là trong khoản phát triển các tựa game nhiều người chơi. Mục tiêu của khóa luận này là tìm hiểu cơ bản về phương pháp lập trình game nhiều người chơi và lập trình một sản phẩm hoàn chỉnh nhằm trải nghiệm những khó khăn và thách thức trong quá trình sản xuất trò chơi điện tử, cũng như cải thiện và thách thức khả năng của chính bản thân em với tư cách là một game developer.
Đối tượng và phạm vi đề tài 1. Mục tiêu đề tài Đề tài nhắm đến nghiên cứu cách thức lập trình, xây dựng một hệ thống framework game nhiều người choi cơ bản cũng như tạo ra một prototype đơn giản nham trình bày những gì đã nghiên cứu thành công. Đối tượng của đề tài Phương pháp và cách thức lập trình một tựa game nhiều người chơi.com/resources/blog/the-games-market-in-2022-the-year-in-numbers 1. Phạm vi đề tài Phạm vi môi trường: Máy tính từ hệ điều hành Windows 10 trở lên.
Phạm vi tính năng: e Game chơi trong môi trường 3D, góc nhìn thứ 3. e Người chơi chơi chung với nhau trong môi trường mạng nội bộ. CHƯƠNG 2: TONG QUAN VE DE TÀI 2. So lược về cách hoạt động của Unity Khóa luận sử dụng công nghệ Unity làm nền tảng nghiên cứư và ứng dụng , vốn là một game engine đa nền tảng được phát triển bởi Unity Technologies và hiện tại đang là một trong những game engine thông dụng nhất hiện nay, sử dụng rộng rãi trong khắp các studio trên toản thê giới và cũng là engine của nhiêu tựa game thành công như Hollow Knight, Genshin Impact, BattleBit,.
Một tựa game truyền thống lập trình trong Unity sẽ bao gồm nhiều cHinh 3D riêng biệt (Scene) nối chung lại với nhau thành một game hoàn chỉnh, trong các Scene này sẽ bao gồm các vật thê (GameObject) có thể chứa hoặc không chứa các thành phần (Component) khác nhau, chứa một hoặc nhiều script kế thừa từ lớp MonoBehaviour. Vòng đời của một lớp kế thừa MonoBehaviour đơn giản hóa lại là như sau: Tên Function Điều kiện kích hoạt | Chức năng AwakeQ Chạy một lần duy Khởi tạo các biến, hàm số trong nhất khi Scene lần đầu | Component một cách riêng biệt. OnEnable() Chay mỗi lần Trong trường hợp Object được bật từ GameObject được bat | trạng thái tắt từ trạng thái tắt. StartQ Chạy một lần duy Nối ghép các component với nhau nhất scene lần đầu sau khi đã khởi tạo.
được nạp sau khi Awake chạy xong. Update() Chạy một lần duy Kiểm tra và chạy các game logic nhất mỗi khung hình. | như di chuyển nhân vật, cập nhật UI,. LateUpdateQ Chạy một lần duy Chạy các game logic yêu cầu biến, nhất mỗi khung hình | hằng số và logic từ Update cũng như sau khi Update chạy chuẩn bị hằng số và logic cho lần xong.
Update tiếp theo. OnApplicationQuit() | Chạy một lần duy Chuan bị logic dé thoát game. OnDisable() Chay mỗi lần Trong trường hợp Object được tắt từ GameObject được tắt trạng thái bật. từ trạng thái bật.
OnDestroy() Chạy một lần duy Trong trường hợp GameObject bị nhất khi GameObject | xóa (Viên đạn trúng đích, người chơi bị xóa khỏi scene chét,.) hoặc scene bi Unload.2: Vong đời của một lớp kế thừa MonoBehaviour 2. Sơ lược về cách hoạt động của Netcode for GameObjects Netcode for GameObjects là một thư viện Networking cho Unity nhằm cho phép các lập trình viên tạo ra một tựa game multiplayer dựa trên framework đã có sẵn của Unity. Netcode for GameObject bao gồm các thành phan chính sau đây: Tên Mở rộng Chức năng NetworkObJect Mở rộng của Mở rộng một GameObJect thông GameObJect thường cho phép tương tác với hệ thống Netcode NetworkBehaviour | Mở rộng cua Mở rộng một MonoBehaviour với MonoBehaviour nhiều khái niệm và function đề hỗ trợ việc chạy trên network như quyền sở hữu (Ownership), OnNetworkSpawn(), OnNetworkDespawn(). Hệ thống RPC Mở rộng các Cho phép việc gọi hàm thông qua (remote procedure | fuction thông network.
call) thường. NetworkVariable Mở rộng của các Cho phép việc đồng bộ các biến thông biến thông thường | qua network. Cho phép người Host, Tạo hoặc Gia nhập Server cũng như tùy biến server đó, đồng thời đảm nhận trọng trách đồng bộ các Scene và tạo các NetworkObject dé GameLogic sử dụng.2: Các thành phân chính của Netcode forGameObjects Qua trình hoạt động của một tựa game sử dụng Netcode là như sau: e Đầu tiên, trò chơi sử dụng NetworkManager dé tao Client Host hoặc Server dé những người choi khác kết nói. e_ Khi những người chơi khác kết nối, NetworkManager sẽ đồng bộ các NetworkObJect và NetworkBehaviour trong Scene thông qua việc khởi tạo và xóa đi các bản sao của chúng trên máy của người chơi, đồng thời đồng bộ các biến NetworkVariable đã được định sẵn từ trước.
e Trong quá trình chơi, các logic game được chọn sẽ được chạy và đồng bộ trên máy của tất cả người chơi thông qua các NetworkVariable và hệ thống Rpc. Sơ lược về cách hoạt động của Unity Lobby Dịch vụ Lobby cung cấp cách đề người chơi khám phá và kết nối với nhau nhằm thực hiện nhiều kịch bản chơi game nhiều người khác nhau: e Duyệt danh sách các phiên trò chơi có sẵn và cho phép người choi chọn và tham gia một phiên. e Chia sẻ mã tham gia với bạn bè dé họ có thé kết nối trực tiếp vào phiên trò chơi của bạn. e Sử dụng Quick Join dé tìm bat kỳ trận đấu nào có sẵn và tham gia ngay.
e_ Tạo một lobby riêng tư và gửi lời mời đến danh sách bạn bè trong trò choi của bạn. e©_ Tạo một lobby từ máy chủ trò chơi và sử dụng nó dé quản lý và giới hạn quyền truy cập vào phiên máy chủ. e_ Truy van các lobbies phù hợp với một tập hợp yêu cầu cụ thể (ví dụ: chế độ chơi, loại bản đồ). Lobby có thê tồn tại trong suốt thời gian của phiên trò chơi dé cung cấp cơ chế cho người dùng tái tham gia một phiên trò chơi hiện có hoặc hỗ trợ việc di chuyên chủ nhà sau khi bị ngắt kết nối không mong muốn.
Thiết kế hệ thống Trò chơi bao gồm 2 thành phan chính: phòng chơi va màn chơi 2. Phòng chơi (Lobby) Đề đơn giản hóa quá trình tìm Server đề chơi và gia nhập màn chơi thì sản phẩm game sử dụng một hệ thống lobby đơn giản. Người chơi có thể tìm các Lobby đang mở thông qua một Lobby Browser hoặc tự tạo một Lobby cho riêng mình. Người chơi có thé tự Lobby này bắt đầu Host server và các người chơi khác có thé gia nhập Server từ đây.
Dữ liệu của một phòng chơi bao gồm: e Id của phòng. e Tên của phòng. e Trạng thái của phòng. e Địa chỉ IP cua Server.
e_ Chế độ chơi của Game. Dữ liệu của người chơi trong phòng chơi bao gồm: e Id của người chơi. e Tén người chơi. e Trạng thái của người chơi.
Khi tạo một Lobby, người chơi sẽ tự động được đặt thành chủ Lobby. Chủ Lobby có quyên thay đổi thông tin Lobby như tên và tinh public, cũng như sẽ đảm nhận quá trình Host Server. Khi chu Lobby rời phòng thì vi tri này sẽ được nhường cho người chơi khác. Nếu Lobby không còn người chơi thì sẽ bị xóa.
Màn chơi (Level) Màn chơi sẽ được chạy trên cả máy chủ và máy tính của người chơi. Trong đó: e Màn chơi cua máy chu sé đảm nhiệm vi trí xử lý logic màn chơi cũng như quan lý các vật thể, biến, hàm số liên quan,. dé đảm bảo tính bảo mật cũng như tính đồng nhất, do chỉ có duy nhất Server chạy các logic này. e Màn chơi trên máy người chơi sẽ đảm nhận trách nhiệm truyền tải, đồng bộ và xử lý dữ liệu từ màn chơi của máy chủ gửi về.
Duy chỉ có script điều khiển nhân vật không hoạt động theo logic này do van đề về độ trễ Input. Trong trường hop này, script chạy trên máy của người choi sở hữu script sẽ đảm nhiệm phần xử lý logic. e Khi chuyền sang màn hình màn chơi, màn choi sẽ dựa trên thông tin phòng dé khởi tạo màn chơi như sau: e Với mỗi người chơi trong phòng, tạo một NetworkObject dé lưu trữ và đại diện cho người chơi đó trong màn chơi. Sau đó, màn chơi sẽ dựa trên chế độ chơi đã chọn từ màn hình thông tin dé nap logic màn choi và bắt đầu trò choi.
Một màn chơi sẽ có ba trạng thái đơn giản: e_ Chờ người chơi: Màn chơi sẽ chưa bắt đầu cho đến khi đủ số lượng người chơi gia nhập Level. Trong lúc đó thì người chơi có thể tùy ý duy chuyển xung quanh khám phá man choi. e Bắt đầu trò chơi: Màn chơi sẽ bắt đầu khi đủ số lượng người chơi gia nhập. Tat cả các người choi sẽ được đưa về một điểm xuất phát ngẫu nhiên và được cấp cho một vũ khí và một số lượng mạng nhất định.
Nếu còn mạng thì khi chết người chơi sẽ được hồi sinh từ một điểm hồi sinh ngẫu nhiên. Khi hết mạng thi người choi sẽ không thé hồi sinh được nữa. e Kết thúc trò chơi: Khi chỉ còn duy nhất một người chơi còn sống và còn mạng thì trò chơi kết thúc và tuyên bố người chơi này thắng cuộc. Sau một thời gian ngắn thì trò chơi kết thúc, server sẽ tự hủy và mọi người chơi sẽ trở về màn hình chính ban đầu.
Thiết kế của game và cách chơi. Hiện tại, trò chơi bao gồm ba chế độ chơi là Giải đó, Dau đơn và Sinh tồn. Khi chủ phòng chơi chọn một trong ba chế độ này, người đó cũng đồng chơi được quyền thay đổi màn chơi theo ý họ muốn, miễn sao là màn chơi đó hỗ trợ chế độ chơi đã chọn. Các chế độ chơi giải đó.
Là chế độ chơi chính của game, Giải dé là chế độ chơi dạng hợp sức (Co-op) mà trong đó tất cả các người chơi phải hợp tác để cùng nhau đến được điểm cuối của màn chơi. Hiện tại, chế độ chơi giải đố chỉ có duy nhất một màn chơi và yêu cầu tối thiểu 2 người dé bắt đầu.