Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh công nghệ thông tin và kỹ thuật điện tử phát triển nhanh chóng, các thiết bị chơi game ngày càng trở nên phổ biến, thúc đẩy ngành công nghiệp trò chơi điện tử tăng trưởng mạnh mẽ và mang lại doanh thu lớn. Thiết kế trò chơi điện tử là một lĩnh vực đòi hỏi sự kết hợp phức tạp giữa tư duy mỹ thuật, kỹ thuật lập trình và việc áp dụng các nền tảng phát triển phần mềm trung gian (Game Engine) nhằm tối ưu hóa việc tái sử dụng tài nguyên và mã nguồn.

Nhằm tiếp cận quy trình xây dựng phần mềm trò chơi thực tế và củng cố kiến thức lập trình hướng đối tượng với ngôn ngữ C#, đề tài "Phát triển game 3D bắn súng FPS Final Battleground trên nền tảng Unity" được sinh viên Lê Công Lý thực hiện dưới sự hướng dẫn của ThS. Sử Kim Anh tại Khoa Phát triển Nông thôn, Trường Đại học Cần Thơ (khóa 44, hoàn thành tháng 8/2021).

Mục tiêu nghiên cứu và nhiệm vụ của đề tài được xác định cụ thể như sau:

  1. Nghiên cứu tổng quan về lĩnh vực lập trình trò chơi điện tử và kiến trúc hoạt động của Game Engine đa nền tảng.
  2. Tìm hiểu và ứng dụng các công nghệ cốt lõi trong Unity Engine để tối ưu hóa hiệu quả xây dựng game 3D.
  3. Thiết kế, xây dựng và hoàn thiện sản phẩm trò chơi bắn súng góc nhìn thứ nhất (First-Person Shooter - FPS) mang tên Final Battleground.
  4. Chuẩn bị kiến thức nền tảng và kỹ năng kỹ thuật phục vụ định hướng nghề nghiệp trong ngành phát triển trò chơi điện tử.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Quy trình thiết kế, lập trình chuyển động nhân vật, cơ chế vũ khí, vật lý va chạm, trí tuệ nhân tạo (AI) cho kẻ thù và quản lý luồng trò chơi trên nền tảng Unity.
  • Phạm vi lý thuyết: Các nguyên lý đồ họa 3D, hệ tọa độ Descartes, các lớp đối tượng trong bộ thư viện UnityAPI và kỹ thuật lập trình C#.
  • Phạm vi kỹ thuật và môi trường thực thi: Xây dựng trò chơi có giao diện thân thiện, tốc độ truy xuất nhanh, cấu trúc mã nguồn dễ mở rộng. Bản dựng hiện tại được đóng gói dưới dạng tệp thực thi (.exe) chạy trên hệ điều hành Windows, đồng thời bảo đảm kiến trúc có khả năng chuyển đổi sang macOS, iOS và Android.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và công nghệ nền tảng

  • Unity Engine: Công cụ phát triển trò chơi đa nền tảng do Unity Technologies phát triển, hỗ trợ dựng hình thời gian thực (real-time rendering) 2D/3D, tính toán va chạm vật lý, âm thanh, hoạt ảnh (Animation), trí tuệ nhân tạo và quản lý bộ nhớ. Đồ án khai thác phiên bản Unity 2018.2 cùng hệ thống kiến trúc hướng thành phần (Component-based architecture).
  • Hệ thống lớp UnityAPI: Vận dụng các lớp cơ sở bao gồm MonoBehaviour, GameObject, Component, Transform, Input, Camera, Light, ParticleEmitter, Audio, Rigidbody, CharacterController, Collider và GUI.
  • Nguyên lý không gian 3D: Sử dụng hệ tọa độ Descartes 3 trục (X: ngang, Y: cao, Z: sâu), phân biệt không gian toàn cục (World Space) gắn với gốc tọa độ (0, 0, 0) và không gian cục bộ (Local Space) thiết lập theo quan hệ phân cấp cha - con (Parent - Child). Ứng dụng các phép toán véc-tơ để tính toán hướng nhìn, khoảng cách và góc bắn.
  • Cơ chế vật liệu và đổ bóng: Kết hợp Material, Texture và Shader để thiết lập thuộc tính hiển thị bề mặt của mô hình 3D.

