Giới thiệu dự án

Sự bùng nổ của công nghệ phần cứng di động và mạng viễn thông thế hệ mới đã đưa ngành công nghiệp game toàn cầu bước vào giai đoạn tăng trưởng vượt bậc. Theo báo cáo từ nền tảng phân tích thị trường GlobalData Thematic Intelligence, doanh thu thị trường game di động toàn cầu đạt 124 tỷ USD vào năm 2024 và được dự báo sẽ chạm mốc 195 tỷ USD vào năm 2030. Dữ liệu phân tích thể loại từ Newzoo chỉ ra rằng thể loại bắn súng (Shooter) dẫn đầu về doanh thu trên nền tảng máy tính (PC), trong khi thể loại nhập vai (Role-Playing Game - RPG) liên tục thống trị trên nền tảng di động. Việc dung hợp hai thể loại này mở ra cơ hội lớn để khai phóng tiềm năng trải nghiệm người dùng.

Tuy nhiên, phần lớn các tựa game bắn súng góc nhìn từ trên xuống (Top-Down Shooter) hiện nay trên di động gặp phải các hạn chế nghiêm trọng:

  • Trí tuệ nhân tạo (AI) của kẻ địch đơn điệu, chủ yếu sử dụng máy trạng thái hữu hạn (Finite State Machine - FSM) tuyến tính, dễ đoán và thiếu tính tương tác bầy đàn.
  • Vòng lặp gameplay (Core Loop) thiếu chiều sâu, không cân bằng được giữa yếu tố hành động căng thẳng và tiến trình nâng cấp thuộc tính nhân vật.
  • Hệ thống điều khiển cảm ứng (Touch Controls) trên màn hình di động thường có độ trễ cao, thiếu độ chính xác khi ngắm bắn và di chuyển đồng thời.

Đồ án khóa luận "Xây dựng Game 3D Nhập vai Sinh tồn" của sinh viên Nguyễn Hoàng Nam (Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin - ĐHQG-HCM), dưới sự hướng dẫn của TS. Đỗ Thị Thanh Tuyền và ThS. Trần Thị Hồng Yến, được triển khai nhằm giải quyết triệt để các bài toán kỹ thuật trên. Đồ án xây dựng một sản phẩm game 3D sinh tồn hoàn chỉnh trên nền tảng Android, kết hợp cơ chế chiến đấu nghẹt thở lấy cảm hứng từ các tượng đài kinh điển như Alien Shooter với cây hành vi AI thông minh (Behavior Tree - BT) và cơ chế nâng cấp nhập vai hiện đại.

Mục tiêu cụ thể của dự án:

  1. Thiết kế kiến trúc AI nâng cao: Xây dựng hệ thống tri thức AI cho quái vật dựa trên mô hình Behavior Tree kết hợp hệ thống nhận thức đa giác quan (Perception System).
  2. Hiện thực hóa vòng lặp cốt lõi (Core Loop): Hoàn thiện chu trình khép kín gồm Chiến đấu (Action) $\rightarrow$ Thu thập phần thưởng (Reward) $\rightarrow$ Nâng cấp trang bị/kỹ năng (Progression).
  3. Tối ưu hóa hiệu năng di động: Đạt tốc độ khung hình ổn định 60 FPS trên các thiết bị Android tầm trung, kiểm soát bộ nhớ RAM tiêu thụ dưới 350 MB và thời gian xử lý AI dưới 2ms mỗi khung hình.
  4. Chuẩn hóa trải nghiệm điều khiển UI/UX: Tích hợp Unity New Input System với cơ chế Dual Virtual Joystick (Touch & Drag) đa điểm mượt mà.

Phạm vi nghiên cứu tập trung vào nền tảng Android (API Level 28 - 34), môi trường chơi đơn (Single-player), bối cảnh không gian vũ trụ giả tưởng với cấu trúc màn chơi chiến thuật, 2 lớp vũ khí tiêu chuẩn và 3 phân cấp kẻ địch AI độc lập.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các tựa game bắn súng góc nhìn trên xuống tiêu biểu trên thị trường làm sáng tỏ các ưu/nhược điểm công nghệ hiện hữu:

Tiêu chí Alien Shooter (Sigma Team) The Hong Kong Massacre Shadowgrounds (Frozenbyte) Giải pháp đề xuất của Đồ án
Nền tảng chính PC, Console, Mobile Port PC, PS4, Nintendo Switch PC Di động (Android native)
Cơ chế AI FSM cơ bản, bầy đàn số lượng lớn Reaction-based AI, phản xạ cực nhanh Scripted AI kết hợp ánh sáng Behavior Tree đa tầng + Perception AI
Hệ thống máu/HP Thanh HP truyền thống + Giáp Cơ chế One-hit kill (1 viên đạn chết) HP Bar + Hộp cứu thương HP, Energy, Dynamic Regen
Tiến trình nâng cấp Mua vũ khí, tăng chỉ số vĩnh viễn Mở khóa súng cố định qua màn Nâng cấp module trên từng súng Shop thời gian thực (Vũ khí + Trợ phẩm)
Khả năng tiếp cận Cần chuột/bàn phím để chính xác Độ khó Hardcore, kén người chơi Yêu cầu cấu hình PC Dual-stick tối ưu hóa cho màn hình cảm ứng

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must have: Vòng lặp Core Loop hoàn chỉnh; Điều khiển Dual-stick (Move/Aim); 3 loại quái vật (Chomper, Spitter, Spawner); Hệ thống tìm đường NavMesh; Behavior Tree điều khiển AI; Hệ thống Shop mua bán vũ khí/trợ phẩm.
  • Should have: Hệ thống nhận thức AI theo bầy đàn (Team Alert); Đồng hồ quên lãng mục tiêu (Forgetting Timer); Hiệu ứng âm thanh môi trường và phản hồi xúc giác.
  • Could have: Kỹ năng diện rộng (AoE Fire Ability); Hiệu ứng đổ bóng động thời gian thực; Giao diện hướng dẫn tương tác động.
  • Won't have (giai đoạn này): Chế độ nhiều người chơi trực tuyến (Multiplayer Co-op); Tùy biến trang phục nhân vật (Skin Customization).
          [Touch / Drag Inputs]

Thiết kế hệ thống

Hệ thống được phát triển trên nền tảng kỹ thuật chuẩn công nghiệp:

  • Game Engine: Unity 2022.3 LTS (C# 10, .NET Standard 2.1).
  • Physics Engine: Unity PhysX (Rigidbody, Box/Capsule/Mesh Colliders, Trigger Events).
  • Navigation: Unity AI Navigation Package (NavMesh, NavMeshAgent, NavMeshObstacle).
  • Input Framework: Unity New Input System Package (v1.7.0).
  • Target OS: Android 9.0 (API Level 28) trở lên.

Sơ đồ quan hệ thực thể (Class Architecture):

  • Player: Kế thừa MonoBehaviour, quản lý trạng thái HP (Health Points), Energy, Credits, Weapon Inventory và tham chiếu đến bộ điều khiển di chuyển.
  • Enemy: Lớp cơ sở định nghĩa HP, Movement Speed, Attack Damage, Sight Radius, Peripheral Angle, liên kết chặt chẽ với NavMeshAgentBehaviourTreeRunner.
  • BehaviourTree: Quản lý nút gốc (RootNode), thực thi chu trình duyệt cây theo tần số Tick cố định.
  • Node: Lớp trừu tượng cho mọi node trên cây, định nghĩa các trạng thái trả về: SUCCESS, FAILURE, RUNNING.
  • CompositeNode (Selector, Sequence): Điều hướng luồng thực thi thuật toán.
  • Weapon & Supplier: Xử lý logic bắn, tốc độ đạn (Fire Rate), sát thương (Damage), cơ chế mở hòm tiếp tế và mua bán trong cửa hàng.
// Kiến trúc trừu tượng cho Node trong Behavior Tree
public abstract class Node
{
    public enum State { RUNNING, SUCCESS, FAILURE }
    protected State state;

    public State State => state;
    public abstract State Evaluate();
}

Phương pháp luận phát triển

Dự án áp dụng quy trình phát triển phần mềm linh hoạt (Agile Scrum) rút gọn, chia thành 4 sprint (mỗi sprint kéo dài 2 tuần):

  1. Sprint 1: Khảo sát, dựng khung vật lý, tích hợp New Input System và cấu trúc nhân vật cơ bản.
  2. Sprint 2: Xây dựng hệ thống NavMesh và thuật toán Behavior Tree (Selector, Sequence, Leaf Action Nodes).
  3. Sprint 3: Xây dựng hệ thống kinh tế trong game (Shop, Kho đồ, Vũ khí, Kỹ năng trợ phẩm).
  4. Sprint 4: Tối ưu hóa hiệu năng di động (Draw calls, Garbage Collection), cân bằng thông số và kiểm thử UAT.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Trọng tâm kỹ thuật của dự án nằm ở hệ thống trí tuệ nhân tạo (AI Perception & Behavior Tree) và cơ chế chiến đấu thời gian thực.

Thuật toán điều khiển luồng Behavior Tree

Cây hành vi duyệt từ trên xuống dưới và từ trái sang phải. Dự án cài đặt hai node điều khiển luồng cốt lõi:

  • Selector (Fallback Node): Thực thi các node con tuần tự. Nếu một node con trả về SUCCESS hoặc RUNNING, Selector lập tức trả về trạng thái đó cho node cha. Selector chỉ trả về FAILURE khi tất cả các node con đều thất bại.
  • Sequence Node: Thực thi các node con tuần tự. Nếu một node con trả về FAILURE hoặc RUNNING, Sequence lập tức dừng lại và trả về trạng thái đó. Sequence chỉ trả về SUCCESS khi toàn bộ các node con hoàn thành thành công.
// Cài đặt Selector Node
public class Selector : Node
{
    protected List<Node> nodes = new List<Node>();
    public Selector(List<Node> nodes) => this.nodes = nodes;

    public override State Evaluate()
    {
        foreach (var node in nodes)
        {
            switch (node.Evaluate())
            {
                case State.RUNNING:
                    state = State.RUNNING;
                    return state;
                case State.SUCCESS:
                    state = State.SUCCESS;
                    return state;
                case State.FAILURE:
                    continue;
            }
        }
        state = State.FAILURE;
        return state;
    }
}

// Cài đặt Sequence Node
public class Sequence : Node
{
    protected List<Node> nodes = new List<Node>();
    public Sequence(List<Node> nodes) => this.nodes = nodes;

    public override State Evaluate()
    {
        bool anyChildRunning = false;
        foreach (var node in nodes)
        {
            switch (node.Evaluate())
            {
                case State.FAILURE:
                    state = State.FAILURE;
                    return state;
                case State.SUCCESS:
                    continue;
                case State.RUNNING:
                    anyChildRunning = true;
                    continue;
            }
        }
        state = anyChildRunning ? State.RUNNING : State.SUCCESS;
        return state;
    }
}

Hệ thống nhận thức (Perception) và thị giác AI

Thị giác của quái vật được lượng hóa thông qua thuật toán kiểm tra góc quét nón (Field of View - FOV) và tia chiếu vật lý (Raycast Block Detection):

$$\vec{d} = \vec{P}{\text{player}} - \vec{P}{\text{enemy}}$$

$$\theta = \arccos\left(\frac{\vec{F}{\text{enemy}} \cdot \vec{d}}{|\vec{F}{\text{enemy}}| |\vec{d}|}\right)$$

Điều kiện phát hiện mục tiêu:

$$|\vec{d}| \le R_{\text{sight}} \quad \text{và} \quad \theta \le \frac{\theta_{\text{peripheral}}}{2} \quad \text{và} \quad \text{RaycastClear}(\vec{P}_{\text{enemy}}, \vec{d})$$

Trong đó:

  • $R_{\text{sight}}$: Bán kính phát hiện (Sight Radius).
  • $\theta_{\text{peripheral}}$: Góc quan sát ngoại vi ($90^\circ$ đối với Chomper, $180^\circ$ đối với Spitter).
  • $\vec{F}_{\text{enemy}}$: Vector hướng nhìn phía trước của quái vật.
// Kiểm tra nhận thức mục tiêu của quái vật
public bool CheckPlayerInSight(Transform enemy, Transform player, float sightRadius, float fovAngle, LayerMask obstacleMask)
{
    Vector3 directionToPlayer = player.position - enemy.position;
    float distance = directionToPlayer.magnitude;

    if (distance <= sightRadius)
    {
        float angle = Vector3.Angle(enemy.forward, directionToPlayer);
        if (angle <= fovAngle / 2f)
        {
            // Kiểm tra vật cản tầm nhìn bằng Raycast
            if (!Physics.Raycast(enemy.position + Vector3.up * 0.5f, directionToPlayer.normalized, distance, obstacleMask))
            {
                return true; // Phát hiện mục tiêu
            }
        }
    }
    return false;
}

Bảng thông số hệ thống vũ khí và trợ phẩm

Toàn bộ thông số chiến đấu được cấu hình theo bảng cân bằng động:

Trang bị / Vật phẩm Loại Sát thương / Tác dụng Tốc độ / Thời gian Năng lượng tiêu hao Giá mua (Credits) Thời gian hồi (CD)
Pistol (Súng lục) Vũ khí cơ bản 5 DMG / viên 1 viên/giây (Single) 0 Mặc định (0) Không
Rifle (Súng trường) Vũ khí nâng cấp 40 DMG / viên 8 viên/giây (Auto) 0 150 Credits Không
Health Regen (+) Trợ phẩm hồi phục +20 HP Duy trì 2 giây 10 Energy 50 Credits 3 giây
Speed Boost (Clock) Trợ phẩm gia tốc +20 Movement Speed Duy trì 2 giây 10 Energy 40 Credits 2 giây
Fire Ability (Flame) Kỹ năng diện rộng 60 DMG (AoE bán kính 20) Tồn tại 3 giây 25 Energy 100 Credits 5 giây

Kiểm thử và đánh giá hiệu năng

Quá trình kiểm thử được thực hiện trên thiết bị thực tế (Xiaomi Redmi Note 11 - Chip Snapdragon 680, RAM 4GB, Android 12) và giả lập Unity Profiler:

  • Tốc độ khung hình (Frame Rate): Duy trì trung bình $58.4 - 60.0\text{ FPS}$ trong điều kiện xuất hiện đồng thời 25+ kẻ địch trên màn hình.
  • Thời gian xử lý AI (CPU Behavior Tree Tick): Đạt mức trung bình $0.85\text{ ms}$ (ngưỡng tối đa cho phép là $2.0\text{ ms}$).
  • Quản lý bộ nhớ: Sử dụng kỹ thuật Object Pooling cho đạn (Projectiles) và hiệu ứng hạt (VFX), giảm số lần kích hoạt Garbage Collection từ 14 lần/phút xuống còn 0 lần trong suốt màn chơi, duy trì tổng dung lượng RAM dưới $310\text{ MB}$.
  • Đánh giá trải nghiệm người dùng (UAT): Thực hiện khảo sát trên 20 người dùng thử nghiệm, đạt điểm System Usability Scale (SUS) 84.5/100, phản hồi tích cực về độ nhạy điều khiển đạt 94%.

Đổi mới và đóng góp

  1. Ứng dụng Behavior Tree mô-đun hóa cao trên Game Di động: Khác với các hệ thống FSM cứng nhắc truyền thống, kiến trúc Behavior Tree trong đồ án cho phép mở rộng không giới hạn các hành vi quái vật mà không làm tăng độ phức tạp thuật toán theo hàm mũ ($O(1)$ cho mỗi bước chuyển trạng thái cục bộ).
  2. Hệ thống nhận thức AI phối hợp bầy đàn (Flock Perception & Team Alert): Khi một cá thể AI phát hiện hoặc chịu sát thương từ người chơi (Hit Detection), tín hiệu kích hoạt (Alert Signal) được gửi đến các đồng minh lân cận trong bán kính $15\text{ m}$, chuyển toàn bộ nhóm sang trạng thái truy đuổi (Chase State) ngay lập tức.
  3. Cơ chế quên mục tiêu thực tế (Forgetting Timer): Khi người chơi khuất khỏi tầm nhìn và vượt khỏi bán kính cảm biến, bộ đếm thời gian lãng quên ($5.0\text{ s}$) được kích hoạt trước khi quái vật hủy lệnh truy đuổi và quay về lộ trình tuần tra ban đầu (Patrol Points), ngăn chặn lỗi AI bám đuổi vô tận qua chướng ngại vật.
  4. Hiệu quả tối ưu hóa tài nguyên: Giảm thiểu 42% tải CPU xử lý AI nhờ cơ chế giãn cách chu kỳ đánh giá (Tick Interval Throttling - AI chỉ đánh giá cây hành vi mỗi $0.1\text{ s}$ thay vì mỗi frame).

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

Dự án cung cấp một bộ khung (Framework) hoàn chỉnh cho việc phát triển các dòng game hành động chiến thuật trên thiết bị cầm tay:

  • Thương mại hóa Game Indie: Cấu trúc mã nguồn sẵn sàng để tích hợp SDK quảng cáo (Google AdMob, Unity Ads) và hệ thống mua hàng trong ứng dụng (In-App Purchase - IAP).
  • Mô hình học tập & nghiên cứu: Là tài liệu tham khảo thực nghiệm tiêu chuẩn cho sinh viên ngành Kỹ thuật Phần mềm và Game Development về cách tích hợp Behavior Tree, NavMesh và New Input System trong Unity.

Hướng dẫn triển khai kỹ thuật

Yêu cầu cấu hình tối thiểu và quy trình build sản phẩm:

  • Phần cứng thiết bị: Chip xử lý Quad-core 1.8 GHz, RAM 3GB, GPU Adreno 506 / Mali-G52 trở lên.
  • Phần mềm: Android 9.0 (Pie) trở lên, OpenGL ES 3.0.
  • Quy trình đóng gói APK/AAB:
    1. Mở dự án trong Unity 2022.3 LTS.
    2. Truy cập Build Settings $\rightarrow$ Chọn nền tảng Android.
    3. Cấu hình Player Settings:
      • Scripting Backend: IL2CPP.
      • Target Architectures: ARMv7, ARM64.
      • Target API Level: API Level 34 (Android 14).
    4. Nhấn Build and Run để tạo gói cài đặt tối ưu.

Hạn chế và hướng phát triển

Dù đạt được toàn bộ các yêu cầu nghiệm thu kỹ thuật, đề tài vẫn còn một số điểm cần tiếp tục hoàn thiện:

  • Hạn chế:
    • Sản phẩm hiện chỉ hỗ trợ chế độ chơi đơn ngoại tuyến (Single-player Offline).
    • Số lượng bản đồ còn giới hạn (1 màn chơi mẫu định hình quy chuẩn).
    • Đồ họa sử dụng các gói tài nguyên mẫu từ Unity Asset Store, chưa có bộ nhận diện mỹ thuật độc quyền.
  • Hướng phát triển tương lai:
    • Hệ thống Multiplayer: Tích hợp giải pháp mạng Netcode for GameObjects hoặc Photon Fusion để xây dựng chế độ đồng đội sinh tồn (Co-op Survival 2-4 người chơi).
    • Nội dung theo thủ tục (Procedural Dungeon Generation): Ứng dụng thuật toán sinh bản đồ tự động ngẫu nhiên để tăng giá trị chơi lại (Replayability).
    • Mở rộng kho vũ khí: Bổ sung các dòng vũ khí năng lượng, súng phóng lựu và cây kỹ năng bổ trợ chuyên sâu (Talent Tree).

Đối tượng hưởng lợi

  • Sinh viên & Lập trình viên mới bắt đầu (Students & Junior Devs): Tiếp cận mã nguồn mẫu chuẩn mực về kiến trúc cây hành vi AI, xử lý va chạm vật lý và giao diện cảm ứng di động trong Unity C#.
  • Nhà phát triển game độc lập (Indie Game Developers): Sử dụng khung sườn (Game Framework) có sẵn để rút ngắn 60% thời gian nghiên cứu và phát triển sản phẩm Top-Down Shooter thương mại.
  • Doanh nghiệp / Studio Game vừa và nhỏ: Sở hữu tài liệu phân tích kỹ thuật và phương pháp tối ưu hóa hiệu năng chi tiết trên phần cứng di động phổ thông.
  • Nhà nghiên cứu học thuật: Cung cấp số liệu thực nghiệm định lượng về sự khác biệt hiệu năng giữa FSM và Behavior Tree trong môi trường thời gian thực.

Câu hỏi thường gặp

1. Cấu hình tối thiểu để cài đặt và vận hành game trên thiết bị di động là gì?

Game yêu cầu thiết bị chạy hệ điều hành Android 9.0 (API Level 28) trở lên, bộ nhớ RAM tối thiểu 3GB, vi xử lý lõi tứ xung nhịp 1.8 GHz và hỗ trợ đồ họa OpenGL ES 3.0. Kích thước file cài đặt (APK) tối ưu đạt mức dưới $85\text{ MB}$.

2. Thuật toán Behavior Tree xử lý hiện tượng quá tải CPU khi số lượng quái vật tăng cao như thế nào?

Hệ thống sử dụng cơ chế Tick Throttling kết hợp Distance-based Lodding. Các quái vật ở khoảng cách xa người chơi ($>30\text{ m}$) chỉ được đánh giá cây hành vi mỗi $0.5\text{ s}$, trong khi quái vật tiếp cận gần được cập nhật với tần suất $0.1\text{ s}$, đảm bảo tổng thời gian xử lý AI luôn dưới $1.5\text{ ms}$ trên mỗi frame.

3. Có thể mở rộng game sang chế độ chơi nhiều người (Multiplayer) được không?

Hoàn toàn khả thi. Do kiến trúc tách biệt rõ ràng giữa logic điều khiển (Controller), dữ liệu thực thể (Model) và biểu diễn đồ họa (View), hệ thống có thể tích hợp Photon Fusion hoặc Mirror Network bằng cách đồng bộ hóa trạng thái State của cây hành vi và vị trí Transform qua mạng máy chủ authoritative.

4. Chi phí bản quyền và công cụ phát triển dự án này là bao nhiêu?

Dự án được xây dựng hoàn toàn trên phiên bản miễn phí của Unity Personal Edition, Visual Studio Community và các thư viện mã nguồn mở, do đó chi phí bản quyền công cụ trực tiếp là 0 USD.

5. Tại sao dự án chọn Behavior Tree thay vì Finite State Machine (FSM)?

Mô hình FSM bị bùng nổ số lượng liên kết trạng thái ($O(N^2)$) khi độ phức tạp của AI tăng lên, khiến việc gỡ lỗi và bảo trì cực kỳ khó khăn. Behavior Tree tổ chức theo dạng cây thứ bậc mô-đun hóa ($O(N)$), cho phép tái sử dụng các node lá hành vi và mở rộng trạng thái mà không ảnh hưởng đến các nhánh logic hiện có.


Kết luận

Khóa luận tốt nghiệp "Xây dựng Game 3D Nhập vai Sinh tồn" đã chứng minh tính khả thi và hiệu quả vượt trội của việc kết hợp thể loại bắn súng hành động với yếu tố nhập vai trên nền tảng di động. Bằng cách làm chủ các công nghệ nền tảng hiện đại như Unity Engine, C#, Unity NavMesh và cấu trúc Behavior Tree, đề tài đã giải quyết trọn vẹn bài toán xây dựng AI quái vật thông minh, tối ưu hóa hiệu năng 60 FPS mượt mà và thiết lập một vòng lặp trò chơi gây nghiện. Đây không chỉ là một sản phẩm đồ án tốt nghiệp xuất sắc về mặt học thuật mà còn là một bộ khung kỹ thuật vững chắc, sẵn sàng mở rộng thành các sản phẩm game thương mại chất lượng cao trong tương lai.