GIỚI THIỆU CHUNG
Tổng quan đề tài
Tên đề tài: Xây dựng game 2D platform với unity
Nền tảng công nghệ: Unity Engine
Môi trường phát triển: Desktop - Windows 10
Lý do chọn đề tài
Hiện nay, video game đã trở thành một trong những hình thức giải trí ưa chuộng nhất của giới trẻ Với sự phổ biến của máy tính cá nhân và các hệ thống phân phối game, các sản phẩm từ những nhóm phát triển nhỏ ngày càng dễ dàng tiếp cận người chơi Nhằm đáp ứng nhu cầu giải trí đa dạng, nhóm đã quyết định phát triển một game 2D nhỏ.
Đối tượng sử dụng
Tất cả người chơi có độ tuổi từ 7 tuổi trở lên.
Phạm vi nghiên cứu
Phạm vi môi trường: Ứng dụng máy tính
Phạm vi thiết kế game : thể loại game platform
• Game 2D đơn màn chơi xuyên suốt
Nhân vật trong trò chơi được điều khiển bởi người chơi, có hệ thống di chuyển cơ bản bao gồm đi trái, đi phải và nhảy, cùng với khả năng chiến đấu đơn giản bằng cách nhấn chuột để tấn công.
• Nhiều enemy NPC (quái vật) tự di chuyển và hành động theo AI được cài đặt sẵn, phản ứng theo hành vi của người chơi
• Màn chơi được thiết kế thủ công, sử dụng asset có sẵn, với độ rộng thấp
• Một menu chính khi mở ứng dụng game lên và kết thúc game với các nút cơ bản
CƠ SỞ LÝ THUYẾT
Unity Engine
Unity is a versatile cross-platform game engine developed by Unity Technologies, initially announced and released in June 2005 at the Apple Worldwide Developers Conference as a game engine for Mac OSX.
Unity Engine đã mở rộng hỗ trợ nhiều nền tảng như desktop, mobile, console và Virtual Reality, đặc biệt phổ biến trên IOS và Android Công cụ này được xem là dễ sử dụng cho người mới bắt đầu và các nhà phát triển indie, cho phép tạo ra game 3D, 2D, mô phỏng tương tác và trải nghiệm khác Ngoài lĩnh vực trò chơi điện tử, Unity cũng được chấp nhận rộng rãi trong các ngành như phim, ô tô, kiến trúc, kỹ thuật và xây dựng.
Unity cho phép người dùng tạo game và trải nghiệm 2D và 3D, cung cấp một API lập trình chính bằng C# thông qua Mono, hỗ trợ cho cả trình soạn thảo Unity editor và các game Trước đây, engine cũng hỗ trợ ngôn ngữ Boo, nhưng đã ngừng sử dụng từ phiên bản Unity 5 UnityScript, một biến thể của JavaScript, cũng đã bị loại bỏ vào tháng 8 năm 2017, chuyển hoàn toàn sang sử dụng C#.
In 2D games, Unity enables the import of sprites and advanced 2D world rendering For 3D games, it allows for the specification of texture compression techniques, mipmaps, and resolution settings tailored for each supported platform Additionally, Unity offers support for bump mapping, reflection mapping, parallax mapping, screen space ambient occlusion (SSAO), dynamic shadows using shadow maps, render-to-texture capabilities, and full-screen post-processing effects.
C#
C# (C sharp) là một ngôn ngữ lập trình hiện đại, đơn giản và hướng đối tượng, được phát triển bởi Microsoft vào năm 2000 Ngôn ngữ này được xây dựng dựa trên nền tảng của hai ngôn ngữ lập trình mạnh mẽ là C++ và Java.
Trong các ứng dụng Windows truyền thống, mã nguồn được biên dịch trực tiếp thành mã thực thi của hệ điều hành Đối với các ứng dụng sử dụng NET Framework, mã nguồn (C#, VB.NET) được chuyển đổi thành mã ngôn ngữ trung gian MSIL (Microsoft Intermediate Language) và sau đó được biên dịch bởi Common Language Runtime (CLR) để trở thành mã thực thi của hệ điều hành.
C# combined with the robust support of the NET Framework simplifies the development of Windows Forms and WPF applications, as well as game development, web applications, and mobile applications.
Microsoft Visual Studio
Microsoft Visual Studio là một môi trường phát triển tích hợp (IDE) nổi tiếng, được biết đến như "trình soạn thảo mã nhiều người sử dụng nhất thế giới" Nó chủ yếu được sử dụng để lập trình các ngôn ngữ C++ và C#.
Visual Studio is a powerful tool for developing computer programs for Microsoft Windows, as well as for creating websites, web applications, and web services It leverages Microsoft's software development platforms, including Windows API, Windows Forms, Windows Presentation Foundation, Windows Store, and Microsoft Silverlight The IDE can generate both machine code and managed code, making it versatile for various programming needs.
Visual Studio hỗ trợ nhiều ngôn ngữ lập trình, cho phép biên tập mã và gỡ lỗi cho hầu hết các ngôn ngữ Các ngôn ngữ tích hợp bao gồm C, C++, C++/CLI, VB.NET, C#, và F# Ngoài ra, Visual Studio cũng hỗ trợ các ngôn ngữ khác như J++, J#, Python, và Ruby thông qua dịch vụ cài đặt riêng Nó còn hỗ trợ XML/XSLT, HTML/XHTML, JavaScript, và CSS.
Microsoft offers free versions of Visual Studio, with "Express" available for versions 2013 and earlier, and "Community" for versions 2015 and later.
GitHub
GitHub là nền tảng quản lý dự án và phiên bản mã nguồn, hoạt động như mạng xã hội cho lập trình viên Người dùng có thể sao chép mã nguồn từ các kho chứa (repository) và tạo tài khoản để quản lý kho chứa cá nhân, từ đó hỗ trợ quá trình phát triển phần mềm hiệu quả.
GitHub offers all the essential features of Git while enhancing them with social networking capabilities that facilitate developer interaction It includes tools like feeds, followers, and a network graph, enabling developers to learn from each other's experiences through commit history.
GIỚI THIỆU VỀ PLATFORM GAME
Khái niệm platform game
Khái niệm game nhập vai (RPG) đã trở nên quen thuộc với nhiều người và đại diện cho nhiều dòng game khác nhau RPG không chỉ là một thể loại cụ thể mà còn là yếu tố quan trọng trong nhiều trò chơi Một trong những nhánh của RPG là game platformer, kết hợp với các yếu tố của game hành động, tuân theo những quy luật chính riêng.
• Nhập vai vào nhân vật chính, có cốt truyện, bối cảnh xảy ra
Thế giới của game platformer thường bị chi phối bởi các định luật vật lý như trọng lực và va chạm cơ học, tạo nên sự khác biệt so với các trò chơi top-down (góc nhìn từ trên xuống) đơn giản hơn.
Nhân vật chính sở hữu kỹ năng nhảy, di chuyển và chạy, mô phỏng các thao tác thực tế để vượt qua các địa hình khác nhau Những chuyển động này giúp người chơi chinh phục các thử thách trong game một cách linh hoạt và thú vị.
Một số game tiêu biểu
Khi nhắc đến thể loại game platformer, không thể không đề cập đến những tựa game kinh điển như Super Mario Bros và Castlevania, những trò chơi đã góp phần quan trọng trong việc định hình và phát triển thể loại này, đồng thời mở đường cho nhiều thể loại con xuất hiện sau này.
Trong trò chơi Mario, người chơi sẽ trải nghiệm yếu tố vật lý phong phú, với chuyển động của nhân vật được cải thiện nhờ gia tốc Mario không chỉ có khả năng đi và chạy mà còn có thể quay đầu khi đang di chuyển (skid) Khi nhảy, người chơi có thể điều chỉnh độ cao của cú nhảy, tạo ra sự linh hoạt trong gameplay Bên cạnh đó, câu chuyện hấp dẫn về việc nhập vai vào Mario để vượt qua các địa hình khó khăn (platform), sử dụng kỹ năng bay nhảy để tiêu diệt lũ Koopa và cứu công chúa, cũng là một phần quan trọng của trải nghiệm.
Một trong những game tiêu biểu của thể loại platformer là Castlevania, nổi bật với thiết kế bản đồ độc đáo Mặc dù chuyển động trong game đơn giản hơn Mario, nhưng Castlevania đã tạo ra dấu ấn lịch sử trong ngành game, góp phần hình thành dòng game mới mang tên Metroidvania, kết hợp các cơ chế từ Super Metroid.
• Super Metroid X mang đến cơ chế locks and keys
• Castlevania mang đến phong cách thiết kế map interconnection
Một số phong cách thiết kế
Có nhiều phong cách thiết kế cho game platformer, và bài báo này sẽ giới thiệu một số phong cách thiết kế phổ biến đã được nghiên cứu.
Một trong những phong cách thiết kế cổ điển trong game là xây dựng cốt truyện theo trình tự tuyến tính, nơi người chơi trải nghiệm một câu chuyện chính diễn ra theo thứ tự mà nhà phát triển đã định sẵn Ví dụ điển hình là trò chơi Mario, trong đó nhân vật Mario phải vượt qua nhiều thử thách để giải cứu công chúa Toadstool Đặc trưng của các phiên bản Mario trước đây là thiết kế bản đồ cho phép Mario di chuyển từ trái sang phải để hoàn thành màn chơi, điều này làm nổi bật tính chất tuyến tính trong thiết kế game.
Khác với thiết kế tuyến tính, thiết kế phi tuyến tính cho phép cốt truyện và gameplay rẽ nhánh, mang đến cho người chơi nhiều lựa chọn hơn Điều này không chỉ tạo ra sự phong phú trong trải nghiệm mà còn làm cho việc triển khai trở nên phức tạp hơn.
Metroidvania là một thể loại con trong dòng game phiêu lưu hành động 2D, nổi bật với tính phi tuyến tính và cơ chế khám phá dựa trên kỹ năng và chìa khóa.
Metroidvania là một nhánh thể loại game, được hình thành từ sự kết hợp của hai tựa game nổi tiếng là Metroid và Castlevania Cả hai trò chơi này đều thuộc thể loại action-adventure, nhưng với thiết kế độc đáo và ấn tượng, chúng đã tạo ra một phong cách riêng biệt, được công nhận và trở thành nguồn cảm hứng cho nhiều trò chơi khác.
Phân rã: Metroid và Castlevania
Metroid hay với tên đầy đủ của game làm nên dòng Metroid là: Super
Yếu tố cốt lõi trong thiết kế dòng game Metroid là cơ chế khóa và chìa khóa, với bản đồ được thiết kế nhằm hỗ trợ cho cơ chế này.
Cơ chế locks and keys gồm các yếu tố chính sau:
Bản đồ trong Metroid 1994 tiết lộ cho người chơi một số lối đi, nhưng những lối đi này thường bị chặn bởi các chướng ngại vật, vị trí quá cao không thể nhảy tới hoặc khóa cửa Những chướng ngại này được gọi là cửa.
Khi người chơi gặp khó khăn trong việc vượt qua cửa ải, họ sẽ nhận ra rằng mình đang thiếu những yếu tố quan trọng như kỹ năng hoặc vật phẩm Những yếu tố này được coi là chìa khóa để tiến xa hơn trong trò chơi.
Trong game Hollow Knight, có những khu vực mà người chơi không thể chạm tới bậc khoanh đỏ, bất kể nỗ lực nhảy như thế nào.
Castlevania, officially known as Castlevania: Symphony of the Night, is a standout title in the Castlevania series that marked the franchise's evolution with its distinctive design.
Hệ thống map của Castlevania: Symphony of the Night (từ giờ gọi tắt là Castlevania) gồm các đặc điểm:
• Một mạng lưới các khu vực được liên thông với nhau (được gọi bằng thuật ngữ Interconnected)
• Hệ thống map khép kín
• Mỗi khu vực được thiết kế sao cho nó liên thông với ít nhất 2 khu vực liền kề
• Có một khu vực trung tâm: ngã rẽ chung cho phép người chơi từ đây có thể rẽ sang nhiều khu vực khác
Hệ thống map với các đặc điểm như trên đảm bảo được tính chất phi tuyến tính trong trải nghiệm khám phá map của người chơi
Trong Castlevania, người chơi được hỗ trợ bởi cơ chế Teleport, cho phép họ nhanh chóng dịch chuyển đến những khu vực đã khám phá mà không cần phải quay lại đường cũ Điều này giúp tiết kiệm thời gian và giữ cho trải nghiệm khám phá luôn thú vị.
TỔNG QUAN ỨNG DỤNG
Ý tưởng game
Trong trò chơi, người chơi sẽ hóa thân thành một linh hồn bảo vệ khu rừng xanh tươi, nơi mà linh hồn đã sinh sống từ lâu Tuy nhiên, một ngày, sự bình yên của khu rừng bị xáo trộn khi những nguyên tố cơ bản bị đánh cắp bởi các thế lực đen tối.
Người chơi có nhiệm vụ khôi phục các nguyên tố về vị trí ban đầu bằng cách đánh bại những thế lực đen tối Trên hành trình, họ sẽ phải chiến đấu với nhiều loại quái vật hung dữ, từ bọ cạp khổng lồ đến những con rồng mạnh mẽ.
Người chơi sẽ thực hiện nhiều nhiệm vụ đa dạng nhằm đánh bại các thế lực đen tối để khôi phục nguyên tố thiết yếu cho khu rừng Khi hoàn thành các mục tiêu, người chơi sẽ nhận được năng lượng và kinh nghiệm, giúp cải thiện kỹ năng, mở khóa trang bị mới và phát triển linh hồn của mình.
Trong quá trình phục hồi khu rừng, người chơi sẽ khám phá những khu rừng mới, tìm kiếm trang bị và mở khóa kỹ năng mới để chiến đấu với các thế lực đen tối ngày càng mạnh.
Khi người chơi đánh bại tất cả thế lực đen tối và khôi phục các nguyên tố cần thiết, khu rừng sẽ trở lại trạng thái bình thường Linh hồn của người chơi sẽ tiếp tục bảo vệ khu rừng cùng những sinh vật sống trong đó.
Tính năng
- Player có thể tấn công enemy và ngược lại
- Đối với các vòng Boss thì sẽ có vòng lặp để Player đánh với boss đến khi thắng
- Boss và một số enemy đặc biệt có tung ra các đợt tấn công skill
- Player có được xây dựng với các kỹ năng giúp vượt địa hình, tương tác với môi trường
- Player có các khả năng như lướt để thu hẹp khoảng cách với Enemy, double jump để vượt địa hình
Khi người chơi bị tấn công, họ sẽ có một khoảng thời gian bất tử để tránh việc bị va chạm liên tục với kẻ thù hoặc các vật thể gây sát thương, giúp ngăn chặn tình huống chết ngay lập tức.
- Enemy được áp dụng các thuật toán để thông minh hơn, có thể rớt vật phẩm khi bị tiêu diệt
- Player có thể lượm các vật phẩm để tăng thông số nhân vật
- Tính năng Pause game, Save game, Save settings.
Giới thiệu về các gameObject
Camera trong Unity Engine giúp kiểm soát hình ảnh mà người chơi thấy trong game Đối tượng MainCamera có nhiệm vụ theo dõi đối tượng Player, đảm bảo rằng màn hình luôn hiển thị hành động của nhân vật chính cùng với môi trường xung quanh.
Nhân vật chính trong game là đối tượng mà người chơi điều khiển, thực hiện các hành động theo quy tắc của game Người chơi có thể thực hiện mọi tính năng được đề cập, và hệ thống logic của game xoay quanh đối tượng Player Trạng thái game được cập nhật dựa trên đối tượng này, trong khi Player object tương tác với thế giới game thông qua các file script PlayerController.cs.
Slime là kẻ thù có khả năng tấn công cả ở khoảng cách gần và xa Chúng sẽ đuổi theo người chơi, và khi đến gần, slime sẽ nhảy lên cao và đáp xuống vị trí của người chơi để thực hiện đòn tấn công.
Bug là enemy tấn công cận chiến Chúng tiếp cận enemy bằng cách húc thẳng về phía trước với tốc độ nhanh
FlyEye là một kẻ thù bay có tầm tấn công rộng, hoạt động cố định trong một khu vực nhất định Khi người chơi bước vào phạm vi tấn công, FlyEye sẽ bắn ra FlyProjectile để tấn công Nếu người chơi tiến lại gần, FlyEye có thể lướt nhanh qua người chơi để tấn công Mặc dù FlyEye sở hữu khả năng tấn công mạnh mẽ và khả năng di chuyển tự do trên không, nhưng chúng lại có lượng máu khá yếu.
RockSlug là một kẻ thù hiền lành, di chuyển chậm và đứng yên tại một vị trí cố định Mặc dù chúng không tấn công người chơi, nhưng nếu người chơi chạm vào chúng, sẽ bị gây sát thương RockSlug thường xuất hiện ở những khu vực có địa hình phức tạp, nhằm ngăn cản người chơi vượt qua Với lượng máu cao và khả năng phòng thủ mạnh, RockSlug là một thử thách đáng chú ý trong game.
Earth Ruin Guard là một robot cực kỳ nguy hiểm, đại diện cho nguyên tố Đất với nguồn năng lượng vô tận, cho phép nó thực hiện các chiêu thức liên tục Với sức sát thương và phòng thủ ấn tượng, Earth Ruin Guard sở hữu bốn chiêu thức tấn công người chơi, tạo ra những thách thức lớn trong trận chiến.
- Missile Attack: Earth ruin guard bắn ra 2 FlyProjectile để tấn công Player từ xa
- Spin Around: Earth ruin guard xoay 2 cánh tay đã được kéo dài xung quanh và di chuyển đuổi theo Player
- Straight hit: Earth ruin guard chạy nhanh đấm thẳng về phía Player
- Meteorite fall: Earth ruin guard ném lõi nguyên tố Đất (Earth) lên trời và giáng liên tục 2 đợt đạn FlyProjectile xuống dưới
PlayerProjectile là đạn của người chơi bắn ra gây sát thương lên các Enemy
FlyProjectile là đạn của Enemy bán ra gây sát thương lên Player
Non-Moving Objects là những đối tượng môi trường không thể di chuyển, không nhận sát thương và không bị phá hủy
Hệ thống xử lí các sự kiện của GameScene
Camera object do Unity Engine cung cấp, dùng để quan sát màn hình chính
Nơi vẽ Menu chính, chứa các object con là:
• BackGround: vẽ hình nền cho màn hình Menu chính
• Title: vẽ tựa đề Soul of Gardian of forest cho màn hình Menu chính
• Play_Button: bắt đầu trò chơi khi người chơi nhấp vào (chuyển sang màn
• hình GameScene để bắt đầu trò chơi)
• Options_Button: chỉnh sửa các cài đặt của trò chơi
• Quit_Button: Thoát trò chơi
• Info_Button: Xem thông tin game
Hệ thống xử lí các sự kiện của MenuScene
ĐẶC TẢ USE CASE
Sơ đồ use case
Hình 5.1 Sơ đồ use case Player
Hình 5.2 Sơ đồ use case Slime
Hình 5.3 Sơ đồ use case RockBug
Hình 5.4 Sơ đồ use case FlyEye
Hình 5.5 Sơ đồ use case RockSlug
Hình 5.6 Sơ đồ use case Earth ruin guard
Danh sách Actor
Nhân vật chính trong game, do người chơi điều khiển, được xem như là đại diện cho người chơi trong các tình huống sử dụng Hành động của người chơi có ảnh hưởng trực tiếp đến diễn biến của trò chơi, tương tự như cách mà nhân vật tương tác với thế giới xung quanh.
2 Slime Là enemy tấn công tầm trung, tấn công player bằng cách nhảy lên cao và rơi xuống Có máu trung bình và tốc độ di chuyển chậm
3 RockBug Là enemy cận chiến, tấn công bắng cách húc thẳng vào player Có máu trung bình và tốc độ di chuyển nhanh
FlyEye là một kẻ thù tấn công tầm xa, có khả năng bắn FlyProjectile vào đối thủ hoặc lướt qua người chơi Với lượng máu thấp và tốc độ di chuyển nhanh, FlyEye trở thành một mối đe dọa đáng gờm trong trận chiến.
5 RockSlug Là enemy hòa bình, không tấn công enemy, chỉ gây sát thương khi player cố tình va chạm vào Có máu cao và di chuyển chậm
Earth Ruin Guard là một loại Boss tập trung vào tấn công sát thương, với các chiêu thức đa dạng như đánh thường, tấn công tên lửa, húc, tấn công xoay và giáng thiên thạch Mặc dù có lượng máu cao, độ bền bỉ và sức sát thương lớn, nhưng tốc độ di chuyển của nó lại chậm.
7 Main camera Camera quan sát người chơi
8 Event Manager Hệ thống quản lí event chính, hoạt động dựa trên logic game do người phát triển lập trình
Danh sách use case
STT Use case Mô tả
1 Play Game Use case bắt đầu khi người chơi nhấn vào nút “Play” ở màn hình Main Menu và tải file save game
2 Exit Game Use case bắt đầu khi người chơi nhấn vào nút “Play” ở màn hình Main Menu
3 Pause Game Use case bắt đầu khi người chơi nhấn vào nút “Esc” trên bàn phím
5 Restart Game Use case bắt đầu khi Player chết
6 Exit to Menu Use case bắt đầu khi người chơi nhấn vào nút “Exit to Menu” trên Pause Menu
7 Move Use case bắt đầu khi người chơi nhấn một hoặc nhiều nút di chuyển “A,W,D,Space” trong GamePlayScene
8 Dash Use case bắt đầu khi người chơi nhấn “Ctrl” trong
9 Attack Use case bắt đầu khi người chơi nhấn “left mouse” trong GamePlayScene
10 UpdateHp Use case bắt đầu khi player hoặc enemy bị tấn công và nhận sát thương
11 Take Damaged Use case bắt đầu khi player hoặc enemy nhận sát thương từ các cuộc tấn công như va chạm hay bị bắn trúng,…
12 Check Hp Use case bắt đầu khi player hoặc enemy bị tấn công và nhận sát thương để kiểm tra xem use case Dead có thể chạy hay không?
13 Dead Use case bắt đầu khi player hoặc enemy nhận sát thương và lượng máu về 0
14 Buff Use case bắt đầu khi player nhặt các item rơi ra khi đánh bại enemy
15 Interact with item Use case bắt đầu khi player chạm vào các item rơi ra khi đánh bại enemy
16 Teleport Use case bắt đầu khi người chơi nhấn vào các điểm dịch chuyển trên map
17 Check map Use case bắt đầu khi người chơi nhấn vào phím “M” trên bàn phím
Trong trò chơi, 18 IDLE sử dụng các tình huống khi người chơi hoặc kẻ thù cần chuyển đổi trạng thái hoặc khởi động một cuộc tấn công Trong những khoảnh khắc này, mọi hành động khác sẽ bị tạm dừng.
Use case 19 SeekPlayer bắt đầu khi xác định vị trí của kẻ thù để dẫn đến vị trí hiện tại của người chơi Use case này hoạt động liên tục trong suốt thời gian tồn tại của kẻ thù.
20 Walk Use case bắt đầu khi AI chọn điểm đến cho enemy di chuyển đến, giúp enemy đến gần người chơi và tiến hành tấn công
21 FlyEye-Fly Use case bắt đầu khi Ai chọn điểm bay đến cho enemy FlyEye giúp FlyEye di chuyển trên không trung và tấn công player từ nhiều phía
22 MeleeAttack Use case bắt đầu ki Player chạm vào phạm vi tấn công của enemy và Enemy sẽ thực hiện tấn công cận chiến đối với Player
23 RangeAttack Use case bắt đầu khi Player ở trong tầm tấn công xa và ngoài tầm tấn công cận chiến của FlyEye
24 DashAttack Use case bắt đầu khi Player ở trong tầm tấn công cận chiến của FlyEye
25 AttackSkill Use case bắt đầu khi Player nằm trong phạm vi tấn công chiêu thức và chiêu thức của enemy trong trạng thái sẵn sàng
26 Appear Use case bắt đầu khi Player vào phòng Boss
27 MissileAttack Use case bắt đầu khi Player vào trong phạm tấn công và chiêu thức MissleAttack ở trong trạng thái sẵn sàng
28 SpinAround Use case bắt đầu khi Player vào trong phạm tấn công và chiêu thức SpinAround ở trong trạng thái sẵn sàng
29 StraightHit Use case bắt đầu khi Player vào trong phạm tấn công và chiêu thức StraightHit ở trong trạng thái sẵn sàng
30 MeteoriteFall Use case bắt đầu khi Player vào trong phạm tấn công và chiêu thức MeteoriteFall ở trong trạng thái sẵn sàng
Bảng 5.2 Danh sách use case
Mô tả chi tiết use case
Mô tả Bắt đầu game và Tải dữ liệu từ file save game
Luồng sự kiện Luồng chính 1 Người chơi nhấn vào nút “Play” ở
2 Hệ thống load dữ liệu từ file save game
3 Chuyển sang GamePlayScene đã lưu từ trước, người chơi bắt đầu chơi game
Yêu cầu đặc biệt Không Điều kiện trước - Game đang mở
- Người chơi đang ở màn hình Main Menu Điều kiện sau - Người chơi chơi game
Bảng 5.3 Đặc tả use case Play game
Luồng sự kiện Luồng chính 1 Người chơi nhấn nút “Exit Game” ở Main Menu hoặc nút “Quit Game” ở Pause Menu
2 Game tắt Luồng phụ Không
Yêu cầu đặc biệt Không Điều kiện trước - Game đang hoạt động Điều kiện sau - Ứng dụng bị tắt
Bảng 5.4 Đặc tả use case Exit game
Mô tả Tạm dừng game
Luồng sự kiện Luồng chính 1 Người chơi nhấn phím “Esc” để pause game
2 Người chơi nhấn phím “Esc” lần nữa để tiếp tục game
Yêu cầu đặc biệt Không Điều kiện trước - Player vẫn còn sống Điều kiện sau - Game bị tạm dừng
Bảng 5.5 Đặc tả use case Pause game
Mô tả Lưu trạng thái game và settings game
Luồng sự kiện Luồng chính 1 Người chơi nhấn nút thoát game
2 Lưu game vào file sau đó thoát chương trình
Yêu cầu đặc biệt Không Điều kiện trước - Game vẫn hoạt động Điều kiện sau - Game bị tạm dừng
Bảng 5.6 Đặc tả use case Save game
Mô tả Lưu trạng thái game và settings game
Luồng sự kiện Luồng chính 1 Player ở GamePlayScene và chiến đấu với các enemy và khiến máu trở về 0
2 Player quay lại địa điểm lưu game gần nhất
Yêu cầu đặc biệt không có điều kiện trước, game vẫn hoạt động bình thường Sau khi hoàn thành, người chơi cần quay lại địa điểm lưu game gần nhất và xóa tất cả buff đã kiếm được.
Bảng 5.7 Đặc tả use case Restart game
Mô tả Game chuyển sang MainMenuScene
Luồng sự kiện Luồng chính 1 Người chơi nhấn phím “Erc” ở
GamePlayScene để hiện lên Pause Menu
2 Người chơi nhấn vào nút “Exit to Menu”
3 Game chuyển về MainMenuScene Luồng phụ Không
Để đáp ứng yêu cầu đặc biệt trong game, người chơi cần lưu ý rằng game vẫn tiếp tục hoạt động Sau khi hoàn thành điều kiện, người chơi phải quay lại địa điểm lưu game gần nhất và xóa tất cả buff đã kiếm được.
Bảng 5.8 Đặc tả use case Exit to menu
Mô tả Người chơi di chuyển nhân vật
Luồng sự kiện Luồng chính 1 Người chơi nhấn các phím “AD” hoặc các phím trái phải để di chuyển nhân vật di chuyển, nhấn phím “Space” để nhảy
2 Nhân vật bắt đầu di chuyển theo đúng hướng người chơi mong muốn
Trong trò chơi, luồng phụ không yêu cầu đặc biệt nào, tuy nhiên, hướng di chuyển mà người chơi chỉ định phải không có địa hình cản trở Điều kiện tiên quyết là game phải đang ở trong GamePlayScene, và sau khi thực hiện, vận tốc của đối tượng người chơi sẽ thay đổi.
Bảng 5.9 Đặc tả use case Move
Mô tả Người chơi điều khiển nhân vật lướt theo hướng chỉ định
Luồng sự kiện Luồng chính 1 Người chơi nhấn phím “Ctrl” + phím chỉ định hướng di chuyển để di chuyển nhân vật
2 Nhân vật di chuyển nhanh theo hướng chỉ định
Trong trò chơi, yêu cầu di chuyển của người chơi phải đảm bảo không có địa hình cản trở Nếu có chướng ngại vật, hành động di chuyển sẽ bị ngăn chặn Điều kiện cần thiết là game phải đang trong GamePlayScene, và sau khi thực hiện, vận tốc của đối tượng người chơi sẽ tăng nhanh chóng.
Bảng 5.10 Đặc tả use case Dash
Mô tả Người chơi điều khiển nhân vật tấn công
Luồng sự kiện Luồng chính 1 Người chơi nhấn chuột trái
2 Nhân vật chuyển sang trạng thái tấn công và bắn ra PlayProjectile để gây sát thương lên enemy Luồng phụ Không
Trong trò chơi, yêu cầu đặc biệt là hướng di chuyển mà người chơi chỉ định phải không có địa hình cản trở; nếu không, nhân vật sẽ bị chặn lại Điều kiện tiên quyết là game phải đang ở trong GamePlayScene, và điều kiện kết thúc là nhân vật chuyển sang trạng thái tấn công.
Bảng 5.11 Đặc tả use case Attack
Mô tả Cập nhật Hp cho player hoặc enemy
Luồng sự kiện Luồng chính 1 Player hoặc enemy được khởi tạo
2 Trong quá trình hoạt động của player hoặc enemy khi nhận sát thương thì tiến hành cập nhật lượng máu hiện có
Luồng phụ Không Yêu cầu đặc biệt - Player không ở trạng thái bất tử hoặc chết
- Enemy không ở trạng thái chết Điều kiện trước - Game đang trong GamePlayScene Điều kiện sau - Lượng máu Player và Enemy được cập nhật
Bảng 5.12 Đặc tả use case Update HP
Mô tả Player hoặc enemy nhận sát thương
Luồng sự kiện Luồng chính 1 Rigid body sẽ phát hiện collision giữa player với enemy hoặc với các đối tượng tấn công
2 Lượng máu của Player hoặc enemy sẽ được
Luồng phụ Không Yêu cầu đặc biệt - Player không ở trạng thái bất tử hoặc chết
- Enemy không ở trạng thái chết Điều kiện trước - Game đang trong GamePlayScene Điều kiện sau - Lượng máu Player và Enemy được cập nhật
Bảng 5.13 Đặc tả use case Take damaged
Mô tả Kiểm tra lượng máu của player hoặc enemy
Luồng sự kiện Luồng chính 1 Player hoặc enemy được khởi tạo
2 Trong quá trình player hoặc enemy hoạt động, khi nhận sát thương thì sẽ kiểm xem lượng máu có về 0 không?
Nếu lượng máu của player và enemy trở về 0
3 Chuyển trạng thái sang dead Luồng phụ Không
Yêu cầu đặc biệt Không Điều kiện trước - Player hoặc enemy đã được khởi tạo và hoạt động Điều kiện sau Không
Bảng 5.14 Đặc tả use case CheckHP
Mô tả Hủy các đối tượng enemy hoặc player và restart game khi HP của đối tượng trở về 0
Luồng sự kiện Luồng chính 1 HP của player hoặc enemy trở về
2 Phát dead animation của player hoặc enemy
Nếu là đối tượng enemy
3 Hủy đối tượng enemy khi dead animation kết thúc
Nếu là đổi tượng player
4 Restart game Luồng phụ Không
Yêu cầu đặc biệt không có điều kiện trước là khi HP của player và enemy giảm về 0 hoặc thấp hơn Điều kiện sau là hủy các đối tượng enemy có HP về 0 hoặc khởi động lại game nếu HP của player về 0.
Bảng 5.15 Đặc tả use case Dead
Mô tả Nâng cấp các thông số player khi player nhặt các vật phẩm nâng cấp rơi ra khi đánh quái
Luồng sự kiện Luồng chính 1 Người chơi start game
2 Sau khi đánh bại toàn bộ enemy hoặc boss thì sẽ rơi ra một vài item nâng cấp
3 Player tiến lại gần và nhặt các vật phẩm
4 Vật phẩm sẽ biến mất và nâng cấp thông số của player
Yêu cầu đặc biệt Không Điều kiện trước - Di chuyển và hành động của player không bị hạn chế
Người chơi cần đứng đủ gần để tương tác với các item nâng cấp Khi điều kiện này được đáp ứng, item nâng cấp sẽ biến mất và đồng thời nâng cao thông số của người chơi.
Bảng 5.16 Đặc tả use case Buff
Mô tả Tương tác với item nâng cấp
Luồng sự kiện Luồng chính 1 Người chơi start game
2 Sau khi đánh bại toàn bộ enemy hoặc boss thì sẽ rơi ra một vài item nâng cấp
3 Player tiến lại gần và tiến hành tương tác
Yêu cầu đặc biệt Không Điều kiện trước - Di chuyển và hành động của player không bị hạn chế
Người chơi cần đứng đủ gần để tương tác với các vật phẩm nâng cấp Khi điều kiện này được đáp ứng, vật phẩm nâng cấp sẽ biến mất và cải thiện thông số của người chơi.
Bảng 5.17 Đặc tả use case Interact with item
Mô tả Dịch chuyển đến các điểm dịch chuyển
Luồng sự kiện Luồng chính 1 Người chơi nhấn phím “m” để mở map
2 Người chơi nhấn double vào các điểm dịch trên map
3 Player sẽ được dịch chuyển đến điểm dịch chuyển
Yêu cầu đặc biệt Không Điều kiện trước - Đang ở màn hình GamePlayScene Điều kiện sau - Player sẽ được dịch chuyển đến điểm dịch chuyển
Bảng 5.18 Đặc tả use case Teleport
Mô tả Dịch chuyển đến các điểm dịch chuyển
Luồng sự kiện Luồng chính 1 Người chơi start game
2 Người chơi nhấn phím “M” để mở map
3 Người chơi có thể sử dụng chuột trái kéo thả để có thể di chuyển map và nhấn double vào các điểm dịch chuyển để dịch chuyển Luồng phụ Không
Yêu cầu đặc biệt Không Điều kiện trước - Đang ở màn hình GamePlayScene Điều kiện sau Không
Bảng 5.19 Đặc tả use case Check map
Mô tả Thay đổi trạng thái player hoặc enemy về không hoạt động
Luồng sự kiện Luồng chính 1 Player hoặc enemy không thực hiện hành nào động nào hoặc đang chuẩn bị tấn công skill
2 Chuyển trạng thái player hoặc enemy về “IDLE”
3 Phát IDLE animation của player hoặc enemy
Yêu cầu đặc biệt Không Điều kiện trước - Player và enemy đã được khởi tạo và đang hoạt động
Bảng 5.20 Đặc tả use case IDLE
Mô tả Tìm đường dẫn đến vị trí player
Luồng sự kiện Luồng chính 1 Xác định vị trí của enemy và player
2 Tìm con đường ngắn nhất từ enemy đến player nếu không xung đột với đối tượng khác
Yêu cầu đặc biệt Không Điều kiện trước - Player và enemy đã được khởi tạo, đang hoạt động và đang ở cùng một Scene Điều kiện sau Không
Bảng 5.21 Đặc tả use case SeekPlayer
Mô tả Enemy di chuyển xung quanh
Luồng sự kiện Luồng chính 1 Enemy kiểm tra khoảng cách từ vị trí đang đứng đến vị trí player
2 Enemy di chuyển về phía player
3 Enemy phát run animation Luồng phụ Nếu player nằm ngoài phạm vi hoạt động của Enemy
1 Enemy sẽ di chuyển ramdom xung quanh vị trí ban đầu
2 Enemy phát run animation Nếu player nằm trong phạm vi hoạt động của enemy
1 Xác định vị trí của player
2 Di chuyển đến vị trí của player
Yêu cầu đặc biệt Không Điều kiện trước - Player và enemy đã được khởi tạo, đang hoạt động và đang ở cùng một Scene
- Enemy không bị hạn chế di chuyển Điều kiện sau - Vận tốc FlyEye lớn hơn 0
Bảng 5.22 Đặc tả use case Walk
Mô tả Enemy di chuyển xung quanh
Luồng sự kiện Luồng chính 1 FlyEye kiểm tra khoảng cách từ vị trí đang đứng đến vị trí player
2 FlyEye di chuyển về phía player
3 FlyEye phát run animation Luồng phụ Nếu player nằm ngoài phạm vi hoạt động của FlyEye
1 FlyEye sẽ di chuyển ramdom xung quanh vị trí ban đầu
Nếu player nằm trong phạm vi hoạt động của FlyEye
1 Xác định vị trí của player
2 Di chuyển đến vị trí của player
Yêu cầu đặc biệt Không Điều kiện trước - Player và FlyEye đã được khởi tạo, đang hoạt động và đang ở cùng một Scene
- FlyEye không bị hạn chế di chuyển Điều kiện sau - Vận tốc FlyEye lớn hơn 0
Bảng 5.23 Đặc tả use case Fly
Mô tả Enemy tấn công cận chiến
Luồng sự kiện Luồng chính 1 Phát MeleeAttack Animation của
2 Player take damaged Luồng phụ Nếu collider không va chạm player
1 Phát MeleeAttack Animation của Enemy
Trong trò chơi, yêu cầu đặc biệt là không có điều kiện trước nào, nghĩa là Player và Enemy đã được khởi tạo, đang hoạt động và ở cùng một Scene Điều kiện sau đó là Enemy phải thực hiện tấn công cận chiến.
Bảng 5.24 Đặc tả use case MeleeAttack
Mô tả FlyEye tấn công tầm xa bằng cách bắn ra đạn FlyProjectile
Luồng sự kiện Luồng chính 1 Khởi tạo đối tượng FlyProjectile
2 Gán hướng chỉ định về vị trí của player
3 Player take damaged Luồng phụ Nếu collider của FlyProjectile không trúng player
1 Khởi tạo đối tượng FlyProjectile
2 Gán hướng chỉ định về vị trí của player
Để FlyEye tấn công, yêu cầu đặc biệt là Player phải nằm trong tầm tấn công xa nhưng ngoài tầm tấn công cận chiến của FlyEye Trước khi tấn công, cả Player và FlyEye cần được khởi tạo, hoạt động và ở trong cùng một Scene Sau khi đáp ứng các điều kiện này, FlyEye sẽ thực hiện tấn công bằng đạn FlyProjectile.
Bảng 5.25 Đặc tả use case RangeAttack
Mô tả FlyEye tấn công lướt nhanh về phía player
Luồng sự kiện Luồng chính 1 FlyEye lướt nhanh về phía player
2 Player take damaged Luồng phụ Nếu collider không va chạm player
1 FlyEye lướt nhanh về phía player Yêu cầu đặc biệt - Player nằm trong tầm tấn công cận chiến của FlyEye Điều kiện trước - Player và FlyEye đã được khởi tạo, đang hoạt động và đang ở cùng một Scene Điều kiện sau - FlyEye thực hiện tấn công bằng cách lướt nhanh qua vị trí của player
Bảng 5.26 Đặc tả use case Dash Attack
Mô tả Enemy tấn công bằng skill
Luồng sự kiện Luồng chính 1 Phát Attack Skill Animation của
3 Chuyển trạng thái skill về không sẵn sàng và đếm thời gian hồi skill Luồng phụ Nếu collider không va chạm player
1 Phát Attack Skill Animation của Enemy
2 Chuyển trạng thái skill về không sẵn sàng và đếm thời gian hồi skill Yêu cầu đặc biệt - Player nằm trong tầm tấn công của skill Enemy Điều kiện trước - Player và Enemy đã được khởi tạo, đang hoạt động và đang ở cùng một Scene Điều kiện sau - Enemy thực hiện tấn công skill
Bảng 5.27 Đặc tả use case Attack skill
Mô tả Earth ruin guard (BOSS) xuất hiện khi player vào phòng boss
Luồng sự kiện Luồng chính 1 Phát Appear animation của Earth ruin guard (BOSS)
2 Chuyển trạng thái Earth ruin guard (BOSS) sang “Attack” Luồng phụ Không
Để vào phòng boss, người chơi cần đáp ứng yêu cầu đặc biệt, bao gồm việc người chơi và kẻ thù phải được khởi tạo, đang hoạt động và ở cùng một cảnh Sau khi thỏa mãn các điều kiện này, trạng thái của Earth ruin guard (BOSS) sẽ được chuyển sang chế độ “Tấn công”.
Bảng 5.28 Đặc tả use case Appear
Mô tả Earth ruin guard (BOSS) tấn công skill
Luồng sự kiện Luồng chính 1 Xác định vị trí của Player
2 Khởi tạo 4 viên đạn FlyProjectile gắn vị trí của player
4 Skill missileAttack chuyển sang trạng thái không sẵn sàng và đếm thời gian hồi skill
Luồng phụ Nếu collider không va chạm player
1 Xác định vị trí của Player
2 Khởi tạo 4 viên đạn FlyProjectile gắn vị trí của player
3 Skill missileAttack chuyển sang trạng thái không sẵn sàng và đếm thời gian hồi skill
Để thực hiện yêu cầu đặc biệt, người chơi cần vào phạm vi tấn công của kỹ năng Trước tiên, người chơi và kẻ thù phải được khởi tạo và hoạt động trong cùng một cảnh Sau đó, BOSS Earth ruin guard sẽ tấn công bằng kỹ năng MissileAttack.
Bảng 5.29 Đặc tả use case Missile Attack
Mô tả Earth ruin guard (BOSS) tấn công skill
Luồng sự kiện Luồng chính 1 Xác định vị trí của Player
2 Earth ruin guard (BOSS) xoay rộng 2 cánh tay robot gây sát thương xung quanh
4 Skill SpinAround chuyển sang trạng thái không sẵn sàng và đếm thời gian hồi skill
Luồng phụ Nếu collider không va chạm player
1 Xác định vị trí của Player
2 Earth ruin guard (BOSS) xoay rộng 2 cánh tay robot gây sát thương xung quanh
3 Skill SpinAround chuyển sang trạng thái không sẵn sàng và đếm thời gian hồi skill
PHÂN TÍCH THIẾT KẾ
Phân tích thiết kế
STT Tên class Ghi chú
1 Health Class dùng chung để thể hiện máu của các gameobject
2 PlayerHealth Quản lý máu của nhân vật
3 EnemyHealth Quản lý máu của enemy
4 EnemyMovement class định nghĩa các phương thức, thuộc tính để điều khiển di chuyển của các đối tượng không phải người ch
5 FlyEnemyMovement Điều khiển di chuyển của kẻ địch có tên “Fly”
6 BossMovement Điều khiển di chuyển của kẻ địch có tên “Boss”
7 RockBugMovement Điều khiển di chuyển của kẻ địch có tên
8 RockSlugMovement Điều khiển di chuyển của kẻ địch có tên
9 EarthSlimeMovement Điều khiển di chuyển của kẻ địch có tên
10 VisionRange Tầm nhìn của quái để kiểm tra khi nào gặp người chơi
11 CameraManager Singleton class để quản lý camera
12 PlayerController Điều khiển hoạt động của người chơi gồm di chuyển, tấn công, nhảy
13 AttackBehavior Quản lý các các tấn công của enemy
13 AttackBase Abstract class định nghĩa các thuộc tính, phương thức dùng chung cần thiết để enemy thực hiện tấn công
14 BossMeleeAttack Hiện thực đòn tấn công của “Boss”
15 BossAttackSkill2 Hiện thực đòn tấn công của “Boss”
15 BossAttackSkill3 Hiện thực đòn tấn công của “Boss”
16 BossAttackSkill4 Hiện thực đòn tấn công của “Boss”
17 FlyDashAttack Hiện thực đòn tấn công của “Fly”
18 FlyRangeAttack Hiện thực đòn tấn công của “Fly”
19 Tackle Hiện thực đòn tấn công tackle
20 DataPersistanceManager Singleton quản lý quá trình save và load game
21 FileDataHandler Hiện thực việc đọc, lưu trữ gamedata sang file
22 GameData Lưu trữ data của game
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 maxHealth Float Lượng máu tối đa
2 Health Float Lượng máu hiện tại
3 hitEffect GameObject Hiệu ứng khi đối tượng bị tấn công
4 deadEffect GameObject Hiệu ứng khi đối tượng chết
5 TakeDamage Void Hàm xử lý khi đối tượng nhận sát thương
6 Die Void Hàm xử lý khi đối tượng chết
Bảng 6.2 Chi tiết Class Health
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 maxHealth Float Lượng máu tối đa
2 Health Float Lượng máu hiện tại
3 hitEffect GameObject Hiệu ứng khi đối tượng bị tấn công
4 deadEffect GameObject Hiệu ứng khi đối tượng chết
5 TakeDamage Void Hàm xử lý khi đối tượng nhận sát thương
6 Die Void Hàm xử lý khi đối tượng chết
Bảng 6.3 Chi tiết Class PlayerHealth
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 maxHealth Float Lượng máu tối đa
2 Health Float Lượng máu hiện tại
3 hitEffect GameObject Hiệu ứng khi đối tượng bị tấn công
4 deadEffect GameObject Hiệu ứng khi đối tượng chết
5 TakeDamage Void Hàm xử lý khi đối tượng nhận sát thương
6 Die Void Hàm xử lý khi đối tượng chết
Bảng 6.4 Chi tiết Class EnemyHealth
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 ani Animator Thuộc tính được unity cung cấp để quản lý hoạt ảnh nhân vật
2 attackTarget GameObject Đối tượng mà class cần tấn công
3 rb Rigidbody2d Thuộc tính được unity cung cấp để quản lý các xử lý vật lý như va chạm, di chuyển
4 canMove Bool Kiểm tra xem đối tượng có thể di chuyển không
5 stopped Bool Kiểm tra đối tượng có đứng yên không
6 noFlipping Bool Kiểm tra đối tượng có thể lật trái phải không
7 movementSpeed Float Tốc độ di chuyển
8 velocity Vector2 Vận tốc của đối tượng hiện tại
9 isOnPlatform Bool Kiểm tra xem đối tượng có ở trên platform
10 Flipping() Void Phương thức dùng để xoay đối tượng trái phải
11 NormalMovement() Void Phương thức xử lý di chuyển của đối tượng ở trạng thái bình thường
12 CombatMovement() Void Phương thức xử lý di chuyển của đối tượng ở trạng thái tấn công
13 SetTarget() Void Phương thức dùng để set đối tượng mà ta nên tấn công
14 ApplyGravity() Void Phương thức dùng để xử lý trọng lực
Bảng 6.5 Chi tiết Class EnemyMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 maxDisX Float Khoảng cách xa nhất cách mục tiêu theo trục X
2 minDisX Float Khoảng cách gần nhất cách mục tiêu theo trục X
3 maxDisY Float Khoảng cách xa nhất cách mục tiêu theo trục Y
4 minDisY Float Khoảng cách gần nhất cách mục tiêu theo trục Y
5 NormalMovement Void Ghi đè phương thức được kế thừa từ lớp cha
6 CombatMovement Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.6 Chi tiết Class FlyEnemyMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 TimeAppear Float Thời gian để boss xuất hiện
2 NormalMovement() Void Ghi đè phương thức được kế thừa từ lớp cha
3 CombatMovement() Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.7 Chi tiết Class BossMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 IDLETime Float Thời gian đứng yên trước khi tiếp tục di chuyển
2 NormalMovement() Void Ghi đè phương thức được kế thừa từ lớp cha
3 CombatMovement() Void Triển khai phương thức được kế thừa từ lớp cha
4 isGrounded Bool Thuộc tính dùng để kiểm tra xem đối tượng có trên mặt đất không
5 isWalking Bool Thuộc tính dùng để kiểm tra xem đối tượng có đang di chuyển không
6 rayCastLength Float Thuộc tính dùng để lưu độ dài của tia dò mặt đất
Bảng 6.8 Chi tiết Class RockBugMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 IDLETime Float Thời gian đứng yên trước khi tiếp tục di chuyển
2 NormalMovement() Void Ghi đè phương thức được kế thừa từ lớp cha
3 CombatMovement() Void Triển khai phương thức được kế thừa từ lớp cha
4 isGrounded Bool Thuộc tính dùng để kiểm tra xem đối tượng có trên mặt đất không
5 isWalking Bool Thuộc tính dùng để kiểm tra xem đối tượng có đang di chuyển không
6 rayCastLength Float Thuộc tính dùng để lưu độ dài của tia dò mặt đất
Bảng 6.9 Chi tiết Class RockSlugMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 timePrepareToJump Float Thời gian chuẩn bị để di chuyển
2 NormalMovement() Void Ghi đè phương thức được kế thừa từ lớp cha
3 CombatMovement() Void Triển khai phương thức được kế thừa từ lớp cha
4 rayCastLength Float Thuộc tính dùng để lưu độ dài của tia dò mặt đất
Bảng 6.10 Chi tiết Class EarthSlimeMovement
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 visionRange Float Độ lớn của tầm nhìn
2 Update() Void Phương thức được unity định nghĩa, chạy liên tục mỗi frame để quét xem đối tượng đã vào tầm nhìn chưa
Bảng 6.11 Chi tiết Class Vision Range
Kiểu dữ liệu Mô tả
1 Instance CameraManager Instance của class
Thuộc tính được unity định nghĩa, lưu trữ danh sách các đối tượng cinemachin
3 currentCamera CinemachineVirtualCamera Thuộc tính được unity định nghĩa, là instace của đối tượng camera hiện tại đang sử dụng
Thuộc tính được unity định nghĩa, là thời gian chuyển qua lại chữa 2 CinemachineVirtualCa mera
Void Phương thức xử lý việc điều khiển camera
6 PanCamera Ienumrator Phương thức xử lý việc điều khiển camera
7 SwapCamera Void Phương thức xử lý việc chuyển đổi camera
Bảng 6.12 Chi tiết Class CameraManager
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 playerAnimator Animator Là 1 thuộc tính được unity định nghĩa, điều khiển hoạt ảnh của nhân vật
2 platformLayer LayerMask Là 1 thuộc tính được unity định nghĩa, lưu trữ danh sách các layer được coi là platform
3 Rb Rigidbody2d Là 1 thuộc tính được unity định nghĩa, là cơ thể vật lý của nhân vật
4 boxCollider Boxcollider2d Là 1 thuộc tính được unity định nghĩa, là khung va chạm của nhân vật
5 playerInputActions PlayerInputActions Là 1 thuộc tính được unity định nghĩa, xử lý thông tin bàn phím và chuột
6 Move InputAction Là 1 thuộc tính được unity định nghĩa, lưu trữ thông tin của sự kiện move
7 meleeAttack InputAction Là 1 thuộc tính được unity định nghĩa, lưu trữ thông tin của sự kiện meleeAttack
8 Jump InputAction Là 1 thuộc tính được unity định nghĩa, lưu trữ thông tin của sự kiện jump
9 Dash InputAction Là 1 thuộc tính được unity định nghĩa, lưu trữ thông tin của sự kiện dash
10 Awake() Void Là 1 phương thức được unity định nghĩa, thực hiện các công việc sau khi khởi tạo đối tượng
11 OnEnable() Void Là 1 phương thức được unity định nghĩa, thực hiện các công việc khi đối tượng được enable
12 OnDisable() Void Là 1 phương thức được unity định nghĩa, thực hiện các công việc khi đối tượng được disable
11 Update() Void Là 1 phương thức được unity định nghĩa, liên tục được gọi mỗi frame
12 FixedUpdate() Void Là 1 phương thức được unity định nghĩa, liên tục được gọi mỗi 1 khoảng thời gian nhất định trôi qua
13 Fire() Void Phương thức thực hiện đòn tấn công
14 Jump() Void Phương thức thực hiện động tác nhảy
15 CancleJump() Void Phương thức thực hiện việc hủy động tác nhảy
16 Dash() Void Phương thức xử lý hành động lướt
17 IsGrounded() Void Phương thức để kiểm tra xem đối tượng có đang va chạm với nền đất
Bảng 6.13 Chi tiết Class PlayerController
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 attackContainer Transform Thuộc tính được unity định nghĩa, lưu trữ các đòn tấn công của đối tượng
2 Attacks AttackBase[] Danh sách các đòn tấn công của đối tượng
3 AttackTarget Transform Mục tiêu cần tấn công
4 Animator Animator Thuộc tính được unity định nghĩa, thực hiện việc điều khiển hoạt ảnh của đối tượng
5 Attack() Void Hàm xử lý tấn công
6 ExcuteAttack() Void Hàm xử lý thực hiện đòn tấn công
7 AttackToUse AttackBase Phương thức để xử lý xem nên sử dụng đòn tấn công nào
8 SetTarget() Void Phương thức dùng để truyền vào đối tượng cần tấn công
Bảng 6.14 Chi tiết Class AttackBehavior
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 attackCD Float Thời gian hồi chiêu
2 attackDuration Float Thời gian thực hiện đòn tấn công
3 readyToAttack Bool Thuộc tính dùng để kiểm tra xem đối tượng đã sẵn sàng tấn công chưa
4 animTrigger String Tên của hành động tấn công để xử lý hoạt ảnh
5 maxRange Float Tầm đánh tối đa
6 minRange Float Tầm đánh tối thiểu
7 noRange Bool Thuộc tính để kiểm tra thuộc tính này có tầm đánh không
8 startWithCD Bool Thuộc tính dùng để kiểm tra xem có thời gian hồi chiêu khởi đầu không
9 IsInRange(float ) Bool Phương thức để kiểm tra đối tượng cần tấn công có trong tầm đánh không
10 CanExcuteAttack() Bool Phương thức dùng để kiểm tra xem có thể thực hiện đòn tấn công này hay không
11 ExcuteAttack() Abstract void Phương thức trừu tượng để thực hiện đòn tấn công
12 AttackCD() Ienumrator Phương thức để xử lý thời gian hồi chiêu
Bảng 6.15 Chi tiết Class AttackBase
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 countState Int Trạng thái của đòn tấn công
2 Speed_X_Boss float Tốc độ di chuyển của boss
3 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.16 Chi tiết Class BossMeleeAttack
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 countState Int Trạng thái của đòn tấn công
2 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.17 Chi tiết Class BossAttackSkill2
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 countState Int Trạng thái của đòn tấn công
2 shootPoint Vector3 Tọa độ của nơi thực hiện đòn tấn công
3 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
4 Projectile GameObject Instance của loại đối tượng mà boss sẽ bắn ra
Bảng 6.18 Chi tiết Class BossAttackSkill3
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 countState Int Trạng thái của đòn tấn công
2 shootPoint Vector3 Tọa độ của nơi thực hiện đòn tấn công
3 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
4 Projectile GameObject Instance của loại đối tượng mà boss sẽ bắn ra
Bảng 6.19 Chi tiết Class BossAttackSkill4
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 movSpeed Float Tốc độ di chuyển của khi tấn công
2 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.20 Chi tiết Class FlyDashAttack
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 shootPoint Vector3 Tọa độ của nơi thực hiện đòn tấn công
2 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
3 Projectile GameObject Instance của loại đối tượng mà boss sẽ bắn ra
Bảng 6.21 Chi tiết Class FlyRangeAttack
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 movSpeed Float Tốc độ di chuyển của khi tấn công
2 ExcuteAttack() Void Triển khai phương thức được kế thừa từ lớp cha
Bảng 6.22 Chi tiết Class Tackle
Kiểu dữ liệu Mô tả
2 fileName String Tên của file lưu trữ
3 gameData GameData Instance của class
4 fileDataHandler FileDataHandler Instance của class
5 SaveGame() Void Phương thức xử lý sự kiện save game
6 LoadGame() Void Phương thức xử lý sự kiện load game
7 ReLoadGame() Void Phương thức xử lý sự kiện reload game
8 NewGame Void Phương thức xử lý sự kiện new game
Bảng 6.23 Chi tiết Class DataPersistanceManager
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 dataDirPath String Địa chỉ của file lưu trữ
2 dataFileName String Tên của file lưu trữ
3 useEncryption Bool Thuộc tính dùng để kiểm tra xem có sử dụng mã hóa không
4 encryptionCodeWord Bool Từ dùng để mã hóa
Bảng 6.24 Chi tiết Class FileDataHandler
STT Thuộc tính / Phương thức
Kiểu dữ liệu Mô tả
1 PlayerPosition Vector3 Vị trí của người chơi hiện tại
2 playerHealth Float Lượng máu hiện tại của người chơi
3 GameData() Phương thức khởi tạo
Bảng 6.25 Chi tiết Class GameData
State diagram
Hình 6.2 Sơ đồ state của Player
Alias State No State Action/Event ResultState
Bảng 6.26 Chuyển đồi state của Player
Hình 6.3 Sơ đồ state của Boss
Alias State No State Action/Event ResultState
Bảng 6.27 Chuyển đổi state của Boss
Hình 6.4 Sơ đồ state của Slime
Alias State No State Action/Event ResultState
Bảng 6.28 Chuyển đổi state của Slime
Hình 6.5 Sơ đồ state của RockSlug
Alias State No State Action/Event ResultState
Bảng 6.29 Chuyển đổi state của RockSlug
Hình 6.6 Sơ đồ state của RockBug
Alias State No State Action/Event ResultState
Bảng 6.30 Chuyển đổi state của RockBug
Hình 6.7 Sơ đồ state của FlyEye
Alias State No State Action/Event ResultState
Bảng 6.31 Chuyển đổi state của FlyEye
Thiết kế UI
- Làm giao diện người dùng nhất quán, dễ sử dụng
- Vô hiệu hóa các chức năng theo ngữ cảnh
- Sử dụng màn hình hiệu quả
Hình 6.8 UI Main menu screen
Người dùng sẽ vào Main menu Screen đầu tiên khi chạy game Main menu
Screen có: 1 image làm background, 1 text object làm title, 4 buttons: Play game button, Options game button, Exit game button, info game button
- Nhấn nút “Play game”: Tải file save game và chuyển sang GamePlayScene
- Nhấn nút “Options”: Mở Settíngs menu
- Nhấn nút “Exit game”: Thoát game
- Nhấn nút “Info game”: Hiện thông tin game
The settings menu allows players to customize their gaming experience by modifying various options It includes three text objects for settings titles: language, damaged values, and sound Additionally, there are five buttons: the left and right language buttons, the Settings button, the Controls button, and the Back button The menu also features a toggle button for enabling damage values and a sound slider for adjusting audio levels.
- Nhấn nút “left language”: đổi ngôn ngữ
- Nhấn nút “right language”: đổi ngôn ngữ
- Nhấn nút “enableDamgeValue”: thay đổi cài đặt hiện hoặc không hiên giá trị sát thương
- Kéo thả slider “Sound”: tăng/ giảm âm lượng
- Nhấn nút “Controls”: mở Controls menu
- Nhấn nút “Back”: quay lại Main menu
Menu Controls chứa các cài đặt điều khiển cho người chơi, bao gồm 7 đối tượng văn bản để hiển thị tiêu đề điều khiển Ngoài ra, menu này có 10 nút, trong đó có 7 nút ControlSetting để điều chỉnh cài đặt nhân vật, cùng với nút Settings, nút Controls và nút Back.
- Nhấn vào các nút ControlSetting và nhấn phím bất kỳ trên màn hình: phím điều khiển sẽ thay đổi thành phím vừa cài đặt
- Nhấn nút “Settíngs”: mở Settings menu
- Nhấn nút “Back”: quay lại Main menu
Pause menu chứa những lựa chọn khi người chơi tạm dừng game Pause menu có: 1 text object làm title, 3 button: Resume button, BacktoMenu button, Quit game button
- Nhấn nút “Resume”: Tiếp tục game
- Nhấn nút “BacktoMenu”: Chuyển về màn hình MainMenu
- Nhấn nút “Quit Game”: Thoát game
Hình 6.12 UI Player's health bar
Player’s health bar chứa các heart object thể hiện lượng Hp của player
Hình 6.13 UI Enemy's health bar
Enemy’s health bar là một thanh hình chữ nhật màu đỏ thể hiện lượng Hp của player