Giới thiệu dự án

Thị trường trò chơi điện tử toàn cầu đang chứng kiến sự chuyển dịch mạnh mẽ hướng tới các trải nghiệm đắm chìm (immersive experiences). Theo thống kê từ Entertainment Software Association (ESA), hơn 65% hộ gia đình tại Mỹ có ít nhất một thành viên chơi game thường xuyên, với độ tuổi trung bình là 35 tuổi. Song song đó, phân phối kỹ thuật số chiếm tới hơn 92% thị phần game. Sự bùng nổ của công nghệ Thực tế ảo (Virtual Reality - VR) trên các nền tảng phân phối lớn như Steam đã thúc đẩy nhu cầu trải nghiệm không gian 3 chiều tương tác cao. Tuy nhiên, rào cản chi phí phần cứng từ các hệ thống VR cao cấp (như Oculus Rift, HTC Vive, Valve Index dao động từ 400 USD đến hơn 1.000 USD) khiến phần lớn người dùng phổ thông khó tiếp cận.

Đồ án khóa luận "Nghiên cứu và phát triển Game 3D trên nền tảng Virtual Reality: Labyrinth Breaker" được thực hiện bởi nhóm sinh viên Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM. Đề tài tập trung giải quyết bài toán tối ưu hóa trải nghiệm game nhập vai sinh tồn - giải đố góc nhìn thứ nhất (First-Person Shooter / Adventure-Survival) trên nền tảng thiết bị di động kết hợp kính VR chi phí thấp (Google Cardboard).

                 +---------------------------------------------------+
                 |           Labyrinth Breaker VR Architecture       |
                 +---------------------------------------------------+
                                          |
         +--------------------------------+--------------------------------+
         |                                |                                |
+------------------+            +-------------------+            +-------------------+
|  Core VR Engine  |            |  AI & Navigation  |            | Narrative Engine  |
|  - Cardboard SDK |            |  - NavMeshAgent   |            | - Event Manager   |
|  - Reticle Gaze  |            |  - State Machine  |            | - 3 Branch Branch |
|  - 3-DoF Tracking|            |  - Waypoints Boss |            |   (Good/Bad/True) |
+------------------+            +-------------------+            +-------------------+
         |                                |                                |
         +--------------------------------+--------------------------------+
                                          |
                         +----------------------------------+
                         | Unity Engine Runtime (Android)   |
                         | Target: 60 FPS | GLES3 | <350MB  |
                         +----------------------------------+

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

  1. Xây dựng hoàn chỉnh game VR 3D góc nhìn thứ nhất (FPS) với cơ chế di chuyển, ngắm bắn và giải đố mê cung trên engine Unity.
  2. Hiện thực hóa hệ thống tương tác VR độc lập: Tích hợp giải pháp Reticle Pointer (Gaze-based interaction) kết hợp tay cầm điều khiển Bluetooth, giải quyết xung đột điều khiển trên smartphone.
  3. Thiết kế hệ thống trí tuệ nhân tạo (AI) cho Non-Player Characters (NPC): Tích hợp hệ thống phân tích đường đi NavMesh cho quái vật cận chiến và Boss có khả năng bắn đạn phản xạ (projectile reflection).
  4. Phát triển cốt truyện phân nhánh tâm lý học: Xây dựng hệ thống lựa chọn hành vi dẫn tới 3 kết thúc khác nhau (Good Ending, Bad Ending, True Ending) mang thông điệp chữa lành tâm lý.

Phạm vi và giới hạn kỹ thuật

  • Nền tảng mục tiêu: Hệ điều hành Android (Android 8.0 Oreo trở lên), biên dịch qua Unity Engine.
  • Phần cứng tương thích: Điện thoại thông minh tích hợp con quay hồi chuyển (Gyroscope) gắn kèm kính Google Cardboard và Gamepad Bluetooth rời.
  • Giới hạn: Hệ thống theo dõi 3 bậc tự do (3-DoF Orientation Tracking), chưa hỗ trợ 6-DoF Positional Tracking do giới hạn phần cứng di động giá rẻ.

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

Phân tích hiện trạng và đối thủ cạnh tranh

