1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Thiết kế và phát triển trò chơi máy tính: Bài 7 - Trương Xuân Nam

44 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Bài giảng Thiết kế và phát triển trò chơi máy tính: Bài 7 Unity networking cung cấp cho người học những kiến thức như: Multiplayer game; Multiplayer flow; Networking; Multiplayer game trong unity; Game Pong, phiên bản mạng. Mời các bạn cùng tham khảo!

THIẾT KẾ VÀ PHÁT TRIỂN GAME Bài 7: Unity networking Nội dung Multiplayer game Multiplayer flow Networking Multiplayer game unity Game Pong, phiên mạng TRƯƠNG XUÂN NAM Phần Network multiplayer game TRƯƠNG XUÂN NAM Multiplayer game ▪ “A multiplayer game is a game played by multiple people” ▪ Nhiều người chơi game? ▪ Local (single device) • Badlands • King of the Opera • FIFA ▪ Network • World of Warcraft • Clash of Clans • Hearthstone TRƯƠNG XUÂN NAM Local multiplayer game (one device) ▪ Rất thú vị ▪ Phong phú ▪ Phổ biến ▪ Nhưng chất kĩ thuật khơng khác game cho người chơi ▪ Có thể phức tạp đơi chút phải xử lý yêu cầu từ nhiều thiết bị, khơng khác nhiều so với game người chơi với máy TRƯƠNG XUÂN NAM Biến cố xảy game ▪ Biến cố tương đương với việc phải xử lý kiện, biến cố game tương đương với khối lượng lập trình xử lý gameloop ▪ Theo lượt (turn base): ▪ Chess ▪ Heroes of Might and Magic ▪ Thời gian thực (real time): ▪ World of Warcraft ▪ Quake ▪ Clash of Clans??? TRƯƠNG XUÂN NAM Game thực thực thi đâu? ▪ “Who runs the world?” ▪ On clients ▪ P2P ▪ Light server – heavy client ▪ On server ▪ Runs the game ▪ Client works as terminal ▪ Câu hỏi quan trọng liên quan đến kiến trúc framework hỗ trợ xử lý qua mạng TRƯƠNG XUÂN NAM Kiến trúc server thắng thế? ▪ Chi phí cho server giảm dần ▪ Ít gặp vấn đề kết nối (firewall, port forwards,…) ▪ Dễ ngăn chặn cheater, auto tools,… ▪ Game server ≠ server ▪ Với game nhỏ thiết bị người chơi đóng vai trị server ▪ Điều khác biệt “mọi thứ” trò chơi diễn server, máy khác thực nhiệm vụ đồng trò chơi với server mà thơi ▪ Chơi máy server bị lag hơn? Không hẳn, chắn lag nhiều máy client TRƯƠNG XUÂN NAM Phần Multiplayer flow TRƯƠNG XUÂN NAM Multiplayer flow L • Lobby • Hoạt động trước chơi M • Match • Hoạt động trải nghiệm game C • Conclusion • Động lực khiến player bỏ tiền TRƯƠNG XUÂN NAM 10 Tầng phiên: sockets ▪ Based on File I/O ▪ File Descriptors ▪ Open/Close ▪ Read/Write ▪ Modes ▪ Blocking • Sử dụng thread riêng cho socket ▪ Non-blocking • Thăm dị socket định kỳ TRƯƠNG XN NAM 30 Tầng presentation ▪ Chuẩn bị liệu cho việc giao vận ▪ Nén ▪ Mã hóa ▪ Endian Order • 0b1000 vs 0b0001 ▪ Serialize ▪ Buffering • Hợp packet • Increased Latency • Store local data and wait TRƯƠNG XUÂN NAM 31 Tầng application ▪ Giao tiếp với người dùng ▪ Xử lý logic trò chơi ▪ Chuyển vận / đồng liệu hệ thống TRƯƠNG XUÂN NAM 32 Protocol stack TRƯƠNG XUÂN NAM 33 Phần Multiplayer game unity TRƯƠNG XUÂN NAM 34 Multiplayer game unity ▪ Multiplayer game unity chuẩn hóa sau thời gian dài “vật vã” lựa chọn khác ▪ Phiên dựa Raknet tương đối ổn định, cách tiếp cận hợp lý ▪ Có nhiều cách triển khai multiplayer unity ▪ ▪ ▪ ▪ HTTP requests Plugin (GPGS, Photon, Smartfox,…) Unity networking UNet (Unity 5.1 trở đi) TRƯƠNG XUÂN NAM 35 HTTP requests ▪ Phù hợp với game đơn giản (server web) xử lý số tình game (chẳng hạn: upload ảnh lên web) ▪ Sử dụng UnityWebRequest, ý xử lý đồng IEnumerator GetRequest(string uri) { UnityWebRequest uwr = UnityWebRequest.Get(uri); yield return uwr.SendWebRequest(); // xử lý lỗi if (uwr.isNetworkError) … } TRƯƠNG XUÂN NAM 36 Plugins ▪ Các plugin thường giải pháp công ty cung cấp dịch vụ server ▪ Có thể tải xuống từ Asset Store ▪ Một số plugin nên thử: ▪ ▪ ▪ ▪ Bluetooth LE for iOS and Android Google Play Game Services PUN (Photon Unity Network) SmartFoxServer2X TRƯƠNG XUÂN NAM 37 Thử ví dụ với UNet Tạo Scene Tạo đối tượng quản lý kết nối: NetworkManager (empty game object) Thêm component NetworkManager Thêm component NetworkManagerHUD Tạo đối tượng player: Một GameObject Thêm component NetworkIdentity Đưa đối tượng vào Prefabs Đăng ký player với NetworkManager (Spawn Info) TRƯƠNG XUÂN NAM 38 Thử ví dụ với UNet ▪ Viết mã di chuyển player public class Player : MonoBehaviour { void Update() { var x = Input.GetAxis("Horizontal") * 0.1; var y = Input.GetAxis("Vertical") * 0.1; transform.Translate(x, y, 0); } } ▪ Cách test: build chạy PC, chạy song song, server, client; kết nối chạy TRƯƠNG XUÂN NAM 39 Thử ví dụ với UNet ▪ Test 1: vấn đề ▪ Chưa có đồng trạng thái hai thiết bị ▪ Khi điều khiển điều khiển đồng thời đối tượng ➔ Chưa phân biệt player máy khác ▪ Cập nhật 1: ▪ Thêm NetworkTransform vào player ▪ Chuyển class thành NetworkBehaviour ▪ Viết mã điều khiển local player mà thơi TRƯƠNG XN NAM 40 Thử ví dụ với UNet ▪ Mã: using UnityEngine.Networking; public class PlayerMove : NetworkBehaviour { void Update() { if (!isLocalPlayer) return; var x = Input.GetAxis("Horizontal") * 0.1; var y = Input.GetAxis("Vertical") * 0.1; transform.Translate(x, y, 0); } } TRƯƠNG XUÂN NAM 41 Thử ví dụ với UNet ▪ Test ➔ phân biệt player, chưa đồng ▪ Update 2: phần NetworkIdentity chọn Local Player Authority ▪ Test 3: ▪ Đã đồng (hơi giật, làm để đỡ giật?) ▪ Chưa phân biệt player (vì giống hệt nhau) ▪ Update 3: đổi màu người chơi local TRƯƠNG XUÂN NAM 42 Thử ví dụ với UNet ▪ Mã: public override void OnStartLocalPlayer() { GetComponentInChildren().color = Color.yellow; } TRƯƠNG XUÂN NAM 43 Phần Game Pong, phiên mạng TRƯƠNG XUÂN NAM 44

Ngày đăng: 09/08/2021, 17:53

TỪ KHÓA LIÊN QUAN