Skip to content

Simple multi player game using Netcode for GameObjects in Unity

Notifications You must be signed in to change notification settings

NgTienHungg/Netcode-Tank-Shooting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multiplayer Tank Shooting Game

Giới thiệu

Multiplayer Tank Shooting Game là một trò chơi đa người chơi, được phát triển với việc sử dụng giao thức UDP để truyền tải dữ liệu giữa các máy tính, trong đó các người chơi (tối đa 4 người) sẽ được chọn 1 trong 3 bản đồ, nơi họ sẽ điều khiển các xe tăng màu sắc riêng biệt. Mục tiêu của trò chơi là tiêu diệt tất cả đối thủ và trở thành người cuối cùng còn sống sót.

Luật chơi

  • Người chơi sẽ tham gia vào các phòng chơi, có sự tham gia từ 2 đến 4 người.
  • Khi có đủ 2 người trở lên trong phòng, trò chơi có thể được bắt đầu.
  • Người chơi được chọn 1 trong 3
  • Các người chơi sẽ được đưa vào một bản đồ và họ sẽ sử dụng xe tăng của mình cùng các vật phẩm để tấn công và tiêu diệt đối thủ.
  • Người cuối cùng còn lại trên bản đồ sẽ chiến thắng trò chơi.

Công nghệ sử dụng

  • Sử dụng Unity Engine (C#) cho việc phát triển trò chơi + Network For Gameobject (Multi Player).

  • Sử dụng giao thức UDP để truyền tải dữ liệu giữa các máy tính (Plugins hỗ trợ)

  • Các Gameobject có thể giao tiếp được trên mạng nhờ kế thừa NetworkMonobehaviour và được gắn thêm NetworkObject component. Như vậy nó sẽ được đánh dấu là 1 object trong mạng.

    image

    Kiến trúc:

    • 1 Client sẽ cần có NetworkManager, hỗ trợ việc xử lý kết nối mạng và quản lý các Object trong mạng.

    • Hỗ trợ các phương thức để Start Host, Start Server, hoặc Start Client

    • Cung cấp các hàm kiểm tra trong mạng như: IsServer, IsClient, IsHost, IsOwner LocalNetworkId, ...

    • Các Object được đánh dấu là nằm trong mạng, sẽ được quản lý bởi NetworkManager, sử dụng các hàm hỗ trợ bên trên để xử lý logic

    • Muốn spawn 1 Object tới tất cả các Client, Object đó được Spawn trên Server và sẽ tạo các Instance của Object đó trên tất cả các Client:

      VD: có 2 Player là Tank join vào game Nghĩa là trên cả 2 máy client đều có 2 Object Tank, 1 Tank chính là của Client đó (Owner), 1 Tank sẽ là Instance của Client còn lại.

(url)image

Giao tiếp:

  • Client và Server có thể giao tiếp với nhau qua các RPC (Remote Procedure Call)

  • ServerRpc là một phương thức được gọi từ một NetworkObject, nó được đưa vào hàng đợi và chờ tới cuối frame để gửi đi Ngay khi nhận được ServerRpc, nó được xử lý tại NetworkObject đó tại Server.

Screenshot 2023-11-23 at 09 37 18
  • Cú pháp của 1 hàm ServerRpc
Screenshot 2023-11-23 at 09 51 07
  • Mặc định của ServerRpc là được gọi từ Owner (tức máy Cient sở hữu NetworkObject gọi hàm), nhưng cũng có thể set RequireOwnership = false để có thể gọi được hàm tự do hơn. Screenshot 2023-11-23 at 09 53 37

  • ClientRpc là một phương thức được gọi từ server, và xử lý trên Instance của NetworkObject đó trên tất cả các Client.

Screenshot 2023-11-23 at 09 57 37
  • ClientRpc và ServerRpc được dùng để xử lý logic mạng tương đối nhiều trong game. VD đơn giản là: khi một Client A ấn nút bắn, nó gọi ServerRpc để request bắn đạn, sau đó Server lại gọi ClientRpc để xử lý việc bắn ra viên đạn từ xe tăng của client A trên tất cả các máy A, B, C...

Preview

Image Preview

1. Kết nối

image

image

image

2. Gameplay

image

image

image

image

Hướng dẫn cài đặt

  1. Tải tệp APK và cài đặt trò chơi lên thiết bị của bạn.
  2. Tham gia vào một phòng chơi.
  3. Nhập địa chỉ IP của máy chủ để tham gia sảnh chờ.
  4. Chờ đợi đủ số lượng người chơi và bắt đầu trò chơi.

About

Simple multi player game using Netcode for GameObjects in Unity

Topics

Resources

Stars

Watchers

Forks