TỔNG QUAN
Giới thiệu sơ lược về Game Engine
Game Engine là phần mềm thiết yếu cho việc xây dựng và thiết kế trò chơi điện tử, cung cấp cho nhà phát triển các công cụ và nguyên liệu cần thiết Nó giúp đơn giản hóa quá trình phát triển bằng cách cung cấp nền tảng và tính năng sẵn có, từ đó giảm thiểu mã lặp lại và tăng tốc độ phát triển trò chơi.
Lợi ích của việc sử dụng Game Engine bao gồm:
Game Engine cho phép tạo ra trò chơi mà không cần kiến thức lập trình sâu, nhờ vào các công cụ và giao diện đồ họa trực quan Điều này giúp những người đam mê game có thể hiện thực hóa ý tưởng của mình mà không bị rào cản về kỹ năng lập trình.
Game Engine giúp tiết kiệm thời gian, công sức và chi phí trong quá trình phát triển trò chơi Với các tính năng và công cụ sẵn có, Game Engine tăng tốc độ phát triển và giảm thiểu việc viết lại mã nguồn, từ đó tạo điều kiện thuận lợi cho việc xây dựng trò chơi hiệu quả hơn.
Game Engine mang đến các công cụ và khả năng xử lý đồ họa mạnh mẽ, cho phép tạo ra những hiệu ứng hình ảnh chân thực và sống động Điều này không chỉ nâng cao trải nghiệm của người chơi mà còn tạo ra sức hấp dẫn lớn cho trò chơi.
Game Engine hỗ trợ đa nền tảng, cho phép phát triển trò chơi một lần và triển khai trên nhiều thiết bị như PC, điện thoại di động, máy tính bảng và console Lợi ích này giúp tiết kiệm thời gian và công sức trong quá trình phát triển, đồng thời mở rộng tầm với của trò chơi đến nhiều người chơi hơn.
Game Engine đóng vai trò quan trọng trong ngành công nghiệp game, hỗ trợ các nhà phát triển tạo ra những trò chơi độc đáo và hấp dẫn nhờ vào những lợi ích mà nó mang lại.
Các thành phần có trong một Game Engine
Một Game Engine bao gồm các thành phần cốt lõi hỗ trợ phát triển trò chơi, cung cấp tính năng và công cụ cần thiết cho việc xây dựng và thiết kế game.
Dưới đây là một số thành phần chính trong một Game Engine:
Đồ họa và động học là thành phần thiết yếu trong Game Engine, bao gồm công nghệ đồ họa để hiển thị hình ảnh, cảnh quan và hiệu ứng trong trò chơi Nó cung cấp công cụ và khả năng tạo ra hình ảnh chân thực, hiệu ứng đặc biệt và hoạt cảnh động.
Thành phần vật lý trong Game Engine đóng vai trò quan trọng trong việc mô phỏng và xử lý các luật vật lý, bao gồm va chạm, trọng lực, độ ma sát và các hiệu ứng khác Nó tạo ra những phản ứng và tương tác vật lý chân thực giữa các đối tượng trong trò chơi, nâng cao trải nghiệm người chơi.
Âm thanh trong Game Engine là yếu tố quan trọng, cung cấp khả năng phát lại âm thanh, nhạc nền và hiệu ứng âm thanh cho trò chơi Nó cho phép người phát triển chơi các tệp âm thanh, điều chỉnh âm lượng và tạo ra các hiệu ứng âm thanh đặc biệt, từ đó nâng cao trải nghiệm chơi game cho người dùng.
Thành phần điều khiển trong Game Engine đóng vai trò quan trọng trong việc quản lý và xử lý tương tác từ người chơi, bao gồm bàn phím, chuột, bộ điều khiển gamepad và các thiết bị đầu vào khác Nó đảm bảo rằng trò chơi có thể phản hồi và phản ứng chính xác với hành động của người chơi, nâng cao trải nghiệm chơi game.
Quản lý tài nguyên trong Game Engine là một thành phần quan trọng, giúp tải và quản lý hiệu quả các tài nguyên như hình ảnh, âm thanh và mô hình 3D Nó đảm bảo rằng các tài nguyên này được sử dụng một cách tối ưu trong trò chơi, nâng cao trải nghiệm người chơi.
Kịch bản và logic là thành phần quan trọng trong việc viết mã và xử lý các quy tắc trong trò chơi Nó cung cấp ngôn ngữ kịch bản để tạo ra sự kiện, hành vi và quy tắc chơi game, giúp điều chỉnh và kiểm soát luồng trò chơi một cách hiệu quả.
Mạng (Networking) trong Game Engine là thành phần quan trọng giúp kết nối và giao tiếp giữa người chơi trong trò chơi đa người chơi Nó cho phép gửi và nhận dữ liệu qua mạng, đảm bảo đồng bộ hóa trạng thái và tương tác hiệu quả giữa các người chơi.
Lợi ích của việc sử dụng Game Engine trong giảng dạy lập trình game
Lập trình game là một lĩnh vực phức tạp và đầy thách thức cho những người mới bắt đầu Sử dụng Game Engine trong giảng dạy lập trình game mang lại nhiều lợi ích quan trọng, giúp cải thiện quá trình học tập và phát triển game hiệu quả hơn.
1 Dễ tiếp cận và bắt đầu: Game Engine cung cấp một giao diện trực quan và dễ sử dụng, giúp người học mới bắt đầu có thể nhanh chóng làm quen và bắt tay vào việc tạo game mà không cần đầu tư quá nhiều thời gian vào việc học cú pháp phức tạp
2 Hiệu quả trong việc học và giảng dạy lập trình: Game Engine giúp học sinh và sinh viên tập trung vào việc học lập trình chuyên sâu và xây dựng trò chơi, chứ không phải lo lắng về các khía cạnh kỹ thuật phức tạp như việc tạo cửa sổ đồ họa hay quản lý đối tượng Đồng thời cũng giúp giảng viên có được giao diện trực quan, khiến việc giảng dạy và thuyết trình kiến thức trở nên dễ dàng hơn
3 Tập trung vào sáng tạo: Sử dụng Game Engine giúp người học tập trung vào việc sáng tạo, thử nghiệm ý tưởng và tạo ra các trò chơi mới một cách nhanh chóng Điều này khuyến khích tinh thần sáng tạo và động lực trong quá trình học tập
4 Thúc đẩy học hỏi, hợp tác: Game Engine đa số hỗ trợ việc làm nhóm và chia sẻ dự án, cho phép học sinh và sinh viên làm việc cùng nhau để xây dựng các trò chơi phức tạp hơn Điều này khuyến khích học hỏi, hợp tác và trao đổi kiến thức giữa các thành viên trong nhóm
5 Ngôn ngữ đa dạng: Game Engine cho phép tích hợp nhiều ngôn ngữ lập trình và hỗ trợ nhiều nền tảng, giúp giảng viên có thể giảng dạy một cách linh hoạt và đáp ứng nhu cầu của từng học sinh
6 Tối ưu hóa hiệu suất: Game Engine thường được tối ưu hóa hiệu suất, giúp việc trải nghiệm chơi game mượt mà và ổn định
7 Phát triển kỹ năng chuyên môn: Sử dụng Game Engine giúp học sinh và sinh viên phát triển các kỹ năng chuyên môn liên quan đến lập trình game, như xử lý đồ họa, kiểm soát vật lý, quản lý tài nguyên và tạo trải nghiệm người chơi đa dạng
8 Áp dụng kiến thức thực tế: Game Engine giúp kết nối kiến thức lý thuyết với thực tiễn thông qua việc xây dựng các trò chơi thực tế Điều này giúp học sinh và sinh viên hiểu rõ hơn về cách áp dụng kiến thức lập trình vào việc tạo ra các sản phẩm thực tế
Việc áp dụng Game Engine trong giảng dạy lập trình game không chỉ làm cho quá trình học trở nên dễ dàng hơn mà còn kích thích sự sáng tạo và nâng cao kỹ năng chuyên môn của học sinh và sinh viên.
Tổng quan về các Game Engine hiện có trên thị trường
Hiện nay, có rất nhiều Game Engine được phát triển và sử dụng trên thị trường Dưới đây là một số Game Engine nổi bật:
Hình 2.1 Logo Unity (Nguồn Unity)
Unity, một trong những Game Engine hàng đầu toàn cầu, được phát triển bởi Unity Technologies, công ty trò chơi điện tử có trụ sở tại Mỹ.
Unity enables developers to conveniently create both 3D and 2D games, and it also supports the development of Virtual Reality (VR) and Augmented Reality (AR) games With a large community and its own Asset Store, Unity offers a variety of free and paid resource packages to help developers quickly launch their games Notable games developed using Unity include Assassin’s Creed Identity, Temple Run, and Rise of Kingdoms, among many others.
Hình 2.2 Logo Unreal Engine (Nguồn Unreal Engine)
Unreal Engine cũng là một Game Engine phổ biến được phát triển bởi Epic Games
Unreal Engine là một nền tảng phát triển trò chơi đa nền tảng, hỗ trợ nhiều hệ điều hành như MacOS, Windows, Linux, iOS, Android, StreamOS, Nintendo Switch, PlayStation và Xbox One Nó cũng có một Marketplace riêng, cho phép người dùng mua và bán các gói tài nguyên, giúp tối ưu hóa quy trình phát triển trò chơi.
10 chơi Một số trò chơi nổi tiếng được tạo ra bởi Unreal Engine: Fortnite, Batman Arkham City và nhiều trò chơi khác
Hình 2.3 Logo Cry Engine (Nguồn CryEngine)
CryEngine là một Game Engine do Crytek phát triển, cung cấp một trình chỉnh sửa Sandbox đầy đủ tính năng để phát triển trò chơi trên nhiều nền tảng chính như PC, Xbox và PlayStation Với các công cụ mạnh mẽ, CryEngine cho phép tạo ra đồ họa ấn tượng cho các trò chơi Một số tựa game nổi tiếng sử dụng CryEngine bao gồm Last Kingdom, War of Rights và nhiều trò chơi khác.
Hình 2.4 Logo Cocos Creator (Nguồn Wikipedia)
Cocos Creator is a versatile game engine developed by Xiamen, designed for creating games across multiple platforms, including web, iOS, Android, Windows, and Mac It supports the development of both 2D and 3D games, with notable titles such as Ark of Conquest, Magic Rush, and Idle Heroes being created using this powerful tool.
Hình 2.5 Logo Amazon Lumberyard (Nguồn Wikipedia)
Amazon Lumberyard là một Game Engine do Amazon phát triển, phục vụ cho việc tạo ra trò chơi 3D và VR Nó bao gồm chế độ xem trước VR, kịch bản trực quan và tích hợp tính năng Twitch của Adobe Photoshop, giúp người dùng dễ dàng phát triển trò chơi trực tuyến đa người chơi Ngôn ngữ lập trình chính được sử dụng là C++ Một số trò chơi nổi tiếng được phát triển bằng Amazon Lumberyard bao gồm Star Citizen, New World và nhiều trò chơi khác.
Hình 2.6 Logo Godot (Nguồn Wikipedia)
Godot là một Game Engine mã nguồn mở miễn phí, phát triển dưới giấy phép MIT, cho phép người dùng tự do sử dụng và chỉnh sửa.
Godot là một công cụ phát triển trò chơi đa nền tảng, hoạt động trên Windows, Linux và Mac Nó hỗ trợ cả trò chơi 2D và 3D, đi kèm với trình chỉnh sửa hình ảnh và hệ thống hoạt ảnh mạnh mẽ.
Quản lý quá trình phát triển trò chơi là rất quan trọng, và Godot sử dụng GDScript, một ngôn ngữ lập trình cấp cao với cú pháp giống Python, để viết kịch bản Nhiều trò chơi nổi tiếng như Hardcored và Kingdoms of the Dump đã được phát triển bằng Godot, cho thấy khả năng mạnh mẽ của nền tảng này trong ngành công nghiệp game.
Hình 2.7 Logo GameMaker: Studio (Nguồn Wikipedia)
GameMaker: Studio là một game engine phát triển trò chơi 2D do Yoyo Games phát triển, cho phép người dùng tạo trò chơi mà không cần kinh nghiệm lập trình, chỉ với các thao tác "point and click" đơn giản Giao diện thân thiện của GameMaker: Studio mở ra cơ hội phát triển trò chơi cho mọi người Một số trò chơi nổi tiếng được phát triển bằng GameMaker bao gồm Hotline Miami, Undertale và nhiều trò chơi khác.
Các tính năng, ưu nhược điểm của các Game Engine đã đề cập
Dưới đây là phân tích các tính năng, điểm mạnh và điểm yếu của các Game Engine đã được liệt kê ở phần trước:
Bảng 2.1 Ưu nhược điểm của các Game Engine đã nghiên cứu
Game Engine Tính Năng Và Ưu Điểm Nhược Điểm
Unity - Hỗ trợ đa nền tảng
- Cộng đồng và tài liệu phong phú
- Thời gian load và xây dựng dự án có thể lâu
- Cấu hình phần cứng yêu cầu khá cao
Unreal Engine - Đồ họa ấn tượng
- Hỗ trợ phát triển đa nền tảng
- Học và sử dụng Unreal Engine có thể đòi hỏi nhiều thời gian và kiến thức trong ngành lập trình game CryEngine - Đồ họa ấn tượng
- Tích hợp công cụ Sandbox đầy đủ
- Hỗ trợ đa nền tảng
- Tài liệu học tập và cộng đồng hỗ trợ hạn chế
Cocos Creator - Hỗ trợ đa nền tảng
- Đa dạng các tính năng
- Yêu cầu kiến thức lập trình tốt để tận dụng toàn bộ tính năng của công cụ Amazon
- Đồ họa và hiệu ứng 3D
- Hỗ trợ phát triển game trực tuyến
- Sử dụng C++ làm ngôn ngữ viết kịch bản
- Tài liệu và hỗ trợ cộng đồng có thể hạn chế
Godot - Miễn phí và mã nguồn mở
- Hỗ trợ trò chơi 2D và 3D
- Ngôn ngữ lập trình GDScript
- Hiệu suất thực thi của GDScript có thể chậm hơn nếu so sán với các ngôn ngữ lập trình khác
- Dễ sử dụng cho người mới bắt đầu làm quen với lập trình game
- Hạn chế trong việc phát triển trò chơi 3D và tùy chỉnh cao
- Giới hạn tính linh hoạt và mở rộng của công cụ
NGHIÊN CỨU LÝ THUYẾT
Sơ lược về khái niệm, nguyên tắc, phương pháp phát triển game
Trong bài viết này, chúng ta sẽ khám phá các khái niệm, nguyên tắc và phương pháp phát triển game cơ bản Những yếu tố này rất quan trọng đối với các nhà phát triển game để tạo ra những trò chơi thành công và thu hút người chơi Dưới đây là các phần chi tiết mà chúng ta sẽ đề cập đến.
3.1.1 Khái niệm về phát triển game Định nghĩa: Phát triển game là quá trình tạo ra và xây dựng trò chơi điện tử từ những ý tưởng ban đầu cho đến sản phẩm được hoàn chỉnh Quá trình này bao gồm thiết kế gameplay, lập trình, sản xuất đồ họa, âm thanh và cuối cùng là kiểm thử trò chơi
Quy trình phát triển game bao gồm các giai đoạn chính như lên ý tưởng, thiết kế gameplay, phát triển, kiểm thử và phát hành Mỗi giai đoạn đều có những công việc và hoạt động riêng biệt nhằm đảm bảo rằng quá trình phát triển trò chơi diễn ra hiệu quả và đạt chất lượng cao.
3.1.2 Nguyên tắc thiết kế game
In "The Art of Game Design," a renowned book by Jesse Schell, the author discusses 100 essential principles of game design.
Tuy nhiên, để thiết kế một game hay thì các nhà phát triển thường phải chú ý tới các nguyên tắc quan trọng sau:
1 Nguyên tắc "Easy to Learn, Hard to Master" (Dễ học, khó thành thạo): Game nên có một ngưỡng học ban đầu thấp để người chơi có thể nhanh chóng tiếp cận và bắt đầu chơi, nhưng đồng thời cũng cần cung cấp độ khó và sâu sắc đủ để người chơi có thể phát triển và thử thách bản thân
2 Nguyên tắc "Clear Goals and Feedback" (Mục tiêu rõ ràng và phản hồi): Game cần định rõ mục tiêu và cung cấp phản hồi liên tục cho người chơi để họ biết họ đang làm gì và cảm thấy được tiến bộ
3 Nguyên tắc "Player Agency" (Quyền tự do cho người chơi): Game nên cung cấp cho người chơi sự tự do và quyền kiểm soát trong trải nghiệm của họ Người chơi cần có khả năng ảnh hưởng đến câu chuyện, quyết định và kết quả trong game
4 Nguyên tắc "Balance" (Cân bằng): Game cần có một cân bằng hợp lý giữa khó khăn và độ thú vị Nếu game quá dễ, người chơi có thể thấy nhàm chán, và nếu quá khó, người chơi có thể trở nên bất mãn
5 Nguyên tắc "Immersion" (Sự đắm chìm): Game nên tạo ra một thế giới ảo hấp dẫn và hấp dẫn, nơi người chơi có thể hoàn toàn đắm chìm và cảm nhận trải nghiệm thú vị
6 Nguyên tắc "Emotional Engagement" (Gắn kết cảm xúc): Game nên kích thích cảm xúc của người chơi, từ sự hứng thú, thách thức, kỳ vọng cho đến niềm vui, hài hước, sợ hãi hay xúc động Đây chỉ là một số nguyên tắc quan trọng, và việc áp dụng các nguyên tắc này phụ thuộc vào thể loại và mục tiêu của game
3.1.3 Công nghệ phát triển game
Game engine như Unity, Unreal Engine và Cocos2d là những công cụ mạnh mẽ cho việc phát triển game Chúng cung cấp công nghệ tiên tiến với đồ họa 2D/3D, vật lý, trí tuệ nhân tạo và âm thanh, tạo ra môi trường thuận lợi cho các nhà phát triển.
Ngôn ngữ lập trình đóng vai trò quan trọng trong việc phát triển game, với các lựa chọn như Python, Java, C++, C# và GoLang Việc chọn ngôn ngữ phù hợp không chỉ ảnh hưởng đến hiệu suất của game mà còn quyết định tính linh hoạt và khả năng bảo trì trong quá trình phát triển.
3.1.4 Hình ảnh và đồ họa
Thiết kế giao diện người dùng là yếu tố quan trọng để tạo ra một trải nghiệm hấp dẫn và trực quan cho người chơi, bao gồm việc sử dụng màu sắc, kiểu chữ, đồ họa và hiệu ứng Đồ họa 2D và 3D cũng đóng vai trò then chốt, với việc xây dựng mô hình, texturing, ánh sáng và hiệu ứng đặc biệt Để đạt được chất lượng cao trong đồ họa game, các công cụ như Photoshop, Illustrator, Blender và Maya là cần thiết để đáp ứng yêu cầu của trò chơi.
3.1.5 Âm thanh và hiệu ứng âm thanh
Thiết kế âm thanh trong game là yếu tố quan trọng để tạo ra một môi trường âm thanh sống động và hấp dẫn Điều này bao gồm việc sử dụng nhạc nền, hiệu ứng âm thanh và giọng nói nhằm mang đến trải nghiệm âm thanh tối ưu cho người chơi.
Hiệu ứng âm thanh đóng vai trò quan trọng trong việc tạo ra những âm thanh đặc biệt như tiếng nổ, tiếng súng và tiếng động vật, giúp tăng cường sự thú vị và tính tương tác trong game Để quản lý và tạo ra các hiệu ứng này, các công cụ như Audacity và FMOD Studio là lựa chọn hiệu quả.
Cách một game hoạt động
Game Object là một đối tượng trong môi trường game, thường là một thành phần cơ bản của cấu trúc dữ liệu và chương trình của trò chơi
Mỗi Game Object là một thực thể cụ thể trong trò chơi, bao gồm nhân vật, đối tượng tĩnh, vật phẩm và môi trường, cũng như bất kỳ thứ gì có thể tương tác.
Trong trò chơi, Game Object thường bao gồm các thuộc tính và hành vi được xác định bởi các thành phần (components) và kịch bản (scripts) liên quan.
Các thuộc tính của Game Object bao gồm vị trí, quy mô, hướng, độ cao, hình dạng, trạng thái hiện tại, điểm số, màu sắc và các thông tin cần thiết khác để mô phỏng đối tượng trong trò chơi.
Hành vi của một Game Object được điều khiển thông qua các kịch bản (Script) và thành phần (Component) Các kịch bản thường được sử dụng để xử lý sự kiện, kiểm soát đối tượng, và tương tác với người chơi hoặc các Game Object khác.
Game Object là khái niệm cốt lõi trong phát triển trò chơi, đại diện cho các đối tượng có thể tương tác và được quản lý trong môi trường trò chơi.
Trong phát triển game, khái niệm Component (Thành phần) đóng vai trò quan trọng và phổ biến, giúp mở rộng và quản lý các tính năng cũng như hành vi của Game Object.
Một Game Object có thể bao gồm nhiều Component khác nhau, mỗi Component đại diện cho một khía cạnh cụ thể như hình dạng, động cơ vật lý, ánh sáng, âm thanh và các thành phần đặc biệt khác Bằng cách kết hợp các Component này, chúng ta có thể tạo ra những Game Object phức tạp với hành vi và tính năng đa dạng.
Mỗi Component trong game có các thuộc tính, thông tin và phương thức riêng biệt, giúp điều khiển hành vi và tương tác của nó Các thuộc tính này có thể được điều chỉnh và lưu trữ trong quá trình chạy, cho phép tùy chỉnh linh hoạt các giá trị thông số của Game Object.
Các Component trong trò chơi thường liên quan đến việc xử lý sự kiện và tương tác với người chơi hoặc các Component khác Chúng cung cấp các hàm quan trọng để nâng cao trải nghiệm chơi game.
18 callback (hàm gọi lại) để phản ứng với các sự kiện như va chạm, nhấp chuột, hoặc bất kỳ tương tác nào xảy ra trong trò chơi
Một số ví dụ về Component phổ biến bao gồm:
• Transform Component: Điều chỉnh vị trí, quy mô và hướng của Game Object
• Renderer Component: Xử lý việc hiển thị hình ảnh, màu sắc và vật liệu của Game Object trên màn hình
• Collider Component: Xác định vùng không gian và hình dạng của Game Object để phát hiện va chạm với các đối tượng khác
• Script Component: Định nghĩa và điều khiển hành vi tùy chỉnh của Game Object bằng cách viết mã script
Sử dụng cấu trúc Component, nhà phát triển có khả năng tái sử dụng và mở rộng các tính năng của Game Object một cách linh hoạt, đồng thời quản lý hành vi của nó hiệu quả hơn.
Kịch bản trong phát triển game là mã lập trình quan trọng, dùng để điều khiển hành vi và tương tác của các đối tượng trong trò chơi.
Script là công cụ chủ yếu để điều khiển hành vi của Game Object, chứa mã lệnh được viết bằng các ngôn ngữ lập trình như C#, JavaScript, Python hoặc Lua, tùy thuộc vào nền tảng và công cụ phát triển mà bạn đang sử dụng.
Với việc sử dụng Script, bạn có thể tạo ra các hành vi tùy chỉnh cho Game Object
Bạn có thể viết một Script để điều khiển nhân vật, phản ứng với các sự kiện như va chạm hoặc nhấp chuột, thực hiện các phép toán phức tạp và thay đổi các thuộc tính của Game Object.
Scripts thường được gắn kết với các Game Object thông qua các Component Khi một Game Object có một Component kịch bản (Script Component) được gắn kết
19 với nó, nó có thể thực thi các mã lệnh trong Script để xử lý các sự kiện và hành vi liên quan đến Game Object đó
Sử dụng Script trong phát triển game giúp tách rời logic và hành vi của Game Object khỏi các thành phần như hình dạng, động cơ vật lý và âm thanh Điều này không chỉ mang lại sự linh hoạt mà còn tăng khả năng tái sử dụng mã lệnh, từ đó làm cho việc phát triển và bảo trì trò chơi trở nên dễ dàng hơn.
Script là mã lập trình dùng để xử lý hành vi và tương tác của các đối tượng trong trò chơi, cho phép tạo ra các hành vi tùy chỉnh cho Game Object.
Sự cần thiết của Game Engine trong phát triển game
Từ những thứ kể trên, ta có thể kết luận việc phát triển một trò chơi là một công việc phức tạp và đầy thách thức
Phát triển game gặp nhiều khó khăn do sự phức tạp của công nghệ và cấu trúc dữ liệu Một trò chơi đa dạng bao gồm nhiều yếu tố như đồ họa, âm thanh, vật lý và trí tuệ nhân tạo Việc tạo ra và quản lý những yếu tố này từ đầu đòi hỏi hiểu biết sâu sắc về công nghệ, ngôn ngữ lập trình, đồ họa, âm thanh và khả năng tối ưu hóa hiệu suất.
Việc phát triển trò chơi đa nền tảng là một thách thức lớn đối với các nhà phát triển, đặc biệt trong bối cảnh thiết bị di động và nền tảng trò chơi ngày càng đa dạng Họ cần đảm bảo rằng trò chơi của mình tương thích với nhiều loại thiết bị và hệ điều hành khác nhau, điều này đòi hỏi kiến thức sâu rộng về đa nền tảng cũng như kỹ năng tương thích với các phần cứng và phần mềm khác nhau.
Quản lý dữ liệu và tài nguyên trong trò chơi là một thách thức lớn do kích thước và độ phức tạp ngày càng tăng của các thành phần như hình ảnh, âm thanh, video và nhiều tài nguyên khác Việc tối ưu hóa các tài nguyên này là cần thiết để đảm bảo trò chơi hoạt động mượt mà và không gặp vấn đề về hiệu suất.
Trong bối cảnh hiện nay, việc sử dụng game engine là rất quan trọng và cần thiết, vì nó cung cấp nền tảng giúp giảm bớt khó khăn trong phát triển game Game engine mang đến các công cụ và tài nguyên tối ưu hóa, hỗ trợ từ xây dựng đồ họa và âm thanh cho đến quản lý tài nguyên và tính năng đa nền tảng Nhờ đó, việc phát triển trò chơi trở nên nhanh chóng và hiệu quả hơn, đồng thời tạo ra một cơ sở ổn định để xây dựng các sản phẩm game.
Việc phát triển trò chơi gặp nhiều khó khăn và yêu cầu sự kết hợp giữa nghệ thuật và công nghệ Sử dụng game engine không chỉ giảm bớt những thách thức trong quá trình phát triển mà còn cung cấp nền tảng ổn định, giúp nhà phát triển tập trung vào sáng tạo và mang đến những trải nghiệm game tuyệt vời.
Các khái niệm cơ bản trong lĩnh vực phát triển Game Engine
Trong phần này, chúng ta sẽ khám phá các khái niệm cơ bản trong phát triển Game Engine, những yếu tố quan trọng mà các nhà phát triển cần nắm vững để tạo ra Game Engine chất lượng Dưới đây là một số khái niệm cần tìm hiểu, và tùy thuộc vào quy mô cũng như phạm vi của game engine, có thể xuất hiện nhiều khái niệm và công nghệ phức tạp hơn.
3.4.1 Game Loop Đây là một vòng lặp chính trong game engine để xử lý logic và cập nhật trạng thái của game Nó được thực hiện liên tục trong quá trình chạy game và bao gồm các bước như cập nhật đối tượng, xử lý đầu vào từ người chơi, tính toán vật lý và hiển thị đồ họa
3.4.2 Update Method Đây là phần của game loop mà các đối tượng trong game được cập nhật Trong phương pháp này, các thông tin như vị trí, tốc độ, trạng thái của các đối tượng được cập nhật dựa trên logic game và các tương tác từ người chơi
Quá trình render là bước quan trọng để hiển thị đồ họa trên màn hình, bao gồm việc vẽ các đối tượng và áp dụng các kỹ thuật như shading, lighting cùng với các hiệu ứng hình ảnh khác, nhằm tạo ra hình ảnh cuối cùng cho người chơi.
3.4.4 Asset Management Đây là quá trình quản lý tài nguyên (assets) trong game engine, bao gồm các đối tượng GameObject, Prefabs, các file nhân vật 2D/3D, âm thanh, video, v.v Quản lý tài nguyên đảm bảo rằng các tài nguyên được quản lý một cách hiệu quả trong quá trình phát triển game
3.4.5 Collision Detection Đây là quá trình xác định sự va chạm giữa các đối tượng trong game Nó kiểm tra xem hai đối tượng có tiếp xúc hay va chạm với nhau không, và nếu có, thì xử lý va chạm theo cách thích hợp, ví dụ như chuyển đổi hướng, gây sát thương, hoặc kích hoạt các hiệu ứng khác
3.4.6 Physics Simulation Đây là quá trình mô phỏng vật lý trong game, bao gồm các nguyên tắc vật lý như trọng lực, ma sát, va chạm, động lực học, và các hiệu ứng vật lý khác Việc mô phỏng vật lý giúp tạo ra sự chân thực và tương tác tự nhiên giữa các đối tượng trong game.
Các mô hình thiết kế thường được sử dụng để phát triển Game Engine 21 1 Component-based Design (CBD)
Component-based Design (CBD) và Entity-Component-System (ECS) là hai mô hình thiết kế phổ biến trong phát triển Game Engine
CBD là một mô hình thiết kế trong đó các đối tượng game được xây dựng bằng cách kết hợp các thành phần riêng lẻ
Mỗi thành phần trong một đối tượng thể hiện những khía cạnh cụ thể như hình dạng, vị trí, động lực, hành vi, ánh sáng và âm thanh.
CBD cho phép tái sử dụng linh hoạt các thành phần mà không cần tạo ra các lớp kế thừa phức tạp, giúp xây dựng các đối tượng game phức tạp một cách hiệu quả.
CBD tạo ra sự phân tách rõ ràng giữa dữ liệu và logic, giúp quản lý dễ dàng hơn và cho phép mở rộng linh hoạt hệ thống game
ECS là một mô hình thiết kế kiến trúc hệ thống game phân tán và hiệu quả cao
Trong ECS, đối tượng game được biểu diễn bằng các thực thể (entity) không chứa logic
Thay vào đó, logic game được chia thành các thành phần (component) riêng biệt và hệ thống (system) xử lý các thành phần đó
Mỗi hệ thống trong một ứng dụng đảm nhận việc xử lý các thành phần riêng biệt, chẳng hạn như hệ thống xử lý đồ họa, hệ thống xử lý vật lý và hệ thống xử lý hành vi.
ECS giúp tăng hiệu suất bằng cách cung cấp truy cập dữ liệu liên tục và tối ưu hóa cache
Ngoài ra, ECS cũng cho phép mở rộng linh hoạt và tái sử dụng thành phần và hệ thống
3.5.3 So sáng CBD với ECS
Cả CBD và ECS đều tách biệt dữ liệu và logic, giúp quản lý dễ dàng và mở rộng hệ thống game
CBD tập trung vào việc kết hợp các thành phần để phục vụ cho đối tượng game, trong khi ECS chú trọng vào việc phân tách logic thành các hệ thống xử lý và dữ liệu thành các thành phần riêng biệt.
CBD giúp các nhà phát triển game tạo ra sản phẩm một cách nhanh chóng và linh hoạt, trong khi ECS tối ưu hóa hiệu suất, hỗ trợ khả năng mở rộng lớn và xử lý đa luồng hiệu quả.
ECS có thể đòi hỏi kiến thức sâu về hệ thống phân tán, khiến việc triển khai ban đầu trở nên phức tạp hơn Ngược lại, CBD lại dễ tiếp cận và đơn giản hơn, phù hợp cho những người mới bắt đầu.
Tùy thuộc vào yêu cầu và quy mô dự án, việc lựa chọn giữa CBD và ECS sẽ phụ thuộc vào các yếu tố như hiệu suất, tính linh hoạt, khả năng quản lý dữ liệu và độ phức tạp của hệ thống game.
Các Design Pattern phổ biến được dùng trong phát triển Game/Game
In "Game Programming Patterns" by Robert Nystrom, 20 popular design patterns are utilized in game and game engine development, including Command, Flyweight, Observer, Prototype, Singleton, State, Double Buffer, Game Loop, Update Method, Bytecode, Subclass Sandbox, Type Object, Component, Event Queue, Service Locator, Data Locality, Dirty Flag, Object Pool, and Spatial Partition However, we will focus on the most important patterns.
Mô tả: Mẫu thiết kế Observer cho phép một đối tượng (subject) thông báo cho một hoặc nhiều đối tượng khác (observers) về sự thay đổi trạng thái
Trong một trò chơi, GameEventManager đóng vai trò là chủ thể, trong khi các đối tượng như giao diện người chơi và hệ thống nhiệm vụ là những người quan sát Khi có sự kiện xảy ra, chẳng hạn như người chơi hoàn thành nhiệm vụ, GameEventManager sẽ thông báo cho tất cả các đối tượng quan sát để họ cập nhật hiển thị hoặc thực hiện các xử lý cần thiết.
Mẫu thiết kế Singleton đảm bảo chỉ có một đối tượng duy nhất của một lớp được tạo ra, đồng thời cung cấp quyền truy cập toàn cục đến đối tượng đó.
Trong game, lớp ScoreManager có thể được thiết kế theo mẫu Singleton để quản lý điểm số của người chơi một cách hiệu quả trong toàn bộ trò chơi Việc áp dụng mẫu thiết kế này giúp đảm bảo rằng chỉ có một phiên bản duy nhất của ScoreManager tồn tại, từ đó dễ dàng theo dõi và cập nhật điểm số của người chơi.
Singleton Pattern cho phép các đối tượng trong game truy cập ScoreManager để cập nhật và hiển thị điểm số mà không cần phải tạo ra nhiều phiên bản của ScoreManager.
Mẫu thiết kế Dirty Flag giúp xác định xem một đối tượng đã thay đổi dữ liệu hay chưa, từ đó tối ưu hóa quá trình cập nhật và vẽ đối tượng.
Trong game, khi một đối tượng nhân vật thay đổi trạng thái như vị trí hoặc hướng, Dirty Flag sẽ được đánh dấu để chỉ ra sự thay đổi Trong quá trình vẽ (render), chỉ những đối tượng có Dirty Flag mới cần được cập nhật và vẽ lại, giúp tối ưu hóa hiệu năng của game.
Mẫu thiết kế Object Pool giúp quản lý một tập hợp các đối tượng có sẵn để tái sử dụng, thay vì phải tạo mới đối tượng mỗi khi cần Việc sử dụng Object Pool không chỉ tiết kiệm tài nguyên mà còn cải thiện hiệu suất của ứng dụng bằng cách giảm thiểu chi phí khởi tạo đối tượng.
Trong game bắn súng, việc sử dụng Object Pool Pattern giúp quản lý hiệu quả các đối tượng đạn Thay vì tạo mới mỗi khi người chơi bắn, Object Pool duy trì một tập hợp đạn sẵn có Người chơi có thể lấy đạn từ Object Pool và sau khi sử dụng, trả lại để tái sử dụng, từ đó tối ưu hóa bộ nhớ và nâng cao hiệu suất game.
Type Object là một mẫu thiết kế giúp xác định các thuộc tính và hành vi chung của nhóm đối tượng cùng loại Thay vì định nghĩa riêng lẻ cho từng đối tượng, mẫu này tạo ra một đối tượng kiểu (type object) đại diện cho loại đối tượng, chứa thông tin chung và chia sẻ giữa tất cả các đối tượng trong nhóm.
Trong game, việc áp dụng mẫu Type Object Pattern cho phép định nghĩa các loại quái vật một cách hiệu quả Thay vì mỗi quái vật mang các thuộc tính và phương thức riêng, ta có thể tạo ra một đối tượng kiểu "MonsterType" chứa các thông tin chung như tốc độ di chuyển, máu, sát thương, cùng với các phương thức như di chuyển và tấn công Mỗi quái vật sẽ tham chiếu tới "MonsterType" để truy cập thông tin và hành vi chung, từ đó tiết kiệm bộ nhớ và nâng cao khả năng tái sử dụng.
Component Pattern cho phép xây dựng các đối tượng phức tạp thông qua việc kết hợp linh hoạt các thành phần riêng lẻ, mỗi thành phần đảm nhiệm một trách nhiệm cụ thể Phương pháp này giúp mở rộng chức năng và tạo ra các đối tượng với tính năng đa dạng.
Trong game, Component Pattern cho phép xây dựng các nhân vật với các thành phần riêng biệt như hình dạng, hành vi, va chạm, âm thanh và đồ họa Thay vì tập trung tất cả chức năng vào một lớp Nhân vật lớn, ta tách chúng thành các thành phần độc lập và kết hợp lại, giúp tăng tính linh hoạt và khả năng tái sử dụng.
"SpriteComponent" quản lý hiển thị hình dạng, một thành phần
"MovementComponent" quản lý di chuyển, và một thành phần
"CollisionComponent" quản lý va chạm và cho phép tạo ra những nhân vật độc đáo với hình dạng, chuyển động và cách thức va chạm khác nhau bằng cách kết hợp các thành phần này.
Cách thức dạy môn Lập trình game phổ biến tại các trường đại học tại Việt Nam hiện nay
Theo nghiên cứu của nhóm, nhiều trường đại học hiện nay trong chương trình giảng dạy môn lập trình game, đặc biệt là môn “Nhập môn phát triển game”, yêu cầu sinh viên phát triển game Mario 2D mà không sử dụng Engine.
Việc không sử dụng Game Engine trong dạy và học lập trình game chủ yếu do yêu cầu cấu hình máy tính cao của các Engine này.
26 còn rất phức tạp dành cho người mới, để phát triển game như Mario thực tế không cần phải sử dụng quá nhiều tính năng như vậy
3.8 Lý luận về tầm quan trọng và ưu điểm của việc phát triển Game Engine
Việc phát triển Game Engine đóng vai trò quan trọng trong ngành công nghiệp game, mang lại nhiều lợi ích về công nghệ và sự phát triển của trò chơi Những lợi thế này bao gồm khả năng tối ưu hóa quy trình phát triển, nâng cao chất lượng đồ họa và âm thanh, cũng như tạo ra những trải nghiệm chơi game mượt mà và hấp dẫn hơn Hơn nữa, việc sử dụng Game Engine giúp các nhà phát triển tiết kiệm thời gian và chi phí, đồng thời mở ra cơ hội cho sự sáng tạo và đổi mới trong thiết kế game.
3.8.1 Tầm quan trọng của việc phát triển Game Engine
Game Engine cung cấp một nền tảng đồng nhất cho việc phát triển game, giúp tạo ra các trò chơi chất lượng cao và đồng nhất trên nhiều nền tảng khác nhau.
Game Engine giúp lập trình viên tăng năng suất và hiệu quả bằng cách cung cấp các công cụ và thư viện tiện ích, từ đó giảm thời gian phát triển game Nhờ vậy, lập trình viên có thể tập trung vào việc thiết kế nội dung và cải thiện trải nghiệm người chơi, thay vì phải phát triển game từ đầu đến cuối.
Game Engine hỗ trợ phát triển trò chơi trên nhiều nền tảng như PC, console, di động và web, giúp mở rộng đối tượng người chơi Việc này không chỉ tăng khả năng tiếp thị mà còn nâng cao doanh thu cho game.
3.8.2 Ưu điểm của việc phát triển Game Engine riêng
Phát triển Game Engine riêng mang lại sự tùy chỉnh và linh hoạt, cho phép điều chỉnh theo nhu cầu cụ thể của từng dự án Engine này có thể được tối ưu hóa cho một thể loại game nhất định hoặc đáp ứng các yêu cầu độc đáo của dự án, từ đó nâng cao hiệu quả và chất lượng sản phẩm cuối cùng.
Game Engine riêng giúp quản lý tài nguyên game hiệu quả hơn, bao gồm quản lý đồ họa, âm thanh, đối tượng, cũng như tối ưu hóa bộ nhớ và hiệu suất.
Việc phát triển Game Engine riêng mang lại khả năng kiểm soát toàn diện đối với các mô-đun, tính năng và khả năng của hệ thống, từ đó đảm bảo sự tối ưu và hiệu quả trong quá trình phát triển trò chơi.
Game Engine phù hợp với yêu cầu cụ thể của dự án và có thể được mở rộng và cải thiện theo thời gian
3.8.3 Các lý do để phát triển một Game Engine riêng
Việc phát triển Game Engine riêng giúp đánh giá các ưu nhược điểm của những Game Engine hiện có Các lý do quyết định cho việc này có thể bao gồm nhu cầu tùy chỉnh cao, tối ưu hóa hiệu suất và khả năng kiểm soát toàn diện trong quá trình phát triển trò chơi.
Phát triển Game Engine riêng giúp đáp ứng các yêu cầu đặc thù của dự án, tạo ra công cụ phù hợp với sự độc đáo và định hướng riêng Các Game Engine hiện có có thể không đủ khả năng phục vụ nhu cầu cụ thể, vì vậy việc xây dựng một Game Engine riêng là giải pháp tối ưu.
Phát triển Game Engine riêng giúp kiểm soát và quản lý tài nguyên hiệu quả hơn, từ đó tối ưu hóa hiệu suất và đảm bảo tài nguyên được sử dụng một cách hợp lý trong quá trình phát triển game.
Phát triển Game Engine riêng giúp mở rộng và cải tiến theo nhu cầu dự án, tăng tính linh hoạt và đáp ứng yêu cầu thay đổi trong quá trình phát triển game.
Quyết định phát triển Game Engine riêng là một chiến lược quan trọng, mang lại nhiều lợi ích cho dự án phát triển game.
Giả thiết
Bài viết này trình bày giả thuyết về tính khả thi và hiệu quả của việc phát triển Game Engine, đồng thời đánh giá mức độ tiếp cận và sự dễ sử dụng của nó, từ đó hình dung về chất lượng và khả năng thành công trong quá trình phát triển.
3.9.1 Giả thiết về tính khả thi và hiệu quả của việc phát triển Game Engine dựa trên kiến thức và kinh nghiệm có sẵn
Giả thiết rằng việc phát triển Game Engine dựa trên kiến thức và kinh nghiệm có sẵn là khả thi và có thể đạt được
Việc tích hợp các nguyên lý và phương pháp phát triển game đã được nghiên cứu và áp dụng thành công trong các dự án trước đây sẽ giúp nâng cao hiệu quả và rút ngắn thời gian phát triển Game Engine mới.
Việc áp dụng kiến thức và kinh nghiệm hiện có sẽ giúp giảm thiểu các sai lầm và lỗi phổ biến trong quá trình phát triển Game Engine, từ đó nâng cao chất lượng và độ ổn định của sản phẩm.
3.9.2 Giả thiết về mức độ tiếp cận và sự dễ dùng của Game Engine đối với người mới bắt đầu
Việc phát triển Game Engine cần được thiết kế để dễ sử dụng và thân thiện với người mới bắt đầu học lập trình game, giúp họ tiếp cận nhanh chóng và hiệu quả hơn với lĩnh vực này.
Sử dụng một ngôn ngữ lập trình phổ biến để phát triển kịch bản, kết hợp với giao diện người dùng thân thiện và tài liệu hướng dẫn rõ ràng, sẽ giúp giảm độ khó và tạo điều kiện cho người mới bắt đầu dễ dàng tiếp cận và sử dụng Game Engine.
Để tạo ra một môi trường phát triển trò chơi thuận tiện và dễ sử dụng cho người mới bắt đầu, cần xem xét tính khả dụng của các công cụ phụ trợ như trình biên dịch, trình gỡ lỗi và trình quản lý tài nguyên.
3.9.3 Giả thiết về việc ứng dụng sản phẩm vào việc giảng dạy lập trình game
Nhiều sinh viên mới học lập trình game thường cảm thấy choáng ngợp trước sự phức tạp của các game engine hiện nay, gây khó khăn trong việc bắt đầu Hơn nữa, hầu hết laptop của sinh viên không đủ mạnh để chạy các game engine phổ biến trên thị trường, làm tăng thêm thách thức trong quá trình học tập.
Chúng tôi đưa ra giả thiết rằng phát triển một game engine với tính năng đơn giản, hiệu suất cao và giao diện thân thiện sẽ hỗ trợ hiệu quả trong việc giảng dạy các môn học lập trình game tại các trường đại học.
Sử dụng Game Engine phát triển riêng cho trường đại học không chỉ nâng cao thương hiệu của nhà trường mà còn tạo điều kiện thuận lợi cho giảng viên và sinh viên trong việc chia sẻ tài liệu và tài nguyên chung.
Chương 4 PHƯƠNG PHÁP NGHIÊN CỨU
Phương pháp nghiên cứu
Nghiên cứu các Game Engine hiện có để tìm hiểu, học hỏi về các phương pháp, công nghệ và mẫu thiết kế sử dụng trong phát triển Game Engine
Nghiên cứu các dự án phát triển Game Engine thành công và thất bại nhằm rút ra những bài học và kinh nghiệm quý giá
Thực hiện các thử nghiệm và đánh giá với Game Engine đang phát triển để đảm bảo tính khả thi và hiệu quả của nó
Sử dụng phương pháp so sánh và phân tích để đánh giá Game Engine đang phát triển, so sánh với các Game Engine hiện có, nhằm làm rõ ưu điểm và nhược điểm của nó.
Ngôn ngữ lập trình và công nghệ sử dụng
Trong phần này, chúng em sẽ nói về ngôn ngữ và công nghệ đã sử dụng để phát triển sản phẩm
4.2.1 Ngôn ngữ lập trình: Java
Java là một ngôn ngữ lập trình phổ biến và mạnh mẽ, được sử dụng rộng rãi trong lĩnh vực phát triển game
Java mang lại tính bảo mật cao, cú pháp dễ hiểu và khả năng hỗ trợ đa nền tảng, tạo điều kiện thuận lợi cho việc phát triển và triển khai Game Engine trên nhiều hệ điều hành và thiết bị khác nhau.
4.2.2 Công nghệ/Thư viện sử dụng trong quá trình phát triển sản phẩm 4.2.2.1 Giao diện
ImGui là một thư viện giao diện người dùng nhẹ và linh hoạt, chủ yếu được sử dụng để phát triển các thành phần giao diện đồ họa trong Game Engine của nhóm.
JavaX là bộ công cụ cung cấp các thành phần giao diện đồ họa cho Java, được nhóm phát triển sử dụng để tạo ra các hộp thoại xác nhận và hộp thoại lỗi trong sản phẩm.
LWJGL (Lightweight Java Game Library) là thư viện Java hỗ trợ phát triển game và ứng dụng đa nền tảng, cung cấp khả năng render đồ họa với OpenGL trong Game Engine.
OpenGL (Open Graphics Library) là một giao diện lập trình đồ họa 3D đa nền tảng, phổ biến trong việc tạo ra hiệu ứng hình ảnh và đồ họa cho Game Engine.
4.2.2.3 Xử lý đầu vào (Input)
GLFW (Graphics Library Framework) là thư viện mã nguồn mở giúp tạo cửa sổ và xử lý đầu vào từ chuột và bàn phím trong Game Engine Công cụ này rất hữu ích cho việc quản lý các sự kiện đầu vào trong phát triển game.
OpenAL (Thư viện Âm thanh Mở) là một thư viện âm thanh đa nền tảng, lý tưởng cho việc xử lý âm thanh trong Game Engine Thư viện này cung cấp các chức năng quan trọng như phát lại âm thanh, xử lý hiệu ứng âm thanh và quản lý tài nguyên âm thanh hiệu quả.
4.2.2.5 Thực hiện phép tính render
JOML (Java OpenGL Math Library) là thư viện toán học dành cho OpenGL trong Java, cung cấp các phép toán vector, ma trận và biến đổi cần thiết để thực hiện các phép tính render hiệu quả trong sản phẩm.
4.2.2.6 Tương tác vật lý, xử lý va chạm
JBox2d là phiên bản Java của thư viện vật lý Box2D, chuyên dùng để xử lý va chạm và mô phỏng vật lý trong các sản phẩm game Thư viện này hỗ trợ tạo ra các hiệu ứng vật lý chân thực và quản lý các tương tác giữa các đối tượng trong trò chơi.
GSON là thư viện mã nguồn mở do Google phát triển, giúp chuyển đổi dữ liệu giữa các đối tượng Java và định dạng JSON Thư viện này cung cấp các phương thức linh hoạt để dễ dàng tạo JSON từ đối tượng Java và ngược lại, hỗ trợ người dùng trong việc xử lý dữ liệu hiệu quả.
Sản phẩm được phát triển dựa trên kiến trúc Component-based Design (CBD) nhằm tận dụng những ưu điểm nổi bật, đặc biệt phù hợp cho những người mới bắt đầu tìm hiểu về lập trình game.
1 Tách rời logic và dữ liệu: CBD cho phép tách rời logic (thành phần xử lý) và dữ liệu (thành phần dữ liệu), giúp tổ chức và quản lý mã nguồn dễ dàng hơn Điều này giúp giảm sự phụ thuộc giữa các thành phần và tạo ra một hệ thống linh hoạt, dễ mở rộng
2 Tính tái sử dụng cao: Các thành phần trong kiến trúc CBD có thể được tái sử dụng và kết hợp lại một cách linh hoạt Bạn có thể xây dựng và sử dụng lại các thành phần như hệ thống xử lý va chạm, hệ thống điều khiển
AI, hệ thống hiệu ứng đồ họa, v.v Điều này giúp tiết kiệm thời gian và công sức trong việc phát triển game mới và mở rộng game hiện có
3 Dễ dàng quản lý và mở rộng: Với kiến trúc CBD, việc thêm mới và loại bỏ các thành phần trong game engine trở nên dễ dàng hơn Bạn có thể thêm các thành phần mới vào game engine để mở rộng tính năng hoặc thay thế các thành phần hiện có một cách linh hoạt Điều này giúp quản
33 lý và duy trì mã nguồn dễ dàng hơn trong quá trình phát triển và bảo trì game
4 Dễ tiếp cận cho người mới học lập trình game: Kiến trúc CBD thường tạo ra một cấu trúc rõ ràng và dễ hiểu cho người mới bắt đầu học lập trình game Việc tách rời logic và dữ liệu giúp người mới học dễ dàng hiểu và xử lý từng thành phần một Hơn nữa, tính tái sử dụng cao của CBD giúp người mới học có thể sử dụng lại các thành phần có sẵn để xây dựng game đơn giản mà không cần viết mã từ đầu
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Sơ đồ và danh sách Use-case
Hình 5.1 Sơ đồ Use Case
Bảng 5.1 Danh sách các use-case chính
STT Tên Use-Case Ý Nghĩa / Ghi Chú
1 Tạo Project Tạo một Project mới
2 Mở Project Mở một Project hiện có
3 Tạo Game Object Tạo Game Object
4 Sửa Game Object Thêm, xoá, sửa thông số Component bên trong Game Object
5 Xoá Game Object Xoá Game Object
6 Quản lý Animation Thêm, xoá, sửa Animation trong Game
7 Quản lý Prefab Thêm, xoá, sửa Prefab
8 Quản lý Spritesheet Thêm, xoá, sửa Spritesheet
9 Quản lý Resource Truy cập, tạo, mở file, thư mục để sử dụng trong Game Engine
10 Tạo/Chỉnh sửa game Thêm, xoá, sửa các Game Object trong game viewport để tạo thành game
Đặc tả use-case
Bảng 5.2 Đặc tả use-case Tạo Project
Tên chức năng Tạo Project
Tóm tắt Tạo một Project mới
1 Người dùng chọn tạo Project (Ctrl+N/ File-
2 Popup hiển thị cho phép người dùng đặt tên cho Project
3 Nhấn Create để tạo, Cancel để huỷ
Hiện thông báo Project đã tồn tại
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Project mới được tạo và hiển thị trên giao diện Điểm mở rộng Không có
Bảng 5.3 Đặc tả use-case Mở Project
Tên chức năng Mở Project
Tóm tắt Mở một Project hiện có
Dòng sự kiện chính 1 Người dùng chọn mở Project (Ctrl+O/File-
2 Người dùng double-click chuột trái vào Project muốn mở trong danh sách
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case
Project load thành công và hiển thị trên giao diện Điểm mở rộng Không có
5.2.3 Use-case “Tạo Game Object”
Bảng 5.4 Đặc tả use-case Tạo Game Object
Tên chức năng Tạo Game Object
Tóm tắt Tạo một Game Object mới
1 Người dùng tạo một Game Object mới
• Click chuột phải vào cửa sổ Hierarchy -> New Game Object
• Chuột phải vào một Prefab -> Create a child game object và click vào một ô bất kỳ trong game viewport
• Chọn một hình ảnh từ cửa sổ assets hoặc sprite từ cửa sổ Spritesheet và click vào một ô bất kỳ trong game viewport
Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Một Game Object mới được tạo Điểm mở rộng Không có
5.2.4 Use-case “Sửa Game Object”
Bảng 5.5 Đặc tả use-case Sửa Game Object
Tên chức năng Sửa Game Object
Tóm tắt Sửa một Game Object hiện có
1 Người dùng chọn Game Object cần chỉnh sửa bằng cách click vào nó trong Game viewport hoặc Hierarchy
2 Chọn Component cần chỉnh sửa
3 Giao diện hiển thị thông tin Game Object ở cửa sổ Inspector
4 Thay đổi thông số hoặc thêm, gỡ bỏ Component
Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case
Thông tin của Game Object được thay đổi và hiển thị trên Game viewport
39 Điểm mở rộng Không có
5.2.5 Use-case “Xoá Game Object”
Bảng 5.6 Đặc tả use-case Xoá Game Object
Tên chức năng Xoá Game Object
Tóm tắt Xoá một Game Object
1 Người dùng chọn Game Object cần xoá bằng cách click vào nó trong Game viewport hoặc Hierarchy
2 Nhấn nút Delete Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Game Object được xoá khỏi Project Điểm mở rộng Không có
5.2.6 Use-case “Quản lý Animation”
Bảng 5.7 Đặc tả use-case Quản lý Animation
Tên chức năng Quản lý Animation
Tóm tắt Thêm, sửa, xoá Animation trong Component
1 Người dùng chọn Game Object có chứa Component StateMachine và click vào nó
2 Nhấn New Animation State để thêm một state
3 Chọn vào State cần chỉnh sửa và thay đổi thông số, xoá, demo…
Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Có Game Object có chứa Component AnimationState
Trạng thái hệ thống sau khi thực hiện use-case Animation thay đổi Điểm mở rộng Không có
5.2.7 Use-case “Quản lý Prefab”
Bảng 5.8 Đặc tả use-case “Quản lý Prefab”
Tên chức năng Quản lý Prefab
Tóm tắt Thêm, sửa, xoá Prefab
1 Tạo Prefab: Người dùng chọn một Game Object -> Nhấn nút Save as a new prefab để tạo một Prefab
2 Sửa Prefab: Người dùng chọn một Prefab tại cửa sổ Prefab -> chỉnh sửa như đối với một Game Object
3 Xoá Prefab: Người dùng click chuột phải vào Prefab cần xoá -> Remove this prefab
Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Mở cửa sổ Prefab, Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Thông tin Prefab thay đổi Điểm mở rộng Không có
5.2.8 Use-case “Quản lý Spritesheet”
Bảng 5.9 Đặc tả use-case Quản lý Spritesheet
Tên chức năng Quản lý Spritesheet
Tóm tắt Thêm, sửa, xoá Spritesheet
• Ngưởi dùng nhấn nút Add spritesheet trong cửa sổ Spritesheet
• Chọn hình ảnh để tạo Spritesheet từ danh sách
• Điền thông số cho Spritesheet và nhấn save
• Ngưởi dùng nhấn chuột phải vào Spritesheet cần sửa trong cửa sổ Spritesheet
• Thay đổi thông số và nhấn Save
• Ngưởi dùng nhấn chuột phải vào Spritesheet cần xoá trong cửa sổ Spritesheet
• Cửa sổ xác nhận hiện lên, nhấn Yes để xoá Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Mở cửa sổ Spritesheet, Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Thông tin Spritesheet thay đổi Điểm mở rộng Không có
5.2.9 Use-case “Quản lý Resource”
Bảng 5.10 Đặc tả use-case “Quản lý Resource”
Tên chức năng Quản lý Resource
Tóm tắt Truy cập, tạo, mở , thêm file, thư mục để sử dụng trong Game Engine
• Người dùng sử dụng cửa sổ Assets như một File Explorer của Window
• Chuột phải vào cửa sổ Assets và chọn New folder/Create file để tạo folder/file
• Kéo folder/file từ File Explorer của Window vào của sổ Assets để copy file vào thư mục assets
• Double click vào file để mở file Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Assets đang mở, Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case
Thông tin của sổ Assets thay đổi dựa theo hành động Điểm mở rộng Không có
5.2.10 Use-case “Tạo/Chỉnh sửa game”
Bảng 5.11 Đặc tả use-case “Tạo/Chỉnh sửa game”
Tên chức năng Tạo/Chỉnh sửa game
Tóm tắt Tạo, chỉnh sửa game trong cửa sổ Game viewport
1 Người dùng tương tác với Game Object trong cửa sổ Game viewport
• Chọn Game Object: Người dùng click vào Game Object trong Game viewport
• Chọn nhiều Game Object: Người dùng giữ và kéo chuột để thực hiện chọn nhiều Game Object trong Game viewport
• Di chuyển Game Object: Dùng các nút mũi tên trên bàn phím để di chuyển các Game Object đang được chọn
• Nhân bản Game Object: Nhấn Ctrl+D để nhân bản các Game Object đang được chọn
• Xoá Game Object: Nhấn Delete để xoá các Game Object đang được chọn
Để thay đổi transform hoặc scale của một Game Object, bạn cần chọn Game Object đó Sau đó, nhấn phím E để chuyển sang chế độ thay đổi transform và nhấn phím R để chuyển sang chế độ thay đổi scale Tiếp theo, di chuột đến hình mũi tên theo chiều tương ứng và giữ kéo để điều chỉnh các thông số.
Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case Dữ liệu của game thay đổi theo hành động Điểm mở rộng Không có
Bảng 5.12 Đặc tả use-case “Chạy game”
Tên chức năng Chạy game
Tóm tắt Chạy game đã tạo trong cửa sổ Game viewport
1 Người dùng nhấn nút Play trong cửa sổ Game viewport
2 Nút Play bị vô hiệu hoá, nút Stop hoạt động Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang không chạy
Trạng thái hệ thống sau khi thực hiện use-case
Trong Game viewport, trò chơi hoạt động và trạng thái được cập nhật theo thời gian thực theo thiết kế Các cửa sổ không được chỉnh sửa trong quá trình chạy game sẽ được ẩn đi, và không có điểm mở rộng nào được cung cấp.
Bảng 5.13 Đặc tả use-case “Dừng game”
Tên chức năng Dừng game
Tóm tắt Dừng game đang chạy trong cửa sổ Game viewport
1 Người dùng nhấn nút Stop trong cửa sổ Game viewport
2 Nút Stop bị vô hiệu, nút Play hoạt động Dòng sự kiện khác Không có
Trạng thái hệ thống trước khi thực thiện use-case Điều kiện: Cửa sổ Game viewport đang chạy
Trạng thái hệ thống sau khi thực hiện use-case
Game đang chạy trong Game viewport dừng,, các cửa sổ không được chỉnh sửa trong quá trình game chạy được hiển thị trở lại Điểm mở rộng Không có