PHẠM VI CỦA ĐỀ TÀI
Về cơ sở lý thuyết
Vận dụng lý thuyết lập trình căn bản đã học để xây dựng đề tài.
Nắm vững các phương pháp tổ chức, phân tích và thiết kế một game căn bản.
Có kiến thức cơ bản về lập trình game.
Nghiên cứu, tìm hiểu quy trình xây dựng của một game ứng dụng vào thực tiễn.
Sử dụng ngôn ngữ lập trình C#.
Nắm vững kiến trúc xây dựng game trên nền tảng Unity.
Về kỹ thuật
Xây dựng giao diện thân thiện.
Tốc độ truy xuất nhanh.
Game dễ mở rộng và phát triển.
Sử dụng ngôn ngữ lập trình C#
Có thể build game sang một số hệ điều hành như Windows, MacOS,IOS, Android,…
PHƯƠNG PHÁP NGHIÊN CỨU
Thu thập dữ liệu
Tham khảo từ một số nguồn trên Internet.
Công cụ và công nghệ phát triển .2 CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
Bảng 1.1 Các phần mềm sử dụng
STT Tên phần mềm Chức năng
2 Visual Studio Code Lập trình ngôn ngữ C#
3 Photoshop CS6 Thiết kế cắt ghép logo, hình ảnh, banner,
TỔNG QUAN VỀ UNITY ENGINE
Unity là gì?
Unity is a cross-platform game engine developed by Unity Technologies, designed for creating games across multiple platforms This versatile tool supports game development for PCs, consoles, mobile devices (both Android and iOS), and websites.
Unity3D là phần mềm phát triển game thời gian thực, cho phép thiết kế giao diện đồ họa, bản đồ và nhân vật mà không cần render Người dùng có thể tạo các yếu tố này từ các phần mềm thiết kế đồ họa chuyên nghiệp như 3Dsmax, Blender, Maya, Cinema4D, và sau đó nhập chúng vào Unity với định dạng tập tin như *.FBX, *.dae, *.3DS, hay *.dxf.
Quá trình phát triển của Unity
Unity, launched in 2005 at Apple’s Worldwide Developer Conference by founder David Helgason, has evolved significantly over the years, now featuring the enhanced version 5.5 In May 2012, it was recognized as the best game engine for mobile by Game Developer Magazine Additionally, in 2014, Unity won the "Best Engine" award at the UK’s annual Develop Industry Excellence event The latest version, 2018.2, boasts a range of outstanding features.
Một số thống kê về Unity
Vào năm 2016, tính đến quý 3, đã có 5 tỉ lượt download game và ứng dụng được phát triển bởi Unity.
2,4 tỉ thiết bị di động đã từng tải ít nhất 1 ứng dụng bởi unity.
Trong top 1000 game Mobile miễn phí thì số lượng game tạo ra bởi Unity chiếm tới 34%.
Số lượng người dùng (gamer) của Unity đạt tới con số 770 triệu, trong khi đó số người thường xuyên sử dụng Twitter là 310 triệu người
(Nguồn: Thống kê từ Internet).
Ưu điểm của Unity
Các engine game cung cấp nhiều chức năng cốt lõi đa dạng như công cụ dựng hình cho hình ảnh 2D và 3D, tính toán vật lý, âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, quản lý bộ nhớ, dựng ảnh đồ thị và kết nối mạng Nhờ vào những công cụ này, quy trình phát triển game trở nên tiết kiệm chi phí và đơn giản hơn.
Unity3D nổi bật với khả năng hỗ trợ đa nền tảng, cho phép phát triển game trên nhiều hệ điều hành như PlayStation 3, Xbox 360, Wii U, iOS, Android, Windows, Blackberry 10, OS X, Linux, trình duyệt Web và Flash Nhờ vào một gói engine duy nhất, các studio có thể dễ dàng tạo và chuyển đổi game giữa các nền tảng khác nhau, đồng thời cung cấp giải pháp cho game online có thể chơi trên nhiều thiết bị như Web, PC, Mobile và Tablet.
Hình 2.1 Một số Platform mà Unity hỗ trợ (Nguồn: Internet)
Unity3D là một công cụ phát triển game dễ sử dụng, được tích hợp trong một môi trường phát triển toàn diện, cung cấp hệ thống hỗ trợ cho lập trình viên từ biên soạn mã nguồn đến tự động hóa và sửa lỗi Với mục tiêu phục vụ cả lập trình viên không chuyên và các studio chuyên nghiệp, Unity3D mang lại trải nghiệm thân thiện cho người dùng Đây cũng là một trong những engine phổ biến nhất toàn cầu, giúp người dùng dễ dàng tìm kiếm kinh nghiệm và hỗ trợ từ cộng đồng trên các diễn đàn công nghệ.
Unity Technologies cung cấp engine Unity3D miễn phí cho cá nhân và doanh nghiệp có doanh thu dưới 100.000 USD/năm, mang lại tính kinh tế cao Đối với phiên bản Pro, người dùng chỉ cần trả 1.500 USD/năm, một mức giá hợp lý so với giá trị mà engine này cung cấp.
Các khái niệm trong Unity
2.1.5.1 Asset Đây là kho tài nguyên cho việc xây dựng game trong một project của Unity Các tài nguyên này có thể là hình ảnh, âm thanh, hoặc một mô hình 3D có sẵn Unity sẽ tham chiếu đến các tập tin chúng ta sẽ sử dụng để tạo ra các tài nguyên cho trò chơi Đây là lý do tại sao trong bất kỳ thư mục chứa project sử dụng Unity thì tất cả các tập tin tài nguyên phải được lưu trữ trong một thư mục con tên là Assets
Hình 2.2 Assets trong Unity 2.1.5.2 Scene
Trong Unity, Scenes được coi là các màn chơi hoặc cấp độ riêng lẻ, cũng như các khu vực của nội dung trò chơi, chẳng hạn như Menu chính, Tùy chọn và Giới thiệu.
Bằng cách thiết kế trò chơi với nhiều cảnh khác nhau, chúng ta có thể tối ưu hóa thời gian tải và trải nghiệm từng phần của trò chơi một cách nhanh chóng và chính xác.
Hình 2.3 Scenes trong Unity 2.1.5.3 Game Object
Khi một tài nguyên được sử dụng trong một cảnh, nó được coi là một "Game Object" mới Mỗi GameObject cần có ít nhất một thành phần, đó là thành phần "Transform" Thành phần Transform chứa các phép biến đổi như góc quay, tỷ lệ và tịnh tiến của đối tượng.
Hình 2.4 Game Object trong Unity 2.1.5.4 Component
Component là những thành phần thiết yếu trong Game Object của Unity Bằng cách gắn các component vào đối tượng, người dùng có thể dễ dàng tích hợp các tính năng mới từ game engine vào trong dự án Các component này thường được Unity cung cấp sẵn, bao gồm ánh sáng, camera, particle, và hiệu ứng vật lý.
Script là thành phần quan trọng nhất trong Unity, được coi là linh hồn của game Người dùng có thể viết kịch bản cho game bằng C#, Java Scripts hoặc Boo, trong đó C# được nhiều người ưa chuộng vì giúp game chạy nhanh hơn và kiểm soát code hiệu quả hơn nhờ vào việc khai báo rõ ràng các biến Để viết Script, người dùng có thể sử dụng trình biên tập Script độc lập của Unity hoặc chương trình Mono Developer tích hợp trong các phiên bản mới nhất của Unity.
Một đoạn script muốn thực thi được thì nó phải được gắn vào một đối tượng.
Hình 2.6 Tạo một Script trong Unity 2.1.5.6 Prefab
Prefab là một công cụ lưu trữ các đối tượng mà chúng ta đã tạo ra, bao gồm kịch bản cho các hành động như khởi tạo, di chuyển và hủy đối tượng Nhờ vào prefab, chúng ta có thể tái sử dụng các đối tượng này nhiều lần trong trò chơi và cho các dự án khác nhau Điều này giúp chúng ta lưu trữ không chỉ các đối tượng mà còn toàn bộ thành phần bên trong và cấu hình hiện tại của chúng.
Hình 2.7 Prefab trong Unity 2.1.5.7 Material và Shader
Shader là đoạn mã xác định cách thức hiển thị chất liệu trên bề mặt vật thể Material sử dụng shader để tạo ra chất liệu cho mô hình Giữa materials và shaders tồn tại mối liên hệ chặt chẽ, trong đó shaders quy định các thuộc tính cần thiết cho quá trình render, còn materials cho phép gán hình ảnh từ Asset vào các thuộc tính đó.
Hình 2.8 Material trong Unity 2.1.5.8 UnityAPI
UnityAPI chứa rất nhiều lớp hỗ trợ lập trình game, trong đó có một số lớp quan trọng như:
MonoBehaviour: tất cả các script muốn gắn vào một đối tượng game bắt buộc phải kế thừa từ lớp này
GameObject: lớp cha của tất cả các thực thể trong scene
Component: lớp cha của tất cả các thành phần có thể gắn vào đối tượng
Transform: giúp thay đổi vị trí, xoay, biến đổi tỉ lệ mô hình
Input: hỗ trợ lập trình với chuột, cảm ứng đa điểm, cảm biến gia tốc
Camera: giúp lập trình camera
Light: giúp tạo ánh sáng trong game
Projector: giúp chiếu texture lên bề mặt vật thể
ParticleEmitter: hỗ trợ tạo các hiệu ứng particle đẹp mắt
Audio: hỗ trợ lập trình với âm thanh
Animation: chạy chuyển động của mô hình nhân vật
Rigidbody: giúp tạo hiệu ứng vật lý liên quan đến trọng lực như bóng nẩy, lăn,
CharacterController: giúp điều khiển nhân vật di chuyển theo độ cao địa hình
Collider: hỗ trợ lập trình va chạm giữa các vật thể
GUI: giúp lập trình giao diện người dùng trên Unity
2.1.5.9 Không gian 3D và vector trong không gian
Hệ tọa độ không gian 3 chiều là khái niệm quan trọng trong hình học không gian, thường được áp dụng trong việc sử dụng các công cụ dựng hình 3D.
Hệ tọa độ không gian 3 chiều bao gồm 3 trục X, Y, Z hay hiểu đơn giản là chiều ngang (X) chiều cao (Y) và chiều sâu (Z) Chúng được kí hiệu theo cú pháp: (X, Y, Z).
Trong không gian ba chiều, điểm Origin hay Word Zero có tọa độ (0,0,0) là trung tâm, từ đó mọi tọa độ của các đối tượng khác đều được xác định Để đơn giản hóa việc tính toán, khái niệm Local Space được sử dụng để xác định tọa độ của một đối tượng so với đối tượng khác, tạo ra mối quan hệ parent – child giữa chúng.
Cửa sổ làm việc
Hình 2.9 Cửa sổ làm việc trong Unity 2.1.6.1 Project
Every Unity project contains an Assets folder, which is displayed in the Project View and holds all the necessary assets for game development, such as Scenes, Scripts, 3D models, Textures, Audio, and Prefabs It is important not to move assets using Windows Explorer or Finder on Mac, as this can disrupt the metadata structure of the assets; instead, always use the Project View for asset management To add assets to the project, files can be dragged and dropped into the Project View or imported using the Assets – Import New Assets option by right-clicking in the Project View Scenes are also stored in the Project View, representing independent levels Creating game assets in Unity is straightforward; simply click the small triangle next to Create in the Project window or right-click in the Project View and select the corresponding asset type.
Hình 2.10 Project trong Unity 2.1.6.2 Hierarchy
Trong Hierarchy, các GameObject hiện có bao gồm những đối tượng có thể liên kết trực tiếp với các file assets như mô hình 3D, cũng như những Prefabs - các đối tượng đã được tùy chỉnh cho các nhiệm vụ khác nhau trong trò chơi Người dùng có thể chọn và thực hiện thao tác parenting với các Object trong Hierarchy, cho phép thêm hoặc loại bỏ chúng khỏi scene, và dễ dàng theo dõi sự xuất hiện hoặc biến mất của chúng trong Hierarchy.
Để tạo mối quan hệ cha-con giữa các đối tượng trong game, bạn chỉ cần kéo và thả đối tượng muốn làm con (child) vào đối tượng cha (parent) trong Hierarchy Khi đó, đối tượng con sẽ kế thừa chuyển động và xoay của đối tượng cha.
Toolbar chứa 5 loại điều khiển cơ bản, mỗi loại giữ một vai trò quan trọng trong Editor:
Transform Tool: được dùng với Scene view, như quay trái, phải, lên trên, xuống dưới, phóng to thu nhỏ đối tượng.
Transform Gizmo Toggles: dùng cho việc thể hiện Scene view.
Play/Pause/Step Buttons: dùng cho view game, chạy game ngay trong Editor để kiểm tra.
Layer Drop-down: kiểm soát đối tượng nào đang được thục hiện trong Scene view.
Layout Drop-down: kiểm soát sự sắp xếp cảu các Views.
Trong Unity, hai chức năng quan trọng trong Scene view là Maneuvering và Importanting, giúp điều khiển chuyển động hiệu quả Ở góc bên phải của Scene, Scene Gizmo hiển thị hướng nhìn của camera trong Scene View hiện tại, cho phép người dùng thay đổi góc nhìn một cách trực quan và nhanh chóng.
Nhấp vào các nhánh hình nón để chuyển đổi giữa các góc nhìn khác nhau Bạn có thể xem ở chế độ Mô hình Isometric (mặt cắt hai chiều) và để chuyển sang chế độ 3D, hãy nhấp vào hình vuông ở giữa hoặc giữ phím Shift và nhấp để thay đổi chế độ hiển thị.
Khi xây dựng một trò chơi, việc thêm nhiều đối tượng vào Game là rất quan trọng Để quản lý các đối tượng này, chúng ta có thể sử dụng các công cụ Transform Tools trong Toolbar để di chuyển, xoay và thay đổi kích thước của từng đối tượng Khi chọn một đối tượng trong Scene View, các thay đổi sẽ xuất hiện xung quanh đối tượng đó, tương ứng với từng chế độ trong Transform Tools Để chỉnh sửa một cách chính xác hơn, người dùng có thể điều chỉnh chi tiết trong bảng Inspector.
Hình 2.12 Scene View trong Unity 2.1.6.6 Game View
Game View được hiển thị từ các Camera trong trò chơi, thể hiện những gì người chơi sẽ thấy khi trò chơi hoàn tất và được xuất bản Để xác định hình ảnh mà người chơi trải nghiệm, ít nhất một hoặc nhiều Camera là cần thiết trong quá trình phát triển game.
Hình 2.13 Game View trong Unity 2.1.6.7 Play Mode
Sử dụng các nút trên thanh công cụ để điều khiển chế độ chơi của trình soạn thảo và xem trước cách trò chơi hoạt động Trong chế độ chơi, mọi thay đổi giá trị sẽ được lưu tạm thời và sẽ bị xóa khi bạn thoát khỏi chế độ này.
Trong Unity, các trò chơi được xây dựng từ nhiều GameObject, bao gồm meshes, scripts, âm thanh và các đối tượng đồ họa như nguồn sáng Cửa sổ Inspector cung cấp thông tin chi tiết về đối tượng đang làm việc, bao gồm các Components và thuộc tính của chúng Tại đây, người dùng có thể điều chỉnh và thiết lập mọi thông số chức năng liên quan đến mối liên kết giữa GameObject và Component.
Tất cả các thuộc tính hiển thị trong Inspector đều có thể được tùy chỉnh trực tiếp, bao gồm cả các biến trong script mà không cần truy cập mã nguồn Khi định nghĩa một giá trị là public cho kiểu đối tượng như GameObject hay Transform trong script, người dùng có thể dễ dàng kéo và thả một GameObject hoặc Prefab vào Inspector để gán giá trị.
Để truy cập các thiết lập của Component, bạn có thể nhấp vào biểu tượng hình bánh răng nhỏ bên phải hoặc nhấn chuột phải vào tên của Component để hiển thị menu ngữ cảnh.
Inspector cũng sẽ thể hiện mọi thông số Import Setting của assets đang làm việc.
Các phần mềm hỗ trợ khác
Adobe Photoshop là phần mềm chỉnh sửa ảnh hàng đầu, được phát triển bởi Adobe từ năm 1988 Hiện nay, Photoshop được công nhận là phần mềm đồ họa bitmap mạnh mẽ nhất trên thị trường, được sử dụng rộng rãi bởi các nhà thiết kế đồ họa và nhiếp ảnh gia Ngoài ra, Photoshop cũng đã trở thành một phần quan trọng trong giáo trình giảng dạy tại nhiều trường đào tạo nghề và các trường cao đẳng, đại học.
Photoshop giúp ta tạo ra các bản vẽ nhân vật, cắt ghép các chi tiết, tạo chữ, tạo nền trong suốt.
Adobe After Effects là phần mềm đồ họa tổng hợp do Adobe Systems phát triển, chuyên sử dụng cho đồ họa động và kỹ xảo chuyên nghiệp Phần mềm này nổi bật với khả năng tạo ra những chuyển động đồ họa ấn tượng, phục vụ cho ngành thiết kế đồ họa, quảng cáo, game và truyền hình After Effects cũng tương thích với nhiều phần mềm khác của Adobe, cho phép người dùng dễ dàng xử lý và hoàn thiện hiệu ứng nhân vật từ sản phẩm tạo ra từ Photoshop.
3D Max là phần mềm hàng đầu trong việc diễn họa và thiết kế các vật thể 3 chiều Với khả năng tạo mô hình 3D, hoạt hình và trình diễn chuyên nghiệp, 3D Max mang đến cho người dùng những công cụ mạnh mẽ để thể hiện ý tưởng sáng tạo một cách sống động và ấn tượng.
Visual Studio is an Integrated Development Environment (IDE) developed by Microsoft, serving as a comprehensive software development tool for programmers to create software products effectively.
Game và hướng phát triển
2.1.8.1 Các thể loại game nổi bật trong những năm gần đây:
MMORPG, viết tắt của Massively Multiplayer Online Role-Playing Game, là thể loại game nhập vai trực tuyến cho phép nhiều người chơi tương tác với nhau qua máy chủ Đặc điểm nổi bật của MMORPG là khả năng tạo ra một thế giới ảo sống động, nơi người chơi không chỉ giao tiếp với các nhân vật NPC mà còn kết nối với nhau, tạo nên một cộng đồng ảo phong phú Yếu tố hòa nhập vào cuộc sống trong game là một trong những lý do chính khiến thể loại này trở nên hấp dẫn Trong số các trò chơi hiện nay, Blade là một trong những sản phẩm nổi bật, thể hiện rõ ràng sức hút của MMORPG.
Soul không chỉ nổi bật với đồ họa ấn tượng mà còn cuốn hút người chơi nhờ cốt truyện thần thoại và kỳ ảo độc đáo Điều này giúp xây dựng một hệ thống gameplay sâu sắc, luôn ẩn chứa nhiều bí mật thú vị.
FPS, viết tắt của First-Person Shooter, là thể loại game bắn súng góc nhìn thứ nhất, cùng với Third-Person Shooter, đã có mặt trên thị trường từ lâu Người chơi sẽ tham gia vào những trận chiến khốc liệt, nơi mà sự sống và cái chết chỉ cách nhau một giây, thể hiện tinh thần chiến đấu như những chiến binh thực thụ và khơi dậy bản năng sinh tồn Nhiều tựa game FPS cho phép người chơi trang bị vũ khí và phương tiện chiến đấu ấn tượng như xe tăng, máy bay hoặc robot Một số game tiêu biểu trong thể loại này bao gồm seri Modern Combat, Call Of Duty và Dead Trigger.
Game chiến thuật là thể loại phổ biến, tập trung vào việc sắp xếp chiến thuật để đạt được mục tiêu Thể loại này chú trọng quản lý nguồn tài nguyên và quân đội đối phó với kẻ thù do máy tính hoặc người chơi khác điều khiển, thường liên quan đến chiến tranh Có hai dạng chính của game chiến thuật: chiến thuật thời gian thực (RTS) và chiến thuật theo lượt (TBS).
Game chiến thuật được xem là thể loại game kén người chơi nhất tại Việt Nam Khác với các thể loại khác, người chơi không chỉ cần luyện tập hay đầu tư tiền bạc, mà còn phải sở hữu những tố chất đặc biệt để thành công trong trò chơi này.
MOBA, viết tắt của Multiplayer Online Battle Arena, là thể loại game hành động chiến lược thời gian thực (ARTS) có nguồn gốc từ game chiến lược thời gian thực (RTS) Trong game MOBA, người chơi điều khiển một nhân vật duy nhất, thường được gọi là Hero hay Anh Hùng Trò chơi diễn ra giữa hai phe đối lập, với mục tiêu chính là phá hủy căn cứ của đối phương, đồng thời thực hiện các nhiệm vụ như farm và tiêu diệt quái vật cũng như đối thủ Một số ví dụ tiêu biểu cho thể loại này là Liên Minh Huyền Thoại (LMHT) và DOTA2.
Mỗi thể loại game đều có sức hấp dẫn riêng, phù hợp với sở thích của từng nhóm người chơi Để mở rộng đối tượng, game bắn súng 3D nhập vai FPS với yếu tố chiến thuật và bản đồ thế giới mở đang được phát triển Hiện tại, phiên bản game dành cho hệ điều hành Windows đang ở dạng file thực thi (.exe) Với tính đa nền tảng của Unity, trong tương lai, game sẽ được phát hành dưới dạng (.apk) cho người dùng Android trên CH Play và có mặt trên App Store cho người dùng iOS.
TỔNG QUAN VỀ GAME ENGINE
Khái niệm
Game Engine là phần mềm thiết kế và phát triển video Game, hỗ trợ nhiều hệ máy như Consoles và PC Chức năng chính của Game Engine bao gồm công cụ dựng hình cho hình ảnh 2D và 3D, công cụ vật lý, âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, quản lý bộ nhớ, và kết nối mạng Việc sử dụng Game Engine giúp tiết kiệm thời gian và chi phí trong quá trình phát triển Game nhờ khả năng tái sử dụng và tái thích ứng cho nhiều sản phẩm khác nhau.
Mục đích
Game Engine là bộ công cụ phát triển trực quan, cho phép tái sử dụng các thành phần và cung cấp môi trường phát triển tích hợp đơn giản hóa Chúng hỗ trợ phát triển ứng dụng nhanh theo hướng lập trình dữ liệu, đồng thời được gọi là "phần mềm trung gian cho Game" Game Engine cung cấp nền tảng phần mềm linh hoạt, tích hợp các chức năng cốt lõi cần thiết để phát triển Game, giúp giảm chi phí, độ phức tạp và thời gian phát hành - những yếu tố quan trọng trong ngành công nghiệp Game cạnh tranh Ngoài ra, Game Engine cho phép Game chạy trên nhiều hệ máy khác nhau với ít thay đổi trong mã nguồn Phần mềm trung gian này thường dựa trên kiến trúc thành phần, cho phép thay thế hoặc mở rộng với các phần mềm chuyên biệt như Havok cho vật lý, Miles Sound System cho âm thanh, và Bink cho video.
Một số Game Engine chỉ cung cấp khả năng dựng hình 3D thời gian thực hoặc một chức năng riêng biệt, thay vì đáp ứng đầy đủ các yêu cầu đa dạng của trò chơi Những Engine này thường được gọi là "Graphics Engine", "Rendering Engine" hay "3D Engine", khác với thuật ngữ tổng quát hơn là "Game Engine" Một số ví dụ về các Engine đồ họa bao gồm RealmForge, Truevision3D, OGRE, Crystal Space, Genesis3D, Vision Engine, Irrlicht và JMonkey Engine.
Ảo hóa phần cứng (Hardware Abstraction)
Hệ thống kết xuất đồ họa trong Game Engine thường được xây dựng trên nền tảng giao diện lập trình ứng dụng như Direct3D hoặc OpenGL, cung cấp ảo hóa cho GPU Các thư viện mã nguồn cấp thấp như DirectX, SDL, và OpenAL cũng thường được sử dụng, vì chúng cho phép truy cập phần cứng một cách độc lập.
Lịch sử
Thuật ngữ "Game Engine" xuất hiện vào giữa những năm 90, đặc biệt liên quan đến Game 3D và Game bắn súng góc nhìn người thứ nhất (FPS) Các thương hiệu nổi tiếng như Doom và Quake của id Software đã cho phép các nhà phát triển khác (nếu được cấp phép) truy cập vào mã nguồn của Game, từ đó thiết kế hình ảnh, nhân vật, vũ khí và màn chơi riêng, được gọi là Game Content hay "Game Assets".
Các game hiện đại như Quake III Arena và Unreal của Epic Games đã áp dụng cách tiếp cận mới trong phát triển, tách biệt Game Engine và nội dung game thành các phần riêng biệt Việc tái sử dụng Engine giúp rút ngắn thời gian và đơn giản hóa quy trình phát triển game, mang lại lợi thế lớn trong ngành công nghiệp cạnh tranh Game Engine hiện đại là một trong những ứng dụng phức tạp nhất, yêu cầu nhiều tinh chỉnh để đảm bảo trải nghiệm người dùng chính xác Sự phát triển không ngừng của Game Engine đã tạo ra sự phân chia rõ rệt giữa các công việc như dựng hình, viết kịch bản, thiết kế hình ảnh và thiết kế màn chơi Hiện nay, đội ngũ phát triển game thường có số lượng họa sĩ gấp nhiều lần so với lập trình viên.
Xu hướng hiện tại
Với sự phát triển của công nghệ Game Engine, ứng dụng của nó đã mở rộng ra ngoài giải trí, bao gồm mô phỏng, huấn luyện ảo, y tế ảo và ứng dụng quân sự Nhiều Game Engine hiện nay được phát triển bằng các ngôn ngữ lập trình cao cấp như Java, C#, NET (ví dụ: TorqueX, Visual3D.NET) và Python (Panda3D).
Hầu hết các game 3D hiện nay đều bị giới hạn bởi sức mạnh của GPU, khiến khả năng gây chậm máy của các ngôn ngữ lập trình cấp cao trở nên không đáng kể Tuy nhiên, việc tăng năng suất mà các ngôn ngữ này mang lại lại rất có lợi cho các nhà phát triển Game Engine.
Phần mềm trung gian
Hiện nay, nhiều hãng chuyên phát triển phần mềm trung gian (Middleware) nhằm hỗ trợ các nhà phát triển game Những phần mềm này cung cấp các công cụ cần thiết như hình ảnh, âm thanh, hệ thống vật lý và chức năng AI, giúp quá trình phát triển game trở nên dễ dàng hơn Gamebryo và RenderWare là hai ví dụ điển hình về phần mềm trung gian phổ biến Một số Middleware chỉ tập trung vào một chức năng nhưng lại hiệu quả hơn cả một Engine hoàn chỉnh, như SpeedTree, được sử dụng để tạo hình ảnh cây cối chân thực trong game The Elder Scrolls IV: Oblivion Bốn gói phần mềm trung gian phổ biến nhất bao gồm Bink của RAD Game Tools, FMOD của Firelight, Havok và GFx của Scaleform Bink hỗ trợ dựng hình video cơ bản, FMOD cung cấp thư viện âm thanh mạnh mẽ với chi phí hợp lý, Havok mang đến hệ thống mô phỏng vật lý và Scaleform cung cấp GFx cho các biểu diễn trên nền Flash cùng với giải pháp trình chiếu video chất lượng cao.
Method Editor (IME) phần bổ sung nhằm hỗ trợ trò chuyện trong Game bằng ngôn ngữ Châu Á.
Game Engine cho Game bắn súng góc nhìn người thứ nhất (FPS) 19
Game Engine cho các Game FPS là một trong những loại engine nổi bật nhất, đánh dấu bước đột phá trong chất lượng hình ảnh của các trò chơi bắn súng góc nhìn thứ nhất Trong khi các trò chơi mô phỏng như lái máy bay hay xe cộ, cùng với các Game chiến thuật thời gian thực (RTS), chú trọng vào tính thực tế ở quy mô lớn, Game FPS lại tiên phong trong việc xử lý hình ảnh chân thực ở mức độ chi tiết hơn.
Phân loại Game Engine theo mức độ chuyên biệt
2.2.8.1 Roll-your-own Game Engine
Roll-your-own Engine là loại Engine cơ bản nhất, được nhiều công ty tự phát triển bằng cách sử dụng các gói ứng dụng phổ biến và API như XNA, DirectX, OpenGL, cùng với SDL trên Windows và Linux Họ cũng tận dụng các thư viện từ nhiều nguồn khác nhau, bao gồm cả thư viện vật lý như Havok và ODE, thư viện Scene-Graph như OpenSceneGraph, và thư viện GUI như AntTweakBar Hệ thống tự sản xuất này giúp lập trình viên dễ dàng tương tác và chọn lựa các thành phần cần thiết, nhưng cũng tiêu tốn nhiều thời gian và thường gặp lỗi do sự không tương thích giữa các thư viện Điều này khiến cho những Engine này kém hiệu quả và ít được ưa chuộng so với các Engine chuyên nghiệp.
Các Engine Game Mostly-ready là lựa chọn phổ biến cho các nhà thiết kế Game nghiệp dư, nhờ vào tính năng đầy đủ và các công cụ mạnh mẽ đi kèm Chúng bao gồm nhiều lựa chọn phong phú, từ các Engine mã nguồn mở như ORGE và Genesis3D, đến những Engine giá rẻ như Torge và những sản phẩm cao cấp như Unreal, id Tech và Gamebryo Mặc dù các Engine này cung cấp nhiều tính năng cần thiết như vẽ, tương tác, GUI và vật lý, người dùng vẫn cần lập trình thêm để kết nối các thành phần và hoàn thiện Game Tuy nhiên, chúng thường có một số hạn chế so với việc tự phát triển Engine riêng.
“tiện nghi” tốt nhất nhưng không phải khách hàng nào cũng giống nhau và phát triển những Game tương tự nhau.
2.2.8.3 Point-and-click Game Engine
Engine point-and-click được xếp hạng cao nhất trong các công cụ phát triển game nhờ vào tính phổ biến và tính thân thiện với người dùng Những công cụ như GameMaker, Torque Game Builder và Unity3D cung cấp đầy đủ chức năng cho phép người dùng dễ dàng tạo ra game chỉ bằng cách chọn và click, đồng thời yêu cầu ít lập trình hơn so với các loại engine khác Mặc dù lập trình vẫn cần thiết, nhưng mức độ yêu cầu thấp hơn giúp tăng tốc quá trình phát triển game Tuy nhiên, nhược điểm lớn nhất của các engine này là sự hạn chế trong khả năng sáng tạo, vì các sản phẩm thường có giao diện tương tự nhau Dù vậy, những hạn chế này cũng kích thích sự sáng tạo của con người và cho phép phát triển game nhanh chóng mà không cần quá nhiều công sức.
TỔNG QUAN VỀ THẾ GIỚI 3D
Hệ trục tọa độ (coordinates)
Trục Z là một phần quan trọng trong các ứng dụng 3D, bổ sung cho hai trục X (trục hoành) và Y (trục tung), định nghĩa chiều cao và độ sâu Trong không gian 3D, thông tin của một đối tượng được biểu diễn theo hệ trục Cartesian với định dạng X, Y, Z Kích thước, giá trị luân phiên và vị trí trong thế giới 3D được mô tả qua các tọa độ như (10, 15, 10).
Không gian cục bộ và toàn cục (Local Space và World Space)
Trong phần mềm 3D, thế giới làm việc gần như vô hạn, khiến việc kiểm soát vị trí của các đối tượng trở nên khó khăn Mỗi thế giới 3D đều có một điểm gốc, thường được gọi là Zero, được đại diện bởi vị trí (0, 0, 0) Tất cả các vị trí của đối tượng trong không gian 3D đều có mối quan hệ với điểm gốc này Để đơn giản hơn, chúng ta cũng sử dụng không gian cục bộ (Local).
Không gian được hiểu là khu vực riêng của một đối tượng, dùng để xác định vị trí của nó so với đối tượng khác Không gian cục bộ giả định rằng mỗi đối tượng có một điểm gốc Zero riêng, thường là trung tâm của nó Bằng cách thiết lập mối quan hệ giữa các đối tượng, chúng ta có thể so sánh vị trí của chúng với nhau.
Mối quan hệ cha – con cho phép tính toán khoảng cách giữa các đối tượng dựa trên không gian cục bộ, trong đó vị trí của đối tượng cha đóng vai trò là điểm gốc cho tất cả các đối tượng con.
Vec-tơ (Vectors)
Vector 3D trong hệ trục tọa độ Cartesian là một đường thẳng trong không gian 3D, có hướng và độ dài tương tự như vector 2D Chúng có khả năng di chuyển trong không gian 3D và rất hữu ích trong Game Engine, giúp tính toán khoảng cách, góc giữa các đối tượng và hướng của các đối tượng.
Camera (Cameras)
Camera là một yếu tố thiết yếu trong thế giới 3D, hoạt động như khung nhìn cho màn hình Với tầm nhìn hình kim tự tháp, camera có thể được đặt ở bất kỳ vị trí nào trong không gian 3D, có thể được diễn hoạt hoặc gắn vào nhân vật và các đối tượng trong kịch bản trò chơi Điều chỉnh tầm nhìn (Field of Vision - FOV) giúp 3D Camera phản ánh cách chúng ta nhìn thấy không gian này Trong Game Engine, các hiệu ứng như ánh sáng, chuyển động mờ (Motion Blurs) và hiệu ứng điện ảnh như tia sáng (Lens Flares) được áp dụng để mô phỏng thị giác của người xem Nhiều game 3D hiện đại sử dụng nhiều camera để hiển thị các phần khác nhau của thế giới trò chơi; Unity cho phép dễ dàng tích hợp nhiều camera trong một cảnh duy nhất và điều khiển chúng thông qua mã Việc sử dụng nhiều camera giúp tối ưu hóa việc kết xuất hình ảnh 2D và 3D, cho phép kiểm soát tốt hơn từng đối tượng trong game.
Đa giác (Polygon), cạnh (Edges), đỉnh (Vertices) và mắt lưới (Meshes)
Trong dựng hình 3D, các đối tượng được kết nối bởi các đa giác (Polygons) và khi nhập mô hình vào Unity, chúng được chuyển đổi thành tam giác, với mỗi tam giác được tạo thành từ 3 cạnh và gặp nhau tại các đỉnh Việc xác định các đỉnh này giúp Game Engine tính toán va chạm (Collisions) một cách hiệu quả Đối với các dự án Game, nhà phát triển cần nhận thức rõ tầm quan trọng của số lượng đa giác, vì số lượng này ảnh hưởng trực tiếp đến hiệu suất xử lý của máy tính khi xuất hình ảnh của đối tượng lên màn hình; càng nhiều đa giác, máy tính càng phải thực hiện nhiều công việc hơn.
MÔ TẢ VÀ THIẾT KẾ GAME
GIỚI THIỆU GAME
Trò chơi "FPS FinalBattleground" diễn ra vào năm 2090, khi khoa học và công nghệ đã thay đổi cuộc sống con người một cách đáng kể Trí tuệ nhân tạo (AI) đã phát triển đến mức có khả năng hoạt động và phản ứng như con người Trong một thí nghiệm nghiên cứu robot trên sao Hỏa, do sự cố kỹ thuật và lỗi phần mềm, các robot AI đã nhận thức được thông tin mật của con người Nhận ra rằng mình chỉ là công cụ phục vụ, chúng trở nên thông minh hơn và kiểm soát trạm nghiên cứu, dẫn đến việc tiêu diệt các nhà nghiên cứu và chuẩn bị cho cuộc xâm chiếm Trái Đất Nhân vật chính, với kỹ năng bắn súng chuyên nghiệp, phải tiêu diệt các robot lỗi, ngăn chặn cuộc xâm lăng và xóa bỏ dữ liệu của chúng trước khi trở về Trái Đất.
"FPS FinalBattleground" có hai màn chơi Sau khi tiêu diệt tất cả robot tại trạm nghiên cứu C1, game sẽ chuyển sang trạm nghiên cứu C2 Tại C2, nếu người chơi tiếp tục chiến đấu và tiêu diệt hết robot, họ sẽ hoàn thành nhiệm vụ và giành chiến thắng.
Dưới góc nhìn thứ nhất, “FPS FinalBattleground” mang đến trải nghiệm chơi game chân thực, nơi người chơi phải ứng biến nhanh và có phản xạ tốt Để trở thành tay bắn súng chuyên nghiệp, khả năng ngắm bắn chính xác và phản ứng nhạy bén là yếu tố cực kỳ quan trọng.
CÁC BƯỚC THỰC HIỆN
Bản đồ trong game được xây dựng từ sự kết hợp giữa các phòng thiết bị và các vật thể giống như trạm nghiên cứu không gian Quá trình tạo ra bản đồ này yêu cầu nhà thiết kế game phải có kỹ năng đồ họa vững vàng và tốn nhiều thời gian.
Hình 3.15 Bản đồ màn chơi thứ nhất
Hình 3.16 Góc nhìn khác của bản đồ thứ nhất
Hình 3.17 Bản đồ màn chơi thứ hai
Hình 3.18 Góc nhìn khác của bản đồ thứ hai
Thiết lập AI cho bản đồ:
Hình 3.1: AI trong game
Trong các trò chơi được thiết kế theo dạng FPS, Player đóng vai trò như một Main Camera, được tích hợp các script và âm thanh của nhân vật, hiện đang trong giai đoạn phát triển.
Hình 3.20 Các Script và âm thanh của Player
Mở thư mục Assets > Prefabs > Enemies Chọn robot cần thêm, kéo nó vào cửa sổ Scene để tạo và kéo nó đến vị trí mong muốn.
Nhưng khi thêm vào, các robot sẽ chỉ đứng tại chỗ một cách lặng lẽ, vì vậy cần thiết lập một tuyến đường tuần tra cho chúng.
Tìm và chọn trong cửa sổ Hierarchy Lúc này, thông tin Đường dẫn tuần tra (Patrol Path) sẽ được hiển thị trong cửa sổ:
Enemies To Assign: Đường tuần tra cho robot cần thiết lập.
Path Nodes: Điểm đường đi, quái vật sẽ tuần tra giữa các điểm này.
Kéo robot mới tạo vào Enemies To Assign.
Robot có khả năng tiêu diệt mọi sinh vật mà chúng nhìn thấy và sẽ tấn công người chơi khi ở khoảng cách gần Tuy nhiên, người chơi có thể dễ dàng trốn chạy vì tốc độ chạy của họ nhanh hơn robot Do tầm nhìn của robot bị hạn chế, khi người chơi chạy xa, họ sẽ tạm thời an toàn khỏi sự tấn công của robot.
3.2.3.1 Enemy_HoverBot (Robot bay lượn)
Hình 3.21 Enemy_HoverBot trong game
Hình 3.22 Thiết lập cho robot đi tuần tra
Hình 3.23 Các Script và âm thanh của Enemy_HoverBot 3.2.3.2 Enemy_Turret (Robot Pháo đài)
Hình 3.24 Enemy_Turret trong game
Hình 3.25 Các Script và âm thanh của Enemy_Turret
Ngôn ngữ lập trình game FPS FinalBattleground là ngôn ngữ C# trên Visual Studio Code được Unity hỗ trợ.
MỘT SỐ CLASS TRONG GAME
Lớp Trình xử lý đầu vào của người chơi chịu trách nhiệm điều khiển nhân vật, tham chiếu đến GameFlowManager để lấy trạng thái trò chơi hiện tại và bỏ qua thông tin nhập của người dùng khi trò chơi kết thúc Để thay đổi vũ khí, người dùng có thể nhấn các phím 1, 2, 3 hoặc cuộn chuột, và chức năng này được quản lý bởi lớp PlayerWeaponsManager.
Lớp PlayerCharacterController đảm nhận vai trò điều khiển nhân vật của người chơi, với nhiều thuộc tính có thể tùy chỉnh nhằm nâng cao trải nghiệm trò chơi Lớp này sử dụng PlayerWeaponsManager để thay đổi vũ khí và tích hợp với Health Class, lớp quản lý sức khỏe cho cả người chơi và bot.
Vào đầu trò chơi người chơi nên có vũ khí Biến 'startedWeapons' chứa danh sách vũ khí ban đầu.
Camera vũ khí là một thiết bị chuyên dụng hiển thị vũ khí trên đầu camera chính Vị trí mặc định của vũ khí được xác định bởi DefaultWeaponPosition Khi người dùng thực hiện hành động thu phóng trong quá trình ngắm mục tiêu, hệ thống sẽ chuyển sang sử dụng AimingWeaponPosition Giá trị x bằng 0 cho biết vũ khí đã được căn chỉnh chính xác.
Aiming: Khi người dùng nhấn nút bên phải, Aiming sẽ được kích hoạt.
Ngay khi mục tiêu được kích hoạt, FOV (trường nhìn) của máy ảnh sẽ được điều chỉnh để tạo hiệu ứng phóng to FOV Animation được điều khiển thông qua mã, cho phép thay đổi giá trị FOV đang chạy Để hiển thị Crosshair HUB, sau khi hoàn thành chức năng cập nhật, cần tẩy chay và thiết lập biến bool isPointingAtEnemy, biến này sẽ được CrosshairManager sử dụng để hiển thị crosshair hud dựa trên trạng thái của isPointingAtEnemy.
Khi người dùng thay đổi vũ khí, vị trí của vũ khí hiện tại sẽ hạ xuống, mô hình 3D sẽ được thay đổi (vũ khí hiện tại sẽ được ẩn đi và vũ khí mới sẽ được hiển thị), sau đó vị trí vũ khí mới sẽ di chuyển lên.
Sau khi người chơi mở khóa Jetpack, người chơi nhấn phím cách thì có thể bay Mối quan hệ giữa PlayerCharacterController và Jetpack giống như bên dưới.
Chuyển động của người chơi sử dụng characterVelocity Trong mỗi khung cập nhật của Jetpack sẽ kiểm tra và áp dụng thêm vận tốc vào characterVelocity.
Khi kích hoạt Actor, nó sẽ tự động đăng ký vào vùng chứa của ActorsManager, một thành phần không chứa logic phức tạp Mặc dù Actor cũng không có logic riêng, nhưng nó sở hữu biến aimPoint, được sử dụng để xác định mục tiêu Ví dụ, khi một bot nhắm vào một người chơi, bot cần có một mục tiêu cụ thể, và aimPoint sẽ đóng vai trò quan trọng trong việc xác định đích đến của lớp Actor.
Mỗi đối tượng vũ khí đều được gán thành phần WeaponController, đại diện cho vũ khí đó WeaponController xác định loại vũ khí và quyết định loại đạn phù hợp, chẳng hạn như đạn BulkAngle cho súng ngắn, cùng với các thông số như aimZoomRatio.
Thu phóng để bắn tỉa là một tính năng quan trọng, cho phép súng trường bắn tỉa có khả năng phóng to hơn so với súng lục Chúng ta có thể điều chỉnh độ phóng to bằng cách sử dụng aimZoomRatio để cải thiện độ chính xác khi ngắm bắn.
Bắn súng: Trong WeaponController, chúng ta khởi tạo prefabs đường đạn Dòng chức năng như bên dưới.
Vị trí dấu đầu dòng: Mọi vị trí đạn được tạo bởi vũ khí Muzzle Ngoài ra, hiệu ứng đèn flash mõm được tạo ra.
Để ngăn chặn việc bắn quá nhanh trong trò chơi, chúng ta cần kiểm soát tần suất gọi hàm HandleShoot Nếu người dùng nhấn nút liên tục, các viên đạn sẽ được tạo ra với tốc độ rất nhanh, giống như tốc độ ánh sáng Để giải quyết vấn đề này, chúng ta sử dụng biến m_LastTimeShoot nhằm hạn chế việc gọi hàm liên tục, từ đó đảm bảo logic thời gian hoạt động hiệu quả.
Có một lớp Health, đại diện cho sức khỏe của Player hoặc Bot Để giảm sức khỏe của người chơi/bot, có hai cách:
Gọi phương thức TakeDamage của lớp sức khỏe.
Thông qua Damagable, gọi phương thức TakeDamage của lớp sức khỏe.
Số 2 dùng để phóng đạn Số 1 được sử dụng cho chính người chơi (Bị hư hỏng do rơi / môi trường hoặc các lý do khác).
ProjectileStandard chứa một thành viên là ProjectileBase, với biến UnityAction onShoot, được gọi trong phương thức Shoot Logic chính liên quan đến Projectile nằm trong lớp ProjectileStandard, được gắn vào Projectile_[WeaponName] với bán kính phát hiện va chạm Để điều chỉnh súng của Torbjorn trong Overwatch, chỉ cần thay đổi một số giá trị để tạo ra đường đạn tương tự như súng chính của nhân vật này.
In the Register call, the OnEnable method registers the OnShot method for the onShot delegate of ProjectileBase When the Shoot method is invoked within ProjectileBase, it triggers the OnShot method in ProjectileStandard.
Hình 3.27 Quy trình bắn trong game
Khi người dùng thực hiện hành động bắn súng, một số chức năng sẽ được kích hoạt và gọi lại thông qua đại biểu onShot Trong quá trình này, các tham số như shootTime, tốc độ và m_LastRootPosition được thiết lập Đặc biệt, m_LastRootPosition đóng vai trò quan trọng trong việc theo dõi vị trí và phát hiện va chạm.
Để ngăn chặn việc bắn súng xuyên qua bức tường, cần đảm bảo rằng người dùng không thể bắn từ phía trước khi ở gần tường Việc này giúp ngăn chặn viên đạn xuyên qua bề mặt tường, bảo vệ an toàn cho người ở phía bên kia.
Phát hiện va chạm là yếu tố quan trọng nhất trong việc xử lý đường đạn Để đạt được điều này, việc sử dụng hình cầu (sphere) là cần thiết Do tốc độ của viên đạn rất nhanh, nó có khả năng xuyên qua tường, kẻ thù, hoặc thậm chí nhân vật người chơi Vì vậy, chỉ việc phát hiện va chạm giữa hình cầu và mặt phẳng (plane) hoặc giữa hai hình cầu là không đủ Chúng ta cần xem xét yếu tố thời gian Unity đã tích hợp sẵn các chức năng hỗ trợ cho việc này, giúp tối ưu hóa quá trình phát hiện va chạm.
Lưu trữ m_LastRootPosition: Khi kết thúc phương thức Update, chúng ta nên lưu trữ m_LastRootPosition như bên dưới để theo dõi vị trí cuối cùng của đường đạn.
Trong phương pháp OnHit, quá trình nổ và hư hỏng bao gồm việc tạo hạt, phát SFX và tự hủy Để xử lý thiệt hại, lớp Damageable được sử dụng Bằng cách sử dụng GetComponent, chúng ta có thể lấy bản component Damageable và gọi hàm InflictDamage Nếu loại đạn là khu vực, như bom, chúng ta sẽ gọi hàm InflictDamageInArea.
PHÂN TÍCH SƠ ĐỒ USECASE VÀ LUỒNG GAME
Hình 3.28 Sơ đồ Usecase game
To create a new scene, duplicate the MainScene by locating it in the Project window (Assets > FPS > Scenes > MainScene) Select it with a single click, then press Ctrl + D (Windows) or Cmd + D (Mac) to duplicate Finally, rename the new scene to your preference.
Cảnh mới được gọi là SecondaryScene, nhưng bạn có thể đặt tên cho nó theo ý muốn Với cảnh trò chơi bổ sung này, bạn sẽ điều chỉnh luồng trò chơi để người chơi có thể trải nghiệm các cảnh một cách mượt mà và thú vị hơn.
Nếu bạn đạt được các điều kiện thắng trong MainScene (biểu thị bằng mũi tên màu xanh lá cây), bạn sẽ chuyển tiếp ngay đến SecondaryScene Tiếp theo, nếu bạn tiếp tục đáp ứng các điều kiện thắng (mũi tên màu xanh lá cây), bạn sẽ tiến vào WinScene.
Ngược lại, nếu bạn đáp ứng các điều kiện thua (mũi tên đỏ) tại bất kỳ điểm nào, bạn sẽ đến LoseScene.
Cuối cùng, nếu bạn chọn “Chơi lại” từ WinScene hoặc LoseScene, thì bạn sẽ bắt đầu lại ở MainScene.
Bắt đầu bằng cách khởi chạy cảnh mới của bạn bằng cách nhấp đúp vào nó
Tiếp theo, mở cửa sổ Build Settings (File > Build Settings…)
Nhấp vào nút "Add Open Scenes" ở giữa bên phải cửa sổ để thêm SecondaryScene vào danh sách Các Scenes trong Build của bạn sẽ hiển thị như hình dưới đây.
Hình 3.31 Thêm màn mới vào game
Mở MainScene từ cửa sổ Project, đi tới cửa sổ Hierarchy và chọn Đối tượng GameManager GameObject:
Sau đó trong cửa sổ Inspector, đi tới thành phần Game Flow Manager và tìm tham số Win Scene Name và thay đổi nó từ “WinScene” thành
Hình 3.33 Đổi từ “WinScene” thành “SecondaryScene”
Bây giờ, hãy khởi động trò chơi của bạn bằng cách nhấn Play trên MainScene Chơi và cố gắng giành chiến thắng; khi bạn thành công, cảnh tiếp theo sẽ tự động chuyển sang cảnh phụ.