Phương pháp nghiên cứu

  • Phương pháp thu thập dữ liệu: Tổng hợp và phân tích tài liệu kỹ thuật, tài liệu hướng dẫn chính thức từ Unity Technologies và các diễn đàn phát triển phần mềm chuyên ngành.
  • Phương pháp thiết kế và phát triển phần mềm: Áp dụng mô hình hướng dữ liệu và phát triển ứng dụng nhanh (Rapid Application Development) được tích hợp trong Game Engine.
  • Công cụ phần mềm sử dụng:
STT Tên phần mềm Vai trò và chức năng trong đề tài
1 Unity (phiên bản 2018.2) Môi trường tích hợp phát triển và lập trình trò chơi
2 Visual Studio Code Môi trường soạn thảo, gỡ lỗi và quản lý mã nguồn C#
3 Adobe Photoshop CS6 Thiết kế, xử lý đồ họa, cắt ghép giao diện, logo và banner

Thiết kế và triển khai hệ thống

Cốt truyện và cấu trúc màn chơi

Trò chơi Final Battleground lấy bối cảnh khoa học viễn tưởng năm 2090. Tại một trạm nghiên cứu robot trên sao Hỏa, sự cố kỹ thuật và lỗi phần mềm khiến các robot trang bị trí tuệ nhân tạo (AI) nhận thức được thông tin mật, nổi dậy chiếm quyền kiểm soát trạm và tiêu diệt các nhà khoa học nhằm chuẩn bị xâm chiếm Trái Đất. Người chơi đóng vai trò một chiến binh có nhiệm vụ đột kích vào trạm nghiên cứu, tiêu diệt toàn bộ robot lỗi, xóa dữ liệu và trở về Trái Đất.

Trò chơi bao gồm 02 màn chơi tuần tự:

  1. Trạm nghiên cứu C1 (MainScene): Màn chơi mở đầu với địa hình phòng thí nghiệm không gian, bố trí hệ thống robot bay và robot pháo đài cố định.
  2. Trạm nghiên cứu C2 (SecondaryScene): Màn chơi nâng cao, yêu cầu người chơi tiêu diệt toàn bộ số lượng kẻ thù còn lại để hoàn thành nhiệm vụ và chuyển tới cảnh chiến thắng (WinScene).

Cấu trúc nhân vật và cơ chế điều khiển

  • Player (Người chơi): Do trò chơi thuộc thể loại góc nhìn thứ nhất (FPS), nhân vật chính được xây dựng từ một Main Camera gắn kèm các thành phần xử lý âm thanh và hệ thống tập lệnh kịch bản C#.
  • Lớp PlayerInputHandler: Tiếp nhận tín hiệu điều khiển từ bàn phím và chuột (phím số 1, 2, 3 hoặc con lăn chuột để đổi vũ khí), đồng thời tham chiếu đến GameFlowManager để vô hiệu hóa tiếp nhận điều khiển khi trò chơi kết thúc.
  • Lớp PlayerCharacterController: Điều khiển tốc độ, hướng di chuyển và trạng thái rơi/nhảy của nhân vật dựa trên biến characterVelocity. Lớp này kết nối trực tiếp với PlayerWeaponsManager và lớp quản lý lượng máu Health.
  • Lớp Jetpack: Bổ sung cơ chế bay phản lực khi người chơi mở khóa tính năng và nhấn phím cách (Space), liên tục cộng thêm gia tốc vào characterVelocity tại mỗi khung hình cập nhật.

Hệ thống vũ khí và cơ chế đường đạn

  • Lớp PlayerWeaponsManager: Quản lý danh sách vũ khí ban đầu (startedWeapons). Sử dụng một camera phụ (Weapon Camera) chuyên trách hiển thị mô hình vũ khí đè lên khung hình của camera chính. Hệ thống hỗ trợ hai vị trí hiển thị vũ khí: DefaultWeaponPosition (vị trí mặc định) và AimingWeaponPosition (vị trí ngắm bắn với giá trị trục X được căn về 0). Khi người chơi nhấn chuột phải để ngắm, góc nhìn của camera (FOV) được điều chỉnh thông qua hoạt ảnh mã nguồn (FOV Animation), đồng thời kích hoạt tâm ngắm giao diện (Crosshair HUD) qua biến logic isPointingAtEnemy.
  • Lớp WeaponController: Quản lý thông số kỹ thuật của từng loại súng, bao gồm loại đạn, góc tỏa của đạn chùm (BulkAngle), hệ số thu phóng ngắm bắn (aimZoomRatio) và điểm phát sinh tia lửa nòng súng (Muzzle). Tiến trình xử lý bắn súng diễn ra qua chuỗi hàm: HandleShootInputs $\rightarrow$ TryShoot $\rightarrow$ HandleShoot. Biến thời gian m_LastTimeShoot được thiết lập nhằm ngăn chặn hiện tượng phát sinh đạn quá nhanh khi thao tác nhấp chuột liên tục.
  • Lớp ProjectileBase và ProjectileStandard: Xử lý logic vật lý của đường đạn bằng mô hình ủy quyền sự kiện (delegate) UnityAction onShoot. Đạn được cấp bán kính hình cầu (Sphere) để kiểm tra va chạm với môi trường và mục tiêu. Nhằm khắc phục hiện tượng đạn bay với vận tốc cao xuyên qua bề mặt vật cản mỏng, hệ thống lưu trữ vị trí gốc cuối cùng (m_LastRootPosition) tại mỗi chu kỳ Update để quét kiểm tra va chạm theo đoạn đường di chuyển thực tế giữa hai khung hình.
  • Lớp Damageable và Health: Tiếp nhận tương tác va chạm đạn để trừ lượng máu thông qua hàm TakeDamage, InflictDamage hoặc tính toán sát thương diện rộng InflictDamageInArea đối với các loại đạn nổ.

Trí tuệ nhân tạo (AI) cho kẻ thù

Hệ thống kẻ thù trong game bao gồm hai phân loại chính:

  • Enemy_HoverBot (Robot bay lượn): Sử dụng lớp EnemyMobile triển khai theo mô hình máy trạng thái hữu hạn (Finite State Machine - FSM) gồm 3 trạng thái: Tuần tra (Patrol), Theo dõi (Follow) và Tấn công (Attack). Dữ liệu tuần tra được định tuyến qua lớp PatrolPath chứa danh sách các điểm nút (pathNode). Quá trình xử lý AI được phân tách rõ ràng thành hai chức năng: UpdateAIStateTransitions (kiểm tra điều kiện chuyển đổi trạng thái) và UpdateCurrentAIState (thực thi hành vi của trạng thái hiện hành). Âm thanh chuyển động của robot được tự động điều chỉnh cao độ (pitch) tương ứng với vận tốc di chuyển.
  • Enemy_Turret (Robot pháo đài): Giữ vị trí cố định, tự động quét tìm mục tiêu trong phạm vi thiết lập và khai hỏa khi người chơi đi vào tầm ngắm.
  • Lớp EnemyController: Cung cấp các tiện ích xử lý chung cho cả hai loại robot, tương tác với lớp Actor để xác định tọa độ ngắm bắn (aimPoint) của người chơi.

Quản lý luồng trò chơi (Game Flow)

Luồng chuyển cảnh giữa các màn chơi được kiểm soát thông qua thành phần GameFlowManager cấu hình trong cửa sổ Build Settings:

  • Khởi động từ màn chơi thứ nhất (MainScene).
  • Nếu đạt điều kiện thắng (tiêu diệt toàn bộ robot tại trạm C1), trò chơi tự động chuyển hướng sang cảnh phụ (SecondaryScene - trạm C2).
  • Nếu hoàn thành mục tiêu tại SecondaryScene, hệ thống điều hướng đến màn hình chiến thắng (WinScene).
  • Nếu lượng máu của nhân vật giảm về 0 tại bất kỳ màn chơi nào, trò chơi chuyển ngay lập tức đến màn hình thất bại (LoseScene).
  • Các nút tương tác tại WinScene và LoseScene cho phép người chơi chọn tính năng "Chơi lại" để khởi động lại từ MainScene.

Nội dung chính theo từng chương

Chương 1: Tổng quan

Chương 1 phân tích hiện trạng phát triển của ngành công nghiệp game và sự cần thiết của việc tiếp cận công nghệ Game Engine. Tác giả trình bày lý do lựa chọn đề tài, xác định các mục tiêu nghiên cứu, phạm vi cơ sở lý thuyết và yêu cầu kỹ thuật cần đạt được đối với một sản phẩm game 3D FPS. Ngoài ra, chương này liệt kê danh mục các công cụ phần mềm phục vụ quá trình phát triển bao gồm Unity, Visual Studio Code và Photoshop CS6.

Chương 2: Cơ sở lý thuyết

Chương 2 trình bày có hệ thống các kiến thức lý thuyết nền tảng phục vụ lập trình trò chơi:

  • Lịch sử và ưu điểm của Unity Engine: Trình bày mốc phát triển từ năm 2005 (phiên bản 1.0 giới thiệu bởi David Helgason) đến bản 2018.2; trích dẫn thống kê năm 2016 về 5 tỷ lượt tải ứng dụng Unity, 2,4 tỷ thiết bị di động tiếp cận và tỷ lệ chiếm 34% trong top 1000 game di động miễn phí; phân tích các ưu điểm về hỗ trợ đa nền tảng, tính kinh tế và tính dễ sử dụng.
  • Các thành phần cốt lõi trong Unity: Định nghĩa chi tiết về Asset, Scene, Game Object, Component, Script, Prefab, Material, Shader và các lớp API quan trọng.
  • Tổng quan về Game Engine: Phân tích khái niệm phần mềm trung gian (Middleware), cơ chế ảo hóa phần cứng qua đồ họa Direct3D/OpenGL, thư viện DirectX/SDL/OpenAL; phân loại engine theo 3 mức độ chuyên biệt: Roll-your-own (tự phát triển cấp thấp), Mostly-ready (OGRE, Torque, Unreal, id Tech, Gamebryo) và Point-and-click (GameMaker, Unity).
  • Không gian 3D: Khái quát hệ trục tọa độ Cartesian, quan hệ giữa World Space và Local Space, tính toán véc-tơ và kỹ thuật quản lý nhiều Camera để tối ưu hóa quá trình kết xuất hình ảnh.
  • Các thể loại game phổ biến: Phân tích đặc trưng của các dòng game MMORPG, FPS, Game chiến thuật (RTS, TBS) và MOBA.

Chương 3: Mô tả và thiết kế game

Chương 3 là phần trọng tâm kỹ thuật của đồ án, mô tả chi tiết quy trình xây dựng trò chơi Final Battleground:

  • Xây dựng bản đồ 3D cho 02 trạm nghiên cứu không gian C1 và C2.
  • Thiết lập nhân vật người chơi bằng Main Camera gắn kèm các kịch bản xử lý di chuyển, nhảy và bộ phản lực Jetpack.
  • Cấu hình robot kẻ thù (Enemy_HoverBot và Enemy_Turret), thiết lập đường dẫn tuần tra PatrolPath và liên kết với các điểm nút pathNode.
  • Thiết kế chi tiết cấu trúc hướng đối tượng cho hệ thống mã nguồn C#: PlayerInputHandler, PlayerCharacterController, PlayerWeaponsManager, WeaponController, Damageable, ProjectileBase, ProjectileStandard, EnemyController và EnemyMobile.
  • Cấu hình luồng trò chơi và giao diện người dùng (UI) bao gồm Menu chính (nút Vào game, Hướng dẫn điều khiển, Tùy chọn), màn hình HUD khi giao chiến, bảng tạm dừng (Pause Menu), màn hình hoàn thành nhiệm vụ và màn hình thất bại.

Chương 4: Kết luận

Chương 4 tổng hợp các kết quả thu nhận được qua quá trình thực hiện niên luận, đánh giá ưu điểm, hạn chế của sản phẩm trò chơi và vạch ra định hướng phát triển trong tương lai.

Kết quả và đóng góp

Kết quả đạt được

  • Về kiến thức: Sinh viên đã nắm vững quy trình phân tích, thiết kế và phát triển một trò chơi 3D hoàn chỉnh; hiểu rõ kiến trúc hướng thành phần trong Unity, nguyên lý máy trạng thái hữu hạn áp dụng cho AI và cơ chế tương tác vật lý đạn đạo.
  • Về kỹ thuật và sản phẩm:
    • Hoàn thiện sản phẩm game 3D FPS Final Battleground với đầy đủ các phân cảnh: Menu chính, 02 màn chơi chiến đấu tại trạm nghiên cứu không gian, hệ thống tạm dừng tùy chọn và các màn hình kết thúc.
    • Xây dựng thành công cơ chế chuyển động mượt mà cho nhân vật, tích hợp tính năng bay phản lực Jetpack và cơ chế đổi vũ khí linh hoạt.
    • Lập trình thành công AI cho robot kẻ thù với khả năng tự động tuần tra theo tuyến đường định sẵn, phát hiện mục tiêu, truy đuổi và tấn công người chơi.
    • Xử lý chính xác thuật toán kiểm tra va chạm của đường đạn, loại bỏ triệt để lỗi đạn xuyên tường ở cự ly gần nhờ kỹ thuật ghi nhận tọa độ gốc cuối cùng m_LastRootPosition.

Đóng góp thực tiễn của đề tài

Đề tài cung cấp một tài liệu kỹ thuật có tính hệ thống về việc hiện thực hóa thể loại game bắn súng góc nhìn thứ nhất trên Unity 2018.2. Cấu trúc mã nguồn C# được phân tách rõ ràng theo từng mô-đun chức năng (xử lý đầu vào, điều khiển vũ khí, cơ chế sát thương, máy trạng thái AI) tạo tiền đề thuận lợi cho việc tái sử dụng và mở rộng các tính năng gameplay phức tạp hơn.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế của đề tài

  • Mô hình nhân vật: Nhân vật chính trong game mới dừng lại ở việc gán các script và âm thanh vào Main Camera, chưa xây dựng mô hình nhân vật 3D hoàn chỉnh cùng hệ thống diễn hoạt cơ thể phức tạp.
  • Số lượng màn chơi và độ phong phú của tài nguyên: Trò chơi hiện chỉ có 02 màn chơi; số lượng chủng loại kẻ thù (02 loại bot) và vũ khí còn ở mức cơ bản.
  • Môi trường triển khai: Sản phẩm mới được đóng gói và thử nghiệm chính trên hệ điều hành Windows dưới dạng tệp .exe.

Hướng phát triển tiếp theo

  • Nghiên cứu và đóng gói trò chơi sang định dạng .apk để phát hành trên Google Play Store cho hệ điều hành Android, đồng thời phát hành trên App Store cho hệ điều hành iOS nhờ khả năng hỗ trợ đa nền tảng của Unity.
  • Mở rộng bản đồ trò chơi thành dạng thế giới mở (Open World Map), bổ sung các yếu tố chiến thuật và đa dạng hóa các tuyến nhiệm vụ.
  • Thiết kế thêm nhiều loại vũ khí mới với các hiệu ứng hạt (particle effects) và âm thanh chuyên biệt; bổ sung các biến thể kẻ thù với cơ chế AI phản xạ phức tạp hơn.

Giá trị tham khảo

Báo cáo niên luận ngành là tài liệu tham khảo hữu ích cho:

  • Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm và Thiết kế đa phương tiện: Những người bước đầu tiếp cận quy trình phát triển trò chơi 3D, cần nắm vững cấu trúc tổ chức dự án trong Unity và kỹ năng lập trình kịch bản C#.
  • Người nghiên cứu lập trình game FPS: Cung cấp giải pháp triển khai chi tiết cho các bài toán kinh điển trong game bắn súng như: tách biệt Weapon Camera để chống cắt hình vật thể, thuật toán chống bắn xuyên tường, điều chỉnh cao độ âm thanh theo vận tốc và phân tách logic FSM trong lập trình AI.

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

1. Đề tài giải quyết vấn đề đạn bay quá nhanh gây xuyên tường (tunneling) bằng kỹ thuật nào?

Để ngăn chặn đạn xuyên qua bề mặt vật cản khi di chuyển ở tốc độ cao hoặc khi bắn sát tường, hệ thống không chỉ dựa vào kiểm tra va chạm hình học đơn thuần (Sphere Collider) mà lưu trữ lại tọa độ vị trí cuối cùng của đầu đạn (m_LastRootPosition) tại mỗi chu kỳ Update. Dữ liệu này cho phép thuật toán quét và kiểm tra va chạm trên toàn bộ quỹ đạo di chuyển thực tế của viên đạn giữa hai khung hình liên tiếp.

2. Mô hình trí tuệ nhân tạo (AI) của robot HoverBot được thiết kế như thế nào?

Robot Enemy_HoverBot được điều khiển bởi lớp EnemyMobile theo mô hình máy trạng thái hữu hạn (FSM) gồm 3 trạng thái: Tuần tra (Patrol - di chuyển theo các pathNode của PatrolPath), Theo dõi (Follow) và Tấn công (Attack). Kiến trúc mã nguồn phân tách độc lập giữa việc kiểm tra chuyển đổi trạng thái (UpdateAIStateTransitions) và thực thi hành vi trạng thái (UpdateCurrentAIState), kết hợp tự động điều chỉnh cao độ âm thanh động cơ theo tốc độ di chuyển.

3. Cơ chế hiển thị vũ khí góc nhìn thứ nhất được thiết lập ra sao để tránh lỗi đồ họa?

Hệ thống sử dụng một camera riêng biệt (Weapon Camera) dành cho vũ khí để kết xuất hình ảnh súng đè lên khung hình của Main Camera. Trạng thái vũ khí được quản lý qua hai mốc tọa độ là DefaultWeaponPosition (vị trí cầm súng mặc định) và AimingWeaponPosition (căn giữa trục X khi người chơi nhấn chuột phải ngắm bắn), kết hợp điều chỉnh trường nhìn FOV của camera bằng hoạt ảnh mã nguồn.

4. Cơ chế chống spam đạn khi người chơi nhấp chuột quá nhanh được cài đặt như thế nào?

Trong lớp WeaponController, quy trình bắn được điều hướng qua chuỗi hàm HandleShootInputs $\rightarrow$ TryShoot $\rightarrow$ HandleShoot. Hệ thống sử dụng biến kiểm soát thời gian m_LastTimeShoot để so sánh với khoảng thời gian tối thiểu giữa hai phát bắn, ngăn không cho hàm tạo đạn được thực thi liên tục ngoài tần suất quy định.

5. Luồng chuyển đổi màn chơi trong game Final Battleground diễn ra theo trình tự nào?

Trò chơi bắt đầu tại MainScene (Trạm C1). Khi người chơi tiêu diệt hết kẻ thù tại đây, thành phần GameFlowManager sẽ tự động chuyển cảnh sang SecondaryScene (Trạm C2). Nếu tiếp tục chiến thắng tại màn 2, người chơi sẽ được điều hướng tới WinScene. Ngược lại, nếu nhân vật hết máu tại bất kỳ thời điểm nào, trò chơi sẽ chuyển đến LoseScene. Người chơi có thể nhấn nút "Chơi lại" để khởi động lại từ MainScene.

Kết luận

Báo cáo niên luận ngành "Phát triển game 3D bắn súng FPS Final Battleground trên nền tảng Unity" của sinh viên Lê Công Lý đã hoàn thành đầy đủ các mục tiêu thiết kế và xây dựng một trò chơi bắn súng 3D góc nhìn thứ nhất hoàn chỉnh. Đề tài vận dụng hiệu quả kiến trúc hướng thành phần của Unity 2018.2, giải quyết tốt các bài toán kỹ thuật về cơ chế điều khiển nhân vật, vật lý va chạm đạn đạo và máy trạng thái AI cho kẻ thù trên môi trường Windows. Công trình là tài liệu thực hành có giá trị tham khảo cao cho sinh viên công nghệ thông tin định hướng chuyên sâu vào lĩnh vực lập trình và phát triển trò chơi điện tử.