Đồ án Khoa học máy tínhLỜI MỞ ĐẦU Ngày nay, dưới sự phát triển ngày một lớn của thời đại công nghệ thông tin, nhucầu sử dụng của con người ngày càng cao, các sản phầm công nghệ muốn được
Trang 1TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN KHOA HỌC MÁY
TÍNH
Tên đề tài:
THIẾT KẾ GAME 2D VƯỢT MÀN
Sinh viên thực hiện: Phạm Văn Thanh
Lớp: Khoa học máy tính ứng dụng K64
Giáo viên hướng dẫn: Nguyễn Thị Phương Bắc
Hà Nội – 2023
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 2
CHƯƠNG 1 : 3
TỔNG QUAN VỀ ĐỀ TÀI 3
1.1 Lý do chọn đề tài 3
1.2 Mục tiêu của đề tài 3
1.3 Giới thiệu ý tưởng và nội dung game 3
1.3.1 Giới thiệu ý tưởng 3
1.3.2 Nội dung game 3
1.4 Phạm vi nghiên cứu 4
1.5 Bố cục của đồ án 4
CHƯƠNG 2 : 5
TÌM HIỂU VỀ UNITY 5
2.1 Tổng quan về Unity 5
2.1.1 Unity là gì ? 5
2.1.2 Quá trình phát triển của Unity 5
2.1.3 Các tính năng cơ bản của Unity 5
2.1.4 Ưu điểm của Unity 6
2.2 Tìm hiểu về Unity Engine 6
2.2.1 Các thành phần trong Unity Editor 6
Trang 3Đồ án Khoa học máy tính
3.2 Công cụ sử dụng 13
3.2.1 Unity 2021.3.19f1 13
3.2.2 Visual Studio Code 15
3.2.3 Adobe Photoshop 17
CHƯƠNG 4 : 19
PHÂN TÍCH VÀ THIẾT KẾ 19
4.1 Ý tưởng 19
4.2 Bản đồ và các đối tượng trong game 19
4.2.1 Map 19
4.2.2 Các đối tượng trong game 20
4.3 Xử lý các Animations và các va chạm của nhân vật trong game 22
4.3.1 Animations 22
4.3.2 Các va chạm của nhân vật trong game 25
KẾT LUẬN 26
Phạm Văn Thanh – Khoa học máy tính K64
Trang 4Đồ án Khoa học máy tính
LỜI MỞ ĐẦU
Ngày nay, dưới sự phát triển ngày một lớn của thời đại công nghệ thông tin, nhucầu sử dụng của con người ngày càng cao, các sản phầm công nghệ muốn được đón nhận cần chịu được sự đánh giá khắt khe ngày một lớn từ phía người dùng Và các sản phẩm về Game cũng nhận được rất nhiều sự chú ý từ phía các Game thủ hay thậm chí
là cả những người chơi bình thường Ngành công nghiệp Game hiện nay có thể nói là phát triển vô cùng mạnh mẽ, rất nhiều những tựa Game hay và vô cùng hấp dẫn được
ra đời trong thời gian qua Cụ thể để nói về sự phát triển này có thể là các sự kiện giao lưu gặp gỡ, các giải đấu thể thao điện tử với giải thưởng vô cùng lớn trên toàn thế giới.Thậm chí vào năm xảy ra đại dịch COVID-19, do giãn cách xã hội nên nhu cầu sử dụng trò chơi điện từ phát triển vô cùng mạnh với số liệu cụ thể : 39% là mức tăng số lượt tải game xuống trong tháng 2/2020 - chủ yếu là tại Trung Quốc, 22M là số người
sử dụng Steam vào ngày 23/03 – Kỷ lục của nền tảng Steam trên PC, Số lượng máy chơi game PS5 sản xuất không đủ để đáp ứng nhu cầu của game thủ,
Trước đây để có thể làm ra được một tựa Game có thể cần rất nhiều kinh nghiệm về chuyển ngành, kiến thức về các ngôn ngữ lập trình nhưng ngày nay với sự
ra đời của các Game Engine giúp ích cho các nhà lập trình game rất nhiều thậm chí là
cả những người mới nhập môn muốn tìm hiểu Nhờ có các engine mà công việc làm game trở nên ít tốn kém và đơn giản hơn Một số engine nổi bật hiện nay có thể kể đến
là CryEngine, Unreal Engine, Unity3D, với các chức năng bao gồm cung cấp công
cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2D hoặc 3D, công cụ vật lý (tính toán
và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, tạo dòng dữ liệu xử lý, Engine càng chi tiết bao nhiêu thì khả năng tùy biến càng cao, thành phẩm cũng có chất lượng tốt hơn so với dùng một engine đơn giản, đương nhiên engine tốt sẽ tốn kém thêm chi phí
Trong bài đồ án này em sẽ sử dụng một Engine rất phổ biến là Unity Engine để thực hành ra một tựa Game dựa theo ý tưởng từ tựa game đình đám Mario Trong game người chơi sẽ vào vai một cậu bé mũ đỏ vượt qua các thử thách, thu thập các vật phẩm trên đường để hoàn thành màn chơi Game sẽ có tên dự kiến là Red Hat Crossing
Trang 5Đồ án Khoa học máy tính
CHƯƠNG 1 : TỔNG QUAN VỀ ĐỀ TÀI
1.1 Lý do chọn đề tài
Nắm bắt được xu thế phát triển của ngành công nghiệp làm Game, nên đồ án này em lựa chọn khảo sát và nghiên cứu về Unity Engine – một Game Engine rất phổ biến và không còn xa lạ gì hiện nay nhằm thực hiện cho việc phát triển một tựa game theo dòng 2D platformer cho chính mình làm ra Chuẩn bị kiến thức và kỹ năng cho định hướng nghề nghiệp sau này
1.2 Mục tiêu của đề tài
Khảo sát và nghiên cứu được nhiều nhất về các tính năng của Unity Engine, sử dụng các kiến thức đó phát triển ra được một trò chơi theo đúng các kế hoạch đã đặt ra:
- Game sẽ có các màn chơi khác nhau
- Xử lý được các va chạm trong game (Chạm quái hay rơi vực sẽ thua, chạm vào vật phẩm sẽ tăng điểm, chạm vào đích sẽ qua màn, )
- Nhân vật có sự luân chuyển giữa các animation mượt mà
Đây là một số mục tiêu tạm thời của em trong đề cương, quá trình làm sẽ có bổ xung thêm
1.3 Giới thiệu ý tưởng và nội dung game
1.3.1 Giới thiệu ý tưởng
Game sẽ đi theo dòng 2D Platformer hay còn gọi là game vượt các chướng ngạivật để qua màn Lối chơi của dòng game này liên quan chủ yếu tới kĩ năng di chuyển nhân vật của người chơi để vượt qua các chướng ngại vật ví dụ như chạm vào quái hoặc nhân vật bị rơi xuống vực sẽ mất đi 1 máu Nếu nhân vật mà người chơi điều khiển về 0 máu sẽ phải chơi lại màn chơi từ vị trí ban đầu Qua mỗi màn chơi số lượngquái và bẫy sẽ được tăng lên nâng mức độ khó hơn màn chơi trước tạo cho người chơi
sự khó chịu, cũng như hứng thú muốn vượt qua màn đó
1.3.2 Nội dung game
Game sẽ có tên dự kiến là Red Hat Crossing, lấy ý tưởng từ tựa game đình đám Mario nên sẽ không còn xa lạ gì với mọi người Trong game người chơi sẽ vào vai một
Phạm Văn Thanh – Khoa học máy tính K64
Trang 6- Hoàn thành hết màn chơi về tới đích sẽ qua màn.
- Mỗi màn sẽ có 3 mạng chơi, nếu người chơi rơi xuống vực hoặc chạm vào trướng ngại vật 3 lần sẽ bị quay lại đầu màn chơi
1.4 Phạm vi nghiên cứu
Các chương tiếp theo sẽ tìm hiểu về Engine Unity bao gồm các đặc điểm, tính năng, công cụ và các thành phần trong Engine này Và từ đó demo ra một game 2D thểloại vượt màn
1.5 Bố cục của đồ án
Mở đầu
Chương 1: Tổng quan về đề tài
Chương 2: Tìm hiểu về Unity
Chương 3: Cơ sở lý thuyết và công nghệ
Chương 4: Phân tích và thiết kế đề tài
Chương 5: Thiết kế giao diện game
Chương 6: Kết quả thực nghiệm
Kết luận
Trang 7Đồ án Khoa học máy tính
CHƯƠNG 2 : TÌM HIỂU VỀ UNITY
2.1 Tổng quan về Unity
2.1.1 Unity là gì ?
Unity là môt “cross- flatform game engine” tạm hiểu là công cụ phát triển ƒgame
đa nền tảng được phát triển bởi Unity Technologies Game engine này được sử dụng
để phát trển game trên PC, consoles, thiết bị di đông và trên websites
Nhờ vào tính năng đa nền tảng, Unity là cái tên phổ biến với cả các nhà phát triển game tự do cũng như trong các studio game Nó được dùng nhằm tạo ra những trò chơi như Heathstone, Cuphead, Pokemon Go, Rimworld cùng vô vàn trò chơi khácnữa
Lập trình Unity hỗ trợ cho người dùng đầy đủ đồ họa 2D và 3D cùng nhiều chức năng khác, chủ yếu được viết bằng ngôn ngữ lập trình C# Ngoài ra còn 2 ngôn ngữ khác cũng được sử dụng để hỗ trợ đó là Boo và UnityScript, tuy nhiên đều đã bị loại ở Unity 5 và Unity 2017
2.1.2 Quá trình phát triển của Unity
Ra mắt đầu tiên vào năm 2005 tại sự kiê ƒn Apple’s Worldwide Developer Conference bởi nhà sáng lâ ƒp David Helgason, trải qua nhiều năm phát triển, đến nay Unity đã có rất nhiều phiên bản phát triển và hoàn thiện hơn về nhiều mặt
Tháng 5-2012 theo cuô ƒc khảo sát Game Developer Megazine được công nhâ ƒn
là Game engine tốt nhất cho mobile Năm 2014 Unity thắng giải “Best Engine” tại giảiUK’s annual Develop Industry Exellence
2.1.3 Các tính năng cơ bản của Unity
Unity hỗ trợ mạnh mẽ rất nhiều tính năng, nổi bật là :
- Unity tạo giao diện UI của game như textbox, drop bar…
- AI – hỗ trợ bot trong màn hình game và package tạo nên bot trong game
- Hỗ trợ hiển thị ngôn ngữ bằng nhiều font chữ đặc biệt
Phạm Văn Thanh – Khoa học máy tính K64
Trang 8Đồ án Khoa học máy tính
Trong tất cả số tính năng cơ bản của Unity, giao diện ứng dụng Editor được đề cao hơn cả Unity Editor, với nhiều công cụ giúp hỗ trợ tốt các đầu việc phát triển game gồm tạo ra mô hình 3D (ánh sáng, vật lý), viết Script… chỉ được thực hiện bằng thao tác đơn giản là kéo và thả hình ảnh Cũng chính nhờ vào tính năng này mà Unity
đã hỗ trợ tốt cho những vị trí khác trong game phải kể đến là Game Designer
2.1.4 Ưu điểm của Unity
Chức năng cốt lõi đa dạng bao gồm: cung cấp công cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2D hoặc 3D, công cụ vật lý (tính toán và phát hiện va chạm),
âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, tạo dòng dữ liệu xử
lý, quản lý bộ nhớ, dựng ảnh đồ thị và kết nối mạng Nhờ có các engine mà công việc làm game trở nên ít tốn kém và đơn giản hơn
Hỗ trợ đa nền tảng: Một trong các thế mạnh của Unity3D chính là khả năng hỗ trợ gần như toàn bộ các nền tảng hiện có bao gồm: PlayStation 3, Xbox 360, Wii U, iOS, Android, Windows, Blackberry 10, OS X, Linux, trình duyệt Web và cả Flash Nói cách khác, chỉ với một gói engine, các studio có thể làm game cho bất kỳ hệ điều hành nào và dễ dàng convert chúng sang những hệ điều hành khác nhau Đồng thời, đây cũng là giải pháp cho các game online đa nền tảng – có thể chơi đồng thời trên nhiều hệ điều hành, phần cứng khác nhau như Web, PC, Mobile, Tablet,
Dễ sử dụng: Unity3D được built trong một môi trường phát triển tích hợp, cungcấp một hệ thống toàn diện cho các lập trình viên, từ soạn thảo mã nguồn, xây dựng công cụ tự động hóa đến trình sửa lỗi Do được hướng đến đồng thời cả lập trình viên không chuyên và studio chuyên nghiệp, nên Unity3D khá dễ sử dụng Hơn nữa, đây là một trong những engine phổ biến nhất trên thế giới, người dùng có thể dễ dàng tìm kiếm kinh nghiệm sử dụng của “tiền bối” trên các forum công nghệ
Tính kinh tế cao: Unity Technologies hiện cung cấp bản miễn phí engine Unity3D cho người dùng cá nhân và các doanh nghiệp có doanh thu dưới 100.000 USD/năm Với bản Pro, người dùng phải trả 1.500 USD/năm – một con số rất khiêm tốn so với những gì engine này mang lại
2.2 Tìm hiểu về Unity Engine
2.2.1 Các thành phần trong Unity Editor
Trang 92.2.1.2 Ca s Hierarchy
Tab hierarchy là nơi hiển thị các Game Object trong Sences hiện hành Khi các đối tượng được thêm hoặc xóa trong Sences, tương ứng với các đối tượng đó trong cửa
sổ Hierarchy
Tương tự trong tab Project, Hierarchy cũng có một thanh tìm kiếm giúp quản lý
và thao tác với các Game Object hiệu quả hơn đặc biệt là với các dự án lớn
2.2.1.3 Ca s Game
Đây là mạn hình demo Game, là góc nhìn từ camera trong game
Thanh công cụ trong cửa sổ game cung cấp các tùy chỉnh về độ phân giải man hình, thông số (stats), gizmos, tùy chọn bật tắt các component
2.2.1.4 Ca s Project
Phạm Văn Thanh – Khoa học máy tính K64
Trang 10Đồ án Khoa học máy tính
Đây là cưa sổ explorer của Unity, hiển thị thông tin của tất cả các tài nguyên (Assets) trong game của bạn
Cột bên trái hiển thị assets và các mục yêu thích dưới dạng cây thư mục tương
tự như Windows Explorer Khi click vào một nhánh trên cây thư mục thì toàn bộ nội dung của nhánh đó sẽ được hiển thị ở khung bên phải Ta có thể tạo ra các thư mục mới bằng cách Right click -> Create -> Folder hoặc nhấn vào nút Create ở góc trên bên trái cửa sổ Project và chọn Folder Các tài nguyên trong game cũng có thể được tạo ra bằng cách này
Phía trên cây thư mục là mục Favorites, giúp chúng ta truy cập nhanh vào những tài nguyên thường sử dụng Chúng ta có thể đưa các tài nguyên vào Favorites bằng thao tác kéo thả
Đường dẫn của thư mục tài nguyên hiện tại Chúng ta có thể dễ dàng tiếp cận các thư mục con hoặc thư mục gốc bằng cách click chuột vào mũi tên hoặc tên thư mục
2.2.1.5 Ca s Inspector
Cửa sổ Inspector hiển thị chi tiết các thông tin về Game Object đang làm việc,
kể cả những component được đính kèm và thuộc tính của nó Bạn có thể điều chỉnh, thiết lập mọi thông số và chức năng của Game Object thông qua cửa sổ Inspector.Mọi thuộc tính thể hiện trong Inspector đều có thể dễ dàng tuỳ chỉnh trực tiếp
mà không cần thông qua một kịch bản định trước Tuy nhiên Scripting API cung cấp một số lượng nhiều và đầy đủ hơn do giao diện Inspector là có giới hạn
Các thiết lập của từng component được đặt trong menu Các bạn có thể click chuột phải, hoặc chọn icon hình bánh răng nhỏ để xuất hiện menu
Ngoài ra Inspector cũng thể hiện mọi thông số Import Setting của asset đang làm việc như hiển thị mã nguồn của Script, các thông số animation, …
Trang 11Key Frame hay Frame là một trạng thái của một animation Có thể được tạo nên
từ 1 sprite hay nhiều sprite khác nhau
2.2.2.6 Prefabs
Là một khái niệm trong Unity, dùng để sử dụng lại các đối tượng giống nhau cótrong game mà chỉ cần khởi tạo lại các giá trị vị trí, tỉ lệ biến dạng và góc quay từ môt đối tượng ban đầu Ví dụ: Các đối tượng là đồng tiên trong game Mario đều có xử lý giống nhau, nên ta chỉ việc tạo ra một đối tượng ban đầu, các đồng tiền còn lại sẽ sử dụng prefabs Hoặc khi ta lát gạch cho một cái nền nhà, các viên gạch cũng được sử dụng là prefabs
Trang 13Đồ án Khoa học máy tính
CHƯƠNG 3 :
CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ
3.1 Ngôn ngữ C#
Ngôn ngữ sử dụng để lập trình game trên Unity là ngôn ngữ C#
C# là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, là phần khởi đầu cho kế hoạch NET của họ Tên của ngôn ngữ bao gồm ký tự thăng theoMicrosoft nhưng theo ECMA là C#, chỉ bao gồm dấu số thường Microsoft phát triển C# dựa trên C++ và Java C# được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java C# được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC.C# theo một hướng nào đó, là ngôn ngữ lập trình phản ánh trực tiếp nhất đến NET Framework mà tất cả các chương trình.NET chạy, và nó phụ thuộc mạnh mẽ vàoframework này Mọi dữ liệu cơ sở đều là đối tượng, được cấp phát và hủy bỏ bởi trình dọn rác Garbage-Collector (GC), và nhiều kiểu trừu tượng khác chẳng hạn như class, delegate, interface, exception phản ánh rõ ràng những đặc trưng của.NET runtime
So sánh với C và C++, ngôn ngữ này bị giới hạn và được nâng cao ở một vài đặc điểm nào đó, nhưng không bao gồm các giới hạn sau :
- Các con trỏ chỉ có thể được sử dụng trong chế độ không an toàn Hầu hết các đối tượng được tham chiếu an toàn, và các phép tính đều được kiểm tra tràn bộ đệm Các con trỏ chỉ được sử dụng để gọi các loại kiểu giá trị; còn những đối tượng thuộc
bộ gom rác (garbage-collector) thì chỉ được gọi bằng cách tham chiếu
- Các đối tượng không thể được giải phóng tường minh
- Chỉ có đơn kế thừa, nhưng có thể cài đặt nhiều interface trừu tượng (abstract interfaces) Chức năng này làm đơn giản hóa sự thực thi của thời gian thực thi
- C# thì an-toàn-kiểu (typesafe) hơn C++
- Cú pháp khai báo mảng khác nhau ("int[] a = new int[5]" thay vì "int a[5]")
- Kiểu thứ tự được thay thế bằng tên miền không gian (namespace)
Trang 14Đồ án Khoa học máy tính
- Hỗ trợ kiểu động
Một số các đặc trưng nổi bật của ngôn ngữ C# :
- C# là một ngôn ngữ đơn giản:
C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như Java và c++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở ảo (virtual base class)
Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++ Nếu chúng ta thân thiện với
C và C++ hoặc thậm chí là Java, chúng ta sẽ thấy C# khá giống về diện mạo, cú pháp, biểu thức, toán tử và những chức năng khác được lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản hơn
- C# là ngôn ngữ hiện đại:
Những đặc tính như là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng, và bảo mật mã nguồn là những đặc tính được mong đợi trong một ngôn ngữ hiện đại C# chứa tất cả những đặc tính trên Nếu là người mới học lập trình có thểchúng ta sẽ cảm thấy những đặc tính trên phức tạp và khó hiểu Tuy nhiên, cũng đừng
lo lắng chúng ta sẽ dần dần được tìm hiểu những đặc tính qua các nội dung khoá học này
- C# là một ngôn ngữ lập trình thuần hướng đối tượng:
Lập trình hướng đối tượng (OOP: Object-oriented programming) là một phương pháp lập trình có 4 tính chất Đó là tính trừu tượng (abstraction), tính đóng gói(encapsulation), tính đa hình (polymorphism) và tính kế thừa (inheritance) C# hỗ trợ cho chúng ta tất cả những đặc tính trên
Trang 15vì được tối ưu hóa hơn, còn dùng các định dạng khác ngoài FBX thì phải cài phần mềnthiết kế character tưng ứng thì mới dùng được (tức là dùng Maya có định dạng *.mb,
*.ma thì muốn dùng được phải cài Maya)
Hình 3.2.1
Unity hỗ trợ được hầu hết trên các nền tảng từ IOS, Android, hay Windowa, MacOs,…, sử dụng các ngôn ngữ lập trình C# và Javascript Điều đó đã tạo nên thế mạnh để Unity trở thành chìa khóa để phát triển phần mềm game tốt nhất hiện nay.Một thế mạnh nữa của Unity là bạn có thể chạy demo game của bạn ngay trong khi design, nó có hỗ trợ hai chế độ là Scene và Game, rất thuận tiện cho việc test thử các modulGame
Unity3D có 2 loại phiên bản, một cho người dùng free, và một phiên bản pro thìmất phí
Phạm Văn Thanh – Khoa học máy tính K64
Trang 16Đồ án Khoa học máy tính
Khi tải Unity về các bạn cài đặt bình thường, đến khi kết thúc cài đặt nền các bạn chọn phiên bản Pro thì cần phải mua, còn nếu là người dùng free thì các bạn chọn kích hoạt qua web, chỉ cần có kết nối mạng internet, sau đó chọn cài đặt thủ công và nhập mail, chọn free là bạn có thể sử dụng một bản Unity free
Trên thị trường game quốc tế và Việt Nam hiện nay vẫn có các game engine được không ít developer ưa chuộng tiêu biểu là CryEngine và Unreal Mỗi engine nhấtđịnh sẽ có những ưu – khuyết điểm khác nhau và vẫn được dùng nhiều tại các studio game Dưới đây là một số ưu điểm và nhược điểm của game engine Unity
Về mặt ưu điểm :
- Trên Editor, các nhà phát triển game không nhất thiết phải viết code nhằm sắp xếp những đối tượng trong game như các Engine khác Thay vào đó, các Developer cóthể kéo thả hoặc thay đổi vị trí của từng đối tượng trong game một cách trực tiếp
- Có thể sử dụng đa nền tảng: Đây là một ưu điểm quan trọng vì nó giúp tiết kiệm nhiều công sức và chi phí cho doanh nghiệp Hãy hình dung việc bạn tạo ra một chương trình game mà nó có thể chạy được trên hầu hết hệ điều hành như Mobile (iOS, Android), Desktop (Window, Mac và Linux) hoặc Web (WebGL)
- Sử dụng miễn phí, đây là ưu điểm thu hút đông đảo Developer chọn làm việc với game engine này Song, với việc game được tạo ra miễn phí thì điều bắt buộc là phải có Logo Unity trong game đó
- Unity hỗ trợ rất nhiều định dạng asset khác nhau và có thể tự động di chuyển đến định dạng phù hợp nhất với nền tảng thích hợp