Tiêu chí Half-Life: Alyx VRChat Mobile VR Clones (Thị trường) Labyrinth Breaker (Đồ án)
Nền tảng phần cứng PC VR cao cấp (Valve Index, Oculus Link) Đa nền tảng (PC, Standalone Quest) Android / iOS phổ thông Android + Google Cardboard
Chi phí thiết bị Rất cao (> $1000 kèm PC) Trung bình - Cao ($300 - $1000) Rất thấp ($10 - $20) Cực thấp ($5 - $15)
Cơ chế điều khiển 6-DoF Motion Controllers 6-DoF Motion / Hand Tracking Touch screen / Gaze đơn thuần Gaze Pointer + Bluetooth Gamepad
Cốt truyện & Chiều sâu Tuyến tính, AAA kinh phí lớn Không có (Social Sandbox) Không có cốt truyện, lặp lại Phân nhánh 3 kết thúc tâm lý
Độ mượt trên Mobile Không hỗ trợ Mobile Yêu cầu SoC cao cấp Kém tối ưu, dễ gây say VR Tối ưu hóa Static Batching & NavMesh

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

  • Must-have (Bắt buộc phải có): VR Camera Rig 3-DoF, hệ sinh thái Raycast tương tác vật thể, thuật toán AI tìm đường NavMeshAgent, hệ thống quản lý trạng thái màn chơi (Load/Unload scene).
  • Should-have (Nên có): Boss AI đa trạng thái (tuần tra Waypoint, bắn đạn nảy Bullet Bounce, cận chiến), hệ thống kinh tế In-game Coin và Shop nâng cấp chỉ số.
  • Could-have (Có thể có): Hiệu ứng âm thanh không gian 3D Spatial Audio, hiệu ứng tia lửa va chạm Particle System.
  • Won't-have (Chưa thực hiện): Tính năng Multiplayer qua mạng, hệ thống Render Realtime Dynamic Shadows phức tạp (nhằm bảo toàn tốc độ khung hình trên mobile).

Thiết kế kiến trúc và ngăn xếp công nghệ (Technology Stack)

+-------------------------------------------------------------------------+
|                              PRESENTATION LAYER                         |
|   Google Cardboard Stereo Rendering | Reticle Pointer UI | HUD Display  |
+-------------------------------------------------------------------------+
                                    |
+-------------------------------------------------------------------------+
|                              APPLICATION LAYER                          |
|  PlayerController  |  CombatSystem  |  InventoryManager  |  SceneManager|
|  (CharacterCtrl)   |  (Raycast/Gun) |  (Key/Coin/Health) |  (Map Loader)|
+-------------------------------------------------------------------------+
                                    |
+-------------------------------------------------------------------------+
|                              AI & LOGIC LAYER                           |
|       NavMeshAgent Engine      |       FSM Enemy/Boss AI Engine         |
+-------------------------------------------------------------------------+
                                    |
+-------------------------------------------------------------------------+
|                           DATA & PERSISTENCE LAYER                      |
|                PlayerPrefs / Binary In-Game State Storage               |
+-------------------------------------------------------------------------+
  • Game Engine: Unity 2019.4 / 2020.3 LTS (C# Scripting, .NET Standard 2.0).
  • SDK Tích hợp: Google Cardboard XR Plugin for Unity v1.4+.
  • AI Navigation: Unity Navigation System (UnityEngine.AI.NavMeshAgent).
  • Vật lý & Tương tác: Unity Physics Engine (Physics.Raycast, CapsuleCollider, SphereCollider).
  • Đồ họa: Universal Render Pipeline (URP) tối ưu hóa Draw Calls cho Mobile GPU.

Quy trình phát triển (Methodology)

Dự án áp dụng mô hình Agile/Scrum rút gọn kéo dài trong 4 Sprint (từ 08/03/2021 đến 30/06/2021):

  • Sprint 1 (Tuần 1-3): Nghiên cứu SDK Google Cardboard, thiết lập Camera Rig Stereoscopic và nguyên mẫu tương tác Pointer.
  • Sprint 2 (Tuần 4-6): Thiết kế Map mê cung, nướng dữ liệu NavMesh, xây dựng Logic PlayerController và vũ khí.
  • Sprint 3 (Tuần 7-11): Phát triển AI Monster/Boss, hệ thống vật phẩm (Key, Door, Health, Treasure, Coin), tích hợp cốt truyện.
  • Sprint 4 (Tuần 12-15): Kiểm thử hiệu năng trên thiết bị Android thực tế, tối ưu hóa bộ nhớ và biên soạn báo cáo.

Implementation và kết quả

Chi tiết thuật ngữ kỹ thuật cốt lõi

  1. NavMeshAgent: Thành phần định vị đường đi tự động trên bề mặt lưới định sẵn (Navigation Mesh) với độ phức tạp $O(E + V \log V)$ dựa trên thuật toán $A^*$.
  2. Reticle Raycasting: Kỹ thuật phóng tia vô hình từ tâm Camera VR để xác định tọa độ giao cắt với Collider của GameObject.
  3. Finite State Machine (FSM): Máy trạng thái hữu hạn điều khiển chu kỳ hành vi của AI: Patrol -> Chase -> Melee Attack -> Ranged Attack -> Dead.
  4. Draw Call Batching: Gom nhóm các lệnh vẽ của GPU để giảm áp lực CPU (Static/Dynamic Batching).

Đoạn mã thực thi tương tác tương thích VR (Interaction via Raycast)

using UnityEngine;

public class VRPtrInteraction : MonoBehaviour
{
    [SerializeField] private float interactRange = 4.5f;
    [SerializeField] private LayerMask interactableLayer;
    [SerializeField] private Transform reticleVisual;

    private void Update()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, interactRange, interactableLayer))
        {
            // Tối ưu kích thước Reticle khi trỏ đúng đối tượng
            reticleVisual.localScale = Vector3.one * 1.5f;

            if (Input.GetButtonDown("Fire1")) // Nhận tín hiệu từ Gamepad Bluetooth
            {
                IInteractable target = hit.collider.GetComponent<IInteractable>();
                if (target != null)
                {
                    target.OnInteract();
                }
            }
        }
        else
        {
            reticleVisual.localScale = Vector3.one * 0.8f;
        }
    }
}

Đoạn mã thuật toán AI Boss tuần tra và tấn công (FSM Engine)

using UnityEngine;
using UnityEngine.AI;

public class BossAIController : MonoBehaviour
{
    public NavMeshAgent agent;
    public Transform player;
    public LayerMask whatIsGround, whatIsPlayer;
    
    // Hệ thống tuần tra (Patrol Waypoints)
    public Transform[] patrolPoints;
    private int currentPointIndex = 0;
    
    // Tầm quét
    public float sightRange = 15f, attackRange = 4f;
    public bool playerInSightRange, playerInAttackRange;
    
    // Combat
    public GameObject projectilePrefab;
    public Transform firePoint;
    public float timeBetweenAttacks = 2f;
    private bool alreadyAttacked;

    private void Awake()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    private void Update()
    {
        playerInSightRange = Physics.CheckSphere(transform.position, sightRange, whatIsPlayer);
        playerInAttackRange = Physics.CheckSphere(transform.position, attackRange, whatIsPlayer);

        if (!playerInSightRange && !playerInAttackRange) Patroling();
        if (playerInSightRange && !playerInAttackRange) ChasePlayer();
        if (playerInSightRange && playerInAttackRange) AttackPlayer();
    }

    private void Patroling()
    {
        if (patrolPoints.Length == 0) return;
        agent.SetDestination(patrolPoints[currentPointIndex].position);

        if (Vector3.Distance(transform.position, patrolPoints[currentPointIndex].position) < 1.5f)
        {
            currentPointIndex = (currentPointIndex + 1) % patrolPoints.Length;
        }
    }

    private void ChasePlayer()
    {
        agent.SetDestination(player.position);
    }

    private void AttackPlayer()
    {
        agent.SetDestination(transform.position); // Dừng lại để thi triển đòn đánh
        transform.LookAt(player);

        if (!alreadyAttacked)
        {
            // Bắn Projectile có khả năng va đập phản xạ tối đa 3 lần
            GameObject rb = Instantiate(projectilePrefab, firePoint.position, Quaternion.identity);
            rb.GetComponent<Rigidbody>().AddForce(transform.forward * 20f, ForceMode.Impulse);

            alreadyAttacked = true;
            Invoke(nameof(ResetAttack), timeBetweenAttacks);
        }
    }

    private void ResetAttack()
    {
        alreadyAttacked = false;
    }
}

Kết quả kiểm thử và đánh giá hiệu năng (Benchmarks)

Thiết bị kiểm thử Cấu hình phần cứng (SoC / RAM) FPS Trung bình Tiêu thụ RAM Độ trễ Motion-to-Photon
PC Editor (Unity Engine) Intel Core i7-10750H / GTX 1660Ti 144 FPS ~450 MB < 5 ms
Samsung Galaxy A51 Exynos 9611 / 6GB RAM 54.2 FPS ~310 MB ~18.5 ms
Xiaomi Redmi Note 9S Snapdragon 720G / 6GB RAM 59.8 FPS ~295 MB ~16.2 ms
Vsmart Live 4 Snapdragon 675 / 4GB RAM 51.0 FPS ~330 MB ~21.0 ms
                       User Satisfaction Score (GUESS Model)
                       =====================================
Engrossment (Cuốn hút)        : [########################----] 82% (4.1/5.0)
Enjoyment (Hài lòng)          : [##########################--] 86% (4.3/5.0)
Audio/Visual Aesthetic        : [######################------] 74% (3.7/5.0)
Controls & Usability          : [########################----] 80% (4.0/5.0)
Narrative Comprehension       : [##########################--] 88% (4.4/5.0)

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

  1. Tách biệt cơ chế quan sát và hướng di chuyển (Decoupled Vector Locomotion): Thay vì gắn hướng di chuyển theo góc nhìn camera (gây triệu chứng say tàu xe - Simulator Sickness), hệ thống phân tách vector quay của đầu (Gyroscopic VR Headset) và vector di chuyển tịnh tiến của tay cầm (Bluetooth Controller Joystick).
  2. Kỹ thuật tối ưu hóa tài nguyên phần cứng thấp: Ứng dụng quản lý tải bản đồ động (Dynamic Map Baking & Culling). Draw Call của môi trường 3D được ép xuống dưới 45 draw calls/frame, giúp game duy trì ổn định ngưỡng 60 FPS trên SoC tầm trung.
  3. Cơ chế dẫn truyện phân nhánh theo hành vi (Behavioral Narrative Mapping): Trò chơi không sử dụng hội thoại trực tiếp mà ghi nhận chỉ số hành vi (Action Metrics) của người chơi đối với các NPC quái vật:
    • Good Ending: Tiêu diệt toàn bộ quái vật $\rightarrow$ Đối diện dũng cảm với quá khứ.
    • Bad Ending: Trốn chạy hoàn toàn, không tiêu diệt quái $\rightarrow$ Mãi đắm chìm trong bế tắc.
    • True Ending: Cân bằng giữa tự vệ và tha thứ $\rightarrow$ Chấp nhận tổn thương như một phần của bản thân.
                           +------------------------+
                           |   Player Action Data   |
                           +------------------------+
                                       |
                +----------------------+----------------------+
                |                      |                      |
         [Kill All Boss/Mobs]   [Evade 100% Combat]    [Balanced Choices]
                |                      |                      |
                v                      v                      v
        +---------------+      +---------------+      +---------------+
        |  Good Ending  |      |  Bad Ending   |      |  True Ending  |
        |  Acceptance & |      |  Despair &    |      |  Self-healing |
        |  Peace        |      |  Suicide      |      |  & Balance    |
        +---------------+      +---------------+      +---------------+

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

Trường hợp sử dụng thực tế (Use Cases)

  • Giải trí chi phí cực thấp: Trải nghiệm game bắn súng VR mà không cần đầu tư dàn máy tính đắt đỏ.
  • Nghiên cứu Game trị liệu tâm lý (Serious Games): Làm mô hình mẫu cho các ứng dụng tương tác phản xạ hỗ trợ điều trị chấn thương tâm lý (PTSD) và trầm cảm thông qua ẩn dụ nghệ thuật.
  • Mẫu tham chiếu giáo dục: Tài liệu tham khảo chuẩn cho sinh viên công nghệ phần mềm muốn tiếp cận kiến trúc VR trên Unity Engine.

Hướng dẫn cài đặt và triển khai (Deployment Guide)

  1. Yêu cầu môi trường: Cài đặt Unity Hub, Unity Editor phiên bản 2019.4.x LTS hoặc 2020.3.x LTS với Module Android Build Support (bao gồm Android SDK & NDK Tools, OpenJDK).
  2. Cấu hình Player Settings:
    • Package Name: com.UIT.LabyrinthBreakerVR
    • Minimum API Level: Android 8.0 'Oreo' (API Level 26)
    • Scripting Backend: IL2CPP
    • Target Architectures: ARM64
    • XR Plugin Management: Chọn Cardboard XR Plugin.
  3. Build & Run: Kết nối thiết bị qua USB Debugging, thực hiện Build and Run để xuất tệp tin .apk.

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

Hạn chế kỹ thuật hiện tại

  • Đồ họa còn ở mức Low-Poly đơn giản do sử dụng các asset miễn phí để tối ưu hóa hiệu năng.
  • Chưa có hệ thống tạo mê cung ngẫu nhiên theo thuật toán (Procedural Maze Generation).
  • Thiếu tương tác cử động tay do giới hạn phần cứng của kính Google Cardboard (3-DoF).

Kế hoạch nâng cấp tương lai

  • Q3/2026: Nâng cấp mã nguồn sang chuẩn OpenXR, mở rộng hỗ trợ cho các thiết bị Standalone VR 6-DoF như Meta Quest 2/3 và Pico 4.
  • Q4/2026: Tích hợp thuật toán sinh mê cung tự động Prim / Kruskal Algorithm nhằm gia tăng giá trị chơi lại (Replay Value).
  • Q1/2027: Nâng cấp hệ thống âm thanh vòm không gian thực (Spatial Audio Resonance HRTF).

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

+-------------------------------------------------------------------------+
|                        TARGET AUDIENCE & VALUE GAIN                     |
+-------------------------------------------------------------------------+
| Sinh viên CNTT  : Nắm vững kiến trúc Game VR, tối ưu hóa Unity Mobile   |
| Game Developers : Mẫu code FSM AI Boss, xử lý Raycast Pointer trên Cardboard |
| Doanh nghiệp VR : Mô hình triển khai giải pháp VR Marketing chi phí thấp|
| Nhà nghiên cứu  : Dữ liệu thực nghiệm về mức độ hài lòng theo thang GUESS|
+-------------------------------------------------------------------------+
  • Sinh viên ngành Kỹ thuật Phần mềm / Game Development: Tiếp cận mã nguồn mẫu, cách tổ chức GameObject, Prefab, ScriptableObject và kỹ thuật nướng NavMesh trên môi trường 3D di động.
  • Lập trình viên độc lập (Indie Game Developers): Có sẵn bộ khung xử lý chống say tàu xe (Motion Sickness Reduction) khi phát triển game VR cho thiết bị cấu hình thấp.
  • Các nhà phát triển ứng dụng tâm lý / Giáo dục: Nắm bắt phương pháp lồng ghép câu chuyện trừu tượng vào quy tắc trò chơi (Game Mechanics) để tác động tích cực đến tâm lý người trải nghiệm.

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

1. Phần cứng điện thoại nào đáp ứng được tựa game này?

Mọi điện thoại thông minh chạy hệ điều hành Android 8.0 trở lên, trang bị tối thiểu 3GB RAM, bộ xử lý tương đương Snapdragon 660 / Exynos 9611 và bắt buộc phải có cảm biến con quay hồi chuyển (Gyroscope).

2. Làm thế nào để khắc phục hiện tượng say thực tế ảo (VR Motion Sickness) trong game?

Game duy trì tốc độ khung hình cố định trên 50-60 FPS, loại bỏ các rung lắc camera không cần thiết (Head Bobbing), đồng thời tách biệt hướng nhìn với trục di chuyển của nhân vật.

3. Tại sao dự án không sử dụng quảng cáo biểu ngữ (Banner/Popup Ads) để kiếm tiền?

Trong môi trường VR 360 độ, quảng cáo pop-up sẽ phá vỡ hoàn toàn cảm giác nhập tâm (Immersion) và gây ức chế thị giác nghiêm trọng cho người dùng. Do đó, mô hình kinh doanh chuyển hướng sang In-App Purchases (IAP) mua Coin mở khóa vật phẩm.

4. Game có hỗ trợ các loại kính thực tế ảo khác ngoài Google Cardboard không?

Có. Game tương thích với mọi loại kính VR gắn điện thoại như VR Box, BoboVR, Shinecon, v.v., miễn là thiết bị di động có thể kết nối với tay cầm điều khiển Bluetooth rời.

5. Dung lượng bộ cài và mức tiêu hao pin trung bình là bao nhiêu?

Tệp tin cài đặt APK có dung lượng xấp xỉ 85 MB. Mức tiêu hao năng lượng trung bình khoảng 8-12% pin cho 30 phút trải nghiệm liên tục nhờ việc tắt bỏ các bóng đổ thời gian thực (Realtime Dynamic Shadows).


Kết luận

Đồ án "Nghiên cứu và phát triển Game 3D trên nền tảng Virtual Reality: Labyrinth Breaker" của nhóm sinh viên Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM đã giải quyết thành công bài toán đưa trải nghiệm thực tế ảo đắm chìm lên các thiết bị di động phổ thông. Bằng việc kết hợp nhuần nhuyễn giữa bộ công cụ Unity 3D, hệ thống trí tuệ nhân tạo NavMeshAgent và tư duy thiết kế màn chơi giàu tính biểu tượng, dự án không chỉ đạt kết quả xuất sắc về mặt kỹ thuật mà còn chứng minh tiềm năng to lớn của các tựa game Indie giàu giá trị nhân văn. Đây là bước đệm vững chắc cho các nghiên cứu chuyên sâu hơn về công nghệ Thực tế ảo mở rộng (XR) tại Việt Nam trong tương lai.