Chương I đã giới thiệu chung về ngành game, giới thiệu mục đích và giới hạn của đề tài, hướng dẫn cách chơi, kết quả đạt được của đề tài và cấu trúc luận văn trên. Chương II giới thiệu cơ bản về Unity Engine và lí do tại sao chọn Unity Engine, đồng thời giới thiệu các khái niệm thường sử dụng trong phát triển game nói chung và Unity nói riêng. Chương III trình bày sơ đồ tổng quan thiết kế hệ thống của trò chơi. Trình bày các lớp chính của hệ thống trò chơi.
Chương IV giải thích về quy trình xây dựng trò chơi và các giải thuật được sử dụng. Chương V là các kết luận đồng thời nêu ra hướng phát triển của trò chơi. 7 CHƯƠNG 2: KIẾN THỨC CƠ BẢN 2.1 Unity Engine Các trò chơi được hiện thực bằng nhiều framework hay engine khác nhau, tùy thuộc vào nhu cầu mà nhà phát triển game lựa chọn cho phù hợp (đồ họa, hiệu năng, tốc độ xử lí, thời gian phát triển trò chơi,…). Sinh viên sẽ nêu rõ lí do tại sao lại lựa chọn Unity Engine.
Một số framework/engine chuyên dùng cho game 2D như Cocos2D-x, GameMaker Studio, hay cả 2D/3D như Unity, Unreal Engine, Godot Engine… Vì đề tài tập trung vào phần 3D nên ta sẽ chọn một trong các game engine phổ biến sau: Unity, Unreal Engine và Godot Engine. So sánh: - Godot Engine: Ra mắt lần đầu năm 2014 bởi Juan Linietsky và Ariel Manzur. Là một game engine mã nguồn mở, chạy được trên đa nền tảng (Window/Linux/MacOS) và hoàn toàn miễn phí. Godot hỗ trợ nhiều ngôn ngữ lập trình khác nhau như C++, C# và GDScript do chính Godot team tự phát triển.
Hiệu năng mượt mà, phù hợp với phát triển game 2D. Nó cũng hỗ trợ phát triển game đa nền tảng nhưng còn ít. Điểm yếu: Engine hỗ trợ phát triển game 3D với PBR (Physically based rendering) với shader tùy chỉnh, post-processing nhưng còn nhiều hạn chế, hiệu năng kém hơn so với Unity và Unreal. Cộng dồng Godot còn nhỏ, tài liệu ít.
8 Hình 6: Cửa sổ editor của Godot Engine - Unity Engine: Là game engine đa nền tản phát triển bởi Unity Technologies, ra mắt lần đầu năm 2005. Các chức năng của Unity chủ yếu được viết bằng C# (hai ngôn ngữ lập trình cũ cũng được hỗ trợ là Boo và UnityScript đã bị loại bỏ vào các phiên bản Unity mới). Unity chạy được trên nhiều nền tảng, đồng thời hỗ trợ xây dựng game trên nhiều hệ máy khác nhau: bao gồm cả PC (Windows/ Mac OS), Mobile (iOS, Android…) và hệ máy console, VR/AR. Hình 7: Các nền tảng được Unity hỗ trợ Miễn phí cho người dùng cá nhân, ngoài ra còn bản trả phí cho người dùng/ studio có thu nhập trên 100000$ nhưng đi kèm với phúc lợi hỗ trợ khác nhau cùng nhiều tính năng mới.
9 Unity xây dựng một thư viện rộng lớn gọi là Unity Asset Store, giúp người dùng có thể chia sẻ, mua bán các công cụ, mô hình 3D, âm thanh,… để giúp quá trình phát triển game nhanh hơn. Ngoài những tài liệu hướng dẫn sử dụng Unity cơ bản, Unity còn có các khóa đào tạo trên trang chủ Unity Learn với chất lượng cao và hoàn toàn miễn phí. Cộng đồng rộng lớn có thể chia sẻ, giúp đỡ để phát triển game tốt hơn.Không những có thể phát triển game, Unity còn được dùng để làm phim, hoạt hình, ứng dụng mô phỏng dùng trong học tập hay dùng trong kiến trúc và xây dựng nhờ các bộ công cụ về camera như Cinemachine, Timeline hay mô phỏng vật lí tốt. Unity được sử dụng bởi nhiều công ti lớn như Ubisoft, Square Enix,.
đồng thời cũng là lựa chọn của các nhà phát triển game độc lập. Hình 8: Cảnh trong Adam – phim của Unity Điểm yếu: Unity khá nặng, các file thực thi từ game cũng có dung lượng không hề nhỏ. So sánh về mặt đồ họa, Unity làm tốt hơn Godot rất nhiều; Unity hỗ trợ nhiều đường ống đồ họa khác nhau như HDRP, URP; hỗ trợ viết shader cho lập trình viên với Shaderlab đồng thời có các công cụ cho các họa sĩ 3D như Shader Graph hay Visual Effect Graph. So với Unreal, Unity cần bỏ nhiều thời gian và công sức hơn để đạt được đồ họa như Unreal.
Tuy nhiên tiềm năng của Unity là không giới hạn. Một số game nổi tiếng như Cuphead (Studio MDHR), Ori and the Blind Forest (Moon Studios), Subnautica (Unknown Worlds Entertainment), Pokemon Go (Niantic)… 10 - Unreal Engine: Hình 9: Cửa sổ Editor của Unreal Engine 4 Được phát triển bởi Epic Games, phiên bản đầu tiên ra mắt vào năm 1998 và phổ biến nhất là Unreal Engine 4 (UE4) vào năm 2014 đến nay. Phiên bản UE5 dự kiến ra mắt vào cuối năm 2021. Unreal Engine cũng được sử dụng miễn phí.
Tuy nhiên Epic Games thu phí 5% doanh thu nếu game của bạn đạt trên 1 triệu đô; phí này được bỏ qua nếu game được đăng kí bán trên Epic Games Store. Các chức năng của Unreal Engine 4 được viết bằng C++. Unreal đồng thời hỗ trợ Blueprints hay Blueprints Visual Scripting mà người dùng không cần phải có kiến thức lập trình. Unreal cũng có thể chạy được trên nhiều nên tảng, đồng thời hỗ trợ xây dựng game trên trên PC, Mobile và hệ máy console, VR/AR, tương tự Unity.
Unreal Marketplace cũng là nơi người dùng mua bán các dự án mẫu, blueprints có sẵn,… tương tự Asset Store. Ngoài ra Unreal cũng có những video giới thiệu tính năng giải đáp thắc mắc trên youtube của mình. Cộng đồng thành viên lớn hỗ trợ lẫn nhau. Unreal Engine cũng hỗ trợ dùng trong kiến trúc, làm phim như Unity.
Hiện tại Unreal Engine 5 cũng đang trong quá trình phát triển và hoàn thiện. 11 Hình 10: STAR WARS Tech Demo trên Unreal Engine 4 Tuy nhiên ban đầu Unreal Engine 4 xây dựng cho mục đích phát triển các game AAA. Từ đó họ mở rộng hơn và hướng đến các nhà phát triển game độc lập hay các studio nhỏ có kinh phí thấp. Điều này ngược lại với Unity vốn là sự lựa chọn tốt hơn cho nhóm người dùng này.
Một số tựa game nổi tiếng được xây dựng từ Unreal Engine 4 như: Final Fantasy VII (REMAKE) (Square Enix), Fornite (Epic Games),… Unity Engine và Unreal Engine có sự cạnh tranh mạnh mẽ về các tính năng, cộng đồng phát triển hay tài liệu nghiên cứu. Tuy nhiên Unity được ưa chuộng cho các trò chơi độc lập kinh phí thấp hơn. Đồng thời, Unity cũng được lựa chọn nhiều hơn tại thị trường Việt Nam. Vì vậy, đây là sự lựa chọn tốt để học tập, nghiên cứu và phát triển game.
12 Tổng kết các tiêu chí đánh giá lựa chọn của sinh viên, ngoài các tính năng mà các engine trên đều cung cấp, ta có: Tiêu chí Godot Engine Unity Engine Unreal Engine Phổ biến với các Phổ biến với nhiều Xuất hiện muộn, độ công ti, studio vừa và công ti lớn trên thế Độ phổ biến phổ biến còn thấp, nhỏ, nhà phát triển giới, không phổ biến nhất là ở Việt Nam game độc lập, rất phổ nhiều ở Việt Nam biến ở Việt Nam 5% chi phí với doanh Miễn phí cho studio thu trên 1 triệu $. nhỏ với doanh thu Miễn phí với trò chơi Chi phí Miễn phí dưới 100. phát hành trên Epic Bản trả phí có hỗ trợ Games (độc quyền nhiều tính năng hơn phân phối) Tài liệu hướng dẫn Tài liệu hướng dẫn nhiều và phổ biến cả khá đa dạng tuy tiếng Việt và tiếng nhiên chủ yếu là Dễ tiếp cận như tài Anh. Có trang Unity tiếng Anh.
Mục tiêu Tài liệu hướng dẫn liệu hướng dẫn còn Learn hỗ trợ cho ban đầu vốn không hạn chế người mới tiếp cận nhắm tới các nhà Unity nói riêng và phát triển game độc ngành phát triển lập. game nói chung Hỗ trợ tốt cả game 2D và 3D tuy nhiên Chủ yếu là game 3D Chủ yếu là game 2D, Tiêu chí hướng tới khó dễ dàng đạt được với chi phí phát triển Hỗ trợ game 3D đồ họa xuất sắc so cao (AAA) với Unreal Bảng 1: So sánh các Game Engine Sinh viên, với việc phát triển đề tài luận văn theo hơi hướng của các nhà phát triển game độc lập, không có chi phí cao, lựa chọn Unity Engine là phù hợp về mục tiêu đề tài, đồng thời là nền tảng cho công việc sau này của sinh viên.2 Các khái niệm trong phát triển game Để dễ dàng hơn trong việc giới thiệu các phần sau trong luận văn, sinh viên sẽ nói về một số khái niệm chính trong dùng trong phát triển game so với phát triển phần mềm khác: - Các đối tượng trong game được gọi là các Game Object. Các thành phần được gắn vào các đối tương này gọi là các Component. Mọi script kế thừa từ lớp MonoBehaviour của Unity sẽ có thể trở thành component để có thể gắn vào đối tượng nhằm thực hiện các tính năng theo yêu cầu.
Game Object luôn bao gồm các component cơ bản như Transform chứa 3 thông tin chính: vị trí (Position), góc quay (Rotation) và tỉ lệ (Scale); đây là component quan trọng nhất để xác định vị trí của đối tượng trong game cũng như để thực hiện các phép biến đổi đối tượng, không thể xóa đi. - Để đối tượng có thể trích xuất hình ảnh trong game, Các đối tượng phải có các component thừa kế từ Renderer như Sprite Renderer (dùng cho sprite – các đối tượng hình học 2D) hay Mesh Renderer (dùng cho các đối tượng sử dụng lưới mô hình 3D). - Scene hay cảnh được xem như một không gian game chứa các Game Object. Việc chia các scene giúp việc quản lí dễ dàng hơn.
Chẳng hạn như tách biệt màn chơi và màn hình khi người chơi vào game, không cần phải load mọi Game Object mà chỉ khi chơi mới cần thiết. Trong trò chơi sinh viên phân ra scene gồm màn hình chính, scene ở chế độ chơi đơn và scene ở chế độ chơi mạng. - Camera để kết xuất hình ảnh trong trò chơi lên màn hình máy tính, liên quan tới các đối tượng với Renderer đã đề cập ở trên. Một trò chơi có thể có nhiều camera để thực hiện các chức năng khác nhau.
Sinh viên sẽ đề cập chi tiết ở ở chương IV mục Camera. 14 CHƯƠNG 3: KIẾN TRÚC TRÒ CHƠI Hình 11: Kiến trúc chính của trò chơi 15 Hình 12: Class Diagram tổng quát 16 3.1 Hệ thống quản lí chính của game Hệ thống chính của game (Game Systems) quản lí hầu hết các yếu tố trong game, bao gồm Manager quản lí toàn bộ các tài nguyên nói chung và GameplayManager quản lí các hoạt động trong scene khi bắt đầu. Manager bao gồm các class chính thể hiện ở hình 13: - GameAssets quản lí các tệp tài nguyên dùng trong game như tệp tin âm thanh. - AudioManager quản lí các cài đặt như âm lượng, bật tắt âm thanh hiệu ứng hoặc nhạc nền.
File âm thanh được lấy từ GameAssets.