Date post: | 28-Feb-2023 |
Category: |
Documents |
Upload: | khangminh22 |
View: | 3 times |
Download: | 0 times |
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
NGUYỄN PHI HẬU
XÂY DỰNG GAME NÉM GẠCH
ĐỒ ÁN TỐT NGHIỆP
NGÀNH: CÔNG NGHỆ THÔNG TIN
(ỨNG DỤNG PHẦN MỀM)
NIÊN KHÓA: 2017 - 2020
Đà Nẵng, 01/2021
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
NGUYỄN PHI HẬU
MÃ HSSV: CCCT17A003
XÂY DỰNG GAME NÉM GẠCH
ĐỒ ÁN TỐT NGHIỆP
NGÀNH: CÔNG NGHỆ THÔNG TIN
(ỨNG DỤNG PHẦN MỀM)
Giảng viên hƣớng dẫn: ThS. Nguyễn Thanh Cẩm
Đà Nẵng, 01/2021
i
LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn Khoa Khoa học máy tính, trƣờng ĐH CNTT và
Truyền thông Việt Hàn đã tạo điều kiện tốt cho em thực hiện đề tài này.
Em xin chân thành cảm ơn Thầy Nguyễn Thanh Cẩm, là ngƣời đã tận tình hƣớng
dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài.
Em xin cảm ơn sâu sắc đến quý Thầy Cô trong Khoa đã tận tình giảng dạy, trang
bị cho chúng em những kiến thức quí báu trong những năm vừa qua.
Em xin gửi lòng biết ơn sâu sắc đến Ba, Mẹ, các anh chị và bạn bè đã an ủng hộ,
giúp đỡ và động viên chúng em trong những lúc khó khăn cũng nhƣ trong suốt thời
gian học tập và nghiên cứu.
Mặc dù em đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép,
nhƣng chắc chắn không thể tránh những thiếu sót, kính mong sự thông cảm và tận tình
chỉ bảo của quí Thầy Cô và các bạn.
Sinh viên thực hiện
Nguyễn Phi Hậu
ii
MỤC LỤC
LỜI CẢM ƠN ...................................................................................................................i
MỤC LỤC ...................................................................................................................... ii
DANH MỤC HÌNH ẢNH ............................................................................................... v
LỜI MỞ ĐẦU ................................................................................................................. 1
1. Lý do chọn đề tài ................................................................................................... 1
2. Mục tiêu và nhiệm vụ nghiên cứu ......................................................................... 1
3. Đối tƣợng và phạm vi nghiên cứu ......................................................................... 2
4. Phƣơng pháp nghiên cứu ....................................................................................... 2
5. Dự kiến kết quả ..................................................................................................... 2
6. Ý nghĩa khoa học và thực tiễn ............................................................................... 2
7. Nội dung đồ án tốt nghiệp ..................................................................................... 2
CHƢƠNG 1: CƠ SỞ LÝ THUYẾT ................................................................................ 3
1.1. TỔNG QUAN VỀ UNITY ................................................................................ 3
1.1.1. Unity là gì? .................................................................................................. 3
1.1.2. Tính năng của Unity .................................................................................... 3
1.1.3. Sơ lƣợc lịch sử hình thành và phát triển của Unity ..................................... 5
1.2. TỔNG QUAN VỀ GAME ENGINE ................................................................. 6
1.2.1. Khái niệm .................................................................................................... 6
1.2.2. Mục đích ...................................................................................................... 6
1.2.3. Ảo hóa phần cứng (trừu tƣợng hóa phần cứng – Hardware Abstraction) ... 7
1.2.4. Lịch sử ......................................................................................................... 7
1.2.5. Xu hƣớng hiện tại ........................................................................................ 7
1.2.6. Phần mềm trung gian .................................................................................. 8
1.3. TỔNG QUAN KIẾN TRÚC GAME ENGINE ................................................. 8
1.4. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C# ............................................. 11
1.4.1 Tổng quan về C# ............................................................................................ 11
1.4.2 Các đặc điểm của C# ..................................................................................... 11
1.4.3 Ƣu điểm và nhƣợc điểm của C# .................................................................... 12
1.5. TÌM HIỂU VỀ CÔNG CỤ HỖ TRỢ VISUAL STUDIO .................................. 12
1.5.1 Giới thiệu ....................................................................................................... 12
1.5.2 Lý do nên dùng Visual Studio ....................................................................... 12
iii
CHƢƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG ................................................... 14
2.1. CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG ............................................................... 14
2.1.1. Rendering (kết xuất hình ảnh) ................................................................... 14
2.1.2. Lighting (ánh sáng) ................................................................................... 14
2.1.3. Terrains (địa hình) ..................................................................................... 14
2.1.4. Substances (Texture thông minh).............................................................. 14
2.1.5. Physics (vật lý) .......................................................................................... 14
2.1.6. Pathfinding (tìm đƣờng) ............................................................................ 15
2.1.7. Audio (âm thanh) ...................................................................................... 15
2.1.8. Programming (lập trình) ............................................................................ 15
2.1.9. Networking ................................................................................................ 15
2.2. CÁC THÀNH PHẦN XÂY DỰNG GAME ................................................... 15
2.2.1. GameObject ............................................................................................... 15
2.2.2. Component ................................................................................................ 16
2.2.3. Sprite ......................................................................................................... 17
2.2.4. Animation .................................................................................................. 18
2.2.5. Key Frame ................................................................................................. 19
2.2.6. Prefabs ....................................................................................................... 19
2.2.7. Sound ......................................................................................................... 19
2.2.8. Script ......................................................................................................... 20
2.2.9. Scene ......................................................................................................... 21
2.2.10. Assets ........................................................................................................ 21
2.2.11. Camera ...................................................................................................... 22
2.2.12. Transform .................................................................................................. 23
2.3. MỘT SỐ VẤN ĐỀ VÀ GIẢI PHÁP KHI XÂY DỰNG GAME .................... 23
2.3.1. Load hoạt họa ............................................................................................ 23
2.3.2. Thêm sự kiện vào chuyển động của nhân vật ........................................... 24
2.3.3. Xây dựng giao diện Game ......................................................................... 24
2.3.4. Âm thanh trong game ................................................................................ 26
CHƢƠNG 3: CHƢƠNG TRÌNH DEMO ..................................................................... 30
3.1. GIỚI THIỆU GAME .......................................................................................... 30
3.2. CÁC QUY LUẬT CHƠI CHÍNH ....................................................................... 30
iv
3.2.1. Di chuyển ...................................................................................................... 30
3.2.2. Điểm.............................................................................................................. 31
3.2.3. Tạm dừng game ......................................................................................... 31
3.3. DỮ LIỆU GAME NÉM GẠCH ...................................................................... 32
3.3.1. Màn hình bắt đầu lập trình ........................................................................ 32
3.3.2. Các Script có trong Game ......................................................................... 33
KẾT LUẬN ................................................................................................................... 34
TÀI LIỆU THAM KHẢO ..............................................................................................vi
v
DANH MỤC HÌNH ẢNH
Hình 1.1. Hình minh họa đa nền ...................................................................................... 3
Hình 1.2. Tổng quan kiến trúc Unity ............................................................................. 10
Hình 2.1. Các GameObject ............................................................................................ 16
Hình 2.2. Các thành phần trong đối tƣợng .................................................................... 17
Hình 2.3. Sprites ............................................................................................................ 18
Hình 2.5. Các prefabs .................................................................................................... 19
Hình 2.7. Lập trình Unity bằng C# trên Visual Studio .................................................. 20
Hình 2.8. Các script cấu tạo game hoàn chỉnh .............................................................. 21
Hình 2.9. Các Scene ...................................................................................................... 21
Hình 2.10. Các thành phần trong file Assets ................................................................. 22
Hình 2.12. Transform .................................................................................................... 23
Hình 2.13. Các prefab .................................................................................................... 24
Hình 2.14. Hàm destroy ................................................................................................. 24
Hình 2.15. GUI Button .................................................................................................. 25
Hình 2.16. Áp dụng GUIStyle lên Label ....................................................................... 25
Hình 2.17. Vẽ hình ảnh trên GUI .................................................................................. 26
Hình 2.18. Thêm thành phần Audio Source .................................................................. 27
Hình 2.19. Thêm file âm thanh cho thành phần AudioSource ...................................... 27
Hình 2.20. Thông tin âm thanh ...................................................................................... 28
Hình 3.1. Màn hình để bắt đầu chơi .............................................................................. 30
Hình 3.2. Màn hình để chơi game ................................................................................. 31
Hình 3.3. Màn hình GameOver ..................................................................................... 31
Hình 3.4. Pause Game ................................................................................................... 32
Hình 3.5. Tổng thể các scene để lập trình ..................................................................... 32
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 1
LỜI MỞ ĐẦU
1. Lý do chọn đề tài
Trong thời đại công nghệ thông tin nhƣ hiện nay, sản phẩm công nghệ ngày càng
chịu sự đánh giá khắt khe hơn từ phía những ngƣời dùng, đặc biệt là về sản phẩm
Game đƣợc nhận rất nhiều sự đánh giá từ phía các Game thủ, hay chỉ là 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à bùng nổ, với tốc độ
phát triển chóng mặt, rất nhiều những Game hay và hấp dẫn đƣợc ra đời trong thời
quan qua. Phía sau những Game phát triển và nổi tiếng nhƣ vậy đều có một Game
Engine. Game Engine là công cụ hỗ trợ, một Middleware giúp ngƣời phát triển viết
Game một cách nhanh chóng và đơn giản, đồng thời cung cấp khả năng tái sử dụng tài
nguyên và mã nguồn cao do có thể phát triển nhiều Game từ một Game Engine.
Từ xu hƣớng phát triển và những bất cập trên, đồ án này sẽ khảo sát và nghiên
cứu về Engine Unity – một Game Engine rất phổ biến và không kém mạnh mẽ hiện
nay nhằm thực nghiệm việc phát triển một trò chơi (Demo) Ném gạch 2D. Chuẩn bị
kiến thức và kỹ năng cho định hƣớng nghề nghiệp (phát triển Game) sau này của
chúng em, góp phần vào sự phát triển của ngành công nghiệp Game nƣớc nhà. Các
chƣơng đầu trong tài liệu sẽ trình bày lần lƣợt các khái niệm chung về Game Engine
và thế giới 2D.
Các chƣơng tiếp theo sẽ giới thiệu về Engine Unity bao gồm các đặc điểm, tính
năng, công cụ và thành phần trong Engine này. Sau những nội dung về thiết kế, tài liệu
sẽ trình bày về việc lập trình trên Unity khi giới thiệu về ngôn ngữ lập trình cùng các
lớp, hàm trong thƣ việc dựng sẵn của Unity thông qua các ví dụ thực tế khi phát triển
một game Ném gạch. Cuối cùng là giới thiệu về bối cảnh, cốt truyện, tài liệu hƣớng
dẫn sử dụng của trò chơi Demo cùng chƣơng tổng kết về các khó khăn và những thành
quả trong suốt quá trình phát triển trò chơi Demo trên Unity.
2. Mục tiêu và nhiệm vụ nghiên cứu
Mục tiêu nghiên cứu
- Xây dựng đƣợc game hoàn chỉnh.
- Tạo hiệu ứng và âm thanh
Nhiệm vụ nghiên cứu
- Tìm hiểu xây dựng kịch bản game trên Unity.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 2
3. Đối tƣợng và phạm vi nghiên cứu
Đối tƣợng nghiên cứu
- Lập trình game trên Unity
Phạm vi nghiên cứu
- Xây dựng game hoàn thành ở mức độ cơ bản
4. Phƣơng pháp nghiên cứu
- Nghiên cứu lý thuyết.
- Tham khảo internet.
- Xây dựng game theo mục tiêu đề ra.
5. Dự kiến kết quả
- Hoàn thành game Ném gạch.
6. Ý nghĩa khoa học và thực tiễn
Ý nghĩa khoa học
- Tìm hiểu về thị trƣờng game
- Nghiên cứu cách làm game 2D
Ý nghĩa thực tiễn
- Học hỏi và tích lũy kinh nghiệm về làm game
- Biết đƣợc cách tạo ra game
7. Nội dung đồ án tốt nghiệp
Ngoài phần mở đầu, kết luận và tài liệu tham khảo, nội dung của đồ án tốt nghiệp
gồm các chƣơng sau:
Chƣơng 1. Cơ sở lý thuyết.
Chƣơng 2. Phân tích thiết kế hệ thống.
Chƣơng 3. Chƣơng trình Demo.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 3
CHƢƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. TỔNG QUAN VỀ UNITY
1.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.
Unity đƣợc dùng để làm video game, hoặc những nội dung có tính tƣơng tác nhƣ
thể hiện kiến trúc, hoạt hình 2D, 3D thời gian thực. Unity hao hao với Director,
Blender game engine, Virtools hay Torque Game Builder trong khía cạnh dùng môi
trƣờng đồ họa tích hợp ở quá trình phát triển game là chính.
Sức mạnh Unity có thể tạo ra đƣợc nhiều loại game 2D. 3D đa dạng, dễ sử dụng
với ngƣời làm game chƣa chuyên nghiệp, chất lƣợng cao, chạy hầu hết trên các hệ điều
hành.
Hình 1.1. Hình minh họa đa nền
1.1.2. Tính năng 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.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 4
- Môi trƣờng phát triển đƣợc tích hợp với tính năng kế thừa, khả năng chỉnh sửa
đồ họa, chức năng kiếm tra chi tiết, và đặc biệt tính năng xem trƣớc game trong ngay
lúc xây dựng (live game preview).
- Chƣơng trình độc lập trên Windows mà Mac OS.
- Trên web, thông qua Unity Web Player plugin cho Internet Explorer, FireFox,
Safari, Opera, Chrome, cha cả Windows và Mac OS.
- Trên Mac OS Dashboard widget.
- Cho Nintendo Wii (cần mua license thêm)
- Cho iPhone, iPad application (cần mua license thêm)
- Cho Google Android (cần mua license thêm)
- Cho Microsoft Xbox 360 (cần mua license thêm)
- Cho Sony PlayStation 3 (cần mua license thêm)
- Hỗ trợ đa nền tảng: Một trong các thế mạnh của Unity 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: Unity đƣợc built trong một môi trƣờng phát triển tích hợp, cung
cấ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 Unity 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 Unity
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.
- Sự tiện lợi: Nếu chùng ta là một ngƣời chuyên dùng 3Dmax. Hay Maya hoặc
phần mềm mã nguồn mở Blender thì quả là thật tuyệt, chúng ta sẽ có một lợi thế lớn
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 5
khi viết game trên Unity này, bởi công việc tạo các mô hình 2D, 3D sẽ trở nên dễ dàng
hơn rất nhiều, việc kết hợp giữa ngƣời lập trình và ngƣời thiết kế các mô hình sẽ nhanh
và hiệu quả hơn. Trong Unity chúng ta có thể import trực tiếp các file mô hình đang
thiêt kế và sẽ thiết kế hoàn thiện tiếp nếu nhƣ chƣa xong trong đó công việc import chỉ
diễn ra một lần. Không nhƣ việc phải dùng các công cụ khác để thực hiện viết game
chúng ta sẽ phải xuất chúng ra một dạng nào đó và mỗi lần sửa lại phần mô hình
chúng ta lại phải import lại, và nhƣ thế là quá mất thời gian trong việc tạo và chỉnh sửa
các mô hình theo ý muốn. Ngoài ra Unity còn cho chúng ta trực tiếp tạo các mô hình
nếu muốn. Việc đặt các thuộc tính vật lý trong Unity cũng cực kỳ dễ dàng và hỗ trợ
sẵn nhiều chức năng.
1.1.3. Sơ lƣợc lịch sử hình thành và phát triển của Unity
a) Hình thành
Phần lõi của Unity ban đầu đƣợc viết với Joachim Ante vào năm 2001. Sau đó
công ty đƣợc hình thành vào năm 2005 và bắt đầu phiên bản 1.0. Đến năm 2007, Unity
đƣợc nâng lên phiên bản 2.0. Unity chính thức hỗ trợ Android và cho ra đời phiên bản
3.0 có hỗ trợ Android vào tháng 9/2010 và bây giờ là phiên bản Unity 5. Có thể thấy
tốc độ phát triển của Unity khá nhanh.
b) Giải thƣởng
Unity đã đoạt đƣợc nhiều giải lớn với những giải chính nhƣ sau:
- Năm 2006, Unity đạt Best Use of Mac OS X Graphics tại Apple’s WWDC.
Đây là lần đầu tiên một dụng cụ phát triển game đạt đƣợc giải chất lƣợng do giải
thƣởng uy tín này đƣa ra.
- Năm 2009, Unity Technologies có tên trong Top 5 công ty game của năm do
Gamasutra tổ chức.
- Năm 2010, Unity đạt giải Best Engine Finalist do Develop Magazine bình chọn,
giải Technology Innovation Award của Wall Street Journal ở thể loại phần mềm
c) Khách hàng
Unity đƣợc trên 250.000 ngƣời đăng ký sử dụng gồm Bigpoint, Cartoon
Network, Coca-Cola, Disney, Electronic Arts, LEGO, Microsoft, NASA, Ubisoft,
Warner Bros, các hãng phim lớn nhỏ, các chuyên gia độc lập, sinh viên và những
ngƣời đam mê
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 6
1.2. TỔNG QUAN VỀ GAME ENGINE
1.2.1. Khái niệm
Một game engine là một phần mềm đƣợc viết để thiết kế và phát triển video
game, hiểu đơn giản nó là loại phần mềm trung gian kết nối tƣơng tác của nhiều ứng
dụng trong cùng 1 hệ thống với nhau. Có rất nhiều loại game engine dùng để thiết kế
game cho các hệ máy nhƣ hệ consoles hay máy tính cá nhân(PC). Chức năng cốt lõi
của game engine phần lớn nằm trong công cụ dựng hình (kết xuất đồ họa) cho các hình
ảnh 2 chiều (2D) hay 3 chiều(3D), công cụ vật lý (hay công cụ tính toán và phát hiện
va chạm), âm thanh, mã nguồn, hình ảnh động (animation), 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. Quá
trình phát triển Game tiết kiệm đƣợc rất nhiều thời gian và kinh phí vào việc tái sử
dụng và tái thích ứng một Engine để tạo nhiều Game khác nhau.
1.2.2. Mục đích
Game Engine cung cấp một bộ các công cụ phát triển trực quan và có thể tái sử
dụng từng thành phần trong đó. Nói chung các bộ công cụ này cung cấp một môi
trƣờng phát triển tích hợp đƣợc đơn giản hóa. Phát triển ứng dụng nhanh (Rapid
Application Development) cho Game theo cách lập trình hƣớng dữ liệu. Những Game
Engine này đôi khi còn đƣợc gọi là các phần mềm trung gian cho Game (Game
Middleware), nhƣ ý nghĩa của thuật ngữ, chúng cung cấp một nền tảng phần mềm linh
hoạt và dễ dàng sử dụng lại với mọi chức năng cốt lõi cần thiết ngay trong nó để có thể
phát triển một ứng dụng Game đồng thời giảm giá thành, độ phức tạp, và kịp thời hạn
phát hành tất cả các yếu tố quan trọng trong ngành công nghiệp Game đầy cạnh tranh.
Giống nhƣ các phần mềm trung gian khác, Game Engine thƣờng cung cấp một nền
tảng trừu tƣợng hóa, cho phép một Game có thể chạy trên nhiều hệ máy bao gồm các
hệ console hoặc máy tính cá nhân với một vài thay đổi trong mã nguồn của Game đó.
Thông thƣờng, phần mềm trung gian cho Game đƣợc thiết kế với một nền tảng kiến
trúc dựa trên các thành phần khác, cho phép các hệ thống khác nhau trong Engine có
thể thay thế hoặc mở rộng với các phần mềm trung gian khác chuyên biệt hơn nhƣ là
Havok cho hệ thống vật lý trong Game, Miles Sound System cho âm thanh, hay Bink
cho các đoạn video. Một số Game Engine chỉ cung cấp khả năng dựng hình 3D thời
gian thực hay một khả năng riêng biệt nào khác thay vì rất nhiều chức năng trong
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 7
phạm vi rộng mà Game yêu cầu. Loại Engine này thƣờng đƣợc gọi là: Graphics
Engine . Một vài ví dụ cho các Engine đồ họa là: RealmForge, Truevision3D, OGRE,
Crystal Space, Genesis3D, Vision Engine, Irrlich và JMonkey Engine.
1.2.3. Ảo hóa phần cứng (trừu tƣợng hóa phần cứng – Hardware Abstraction)
Thông thƣờng, Engine 3D hay hệ thống kết xuất đồ họa trong hame Engine
thƣờng đƣợc xây dựng trên một nền tảng giao diện lập trình ứng dụng đồ họa nhƣ
Direct3D hay OpenGl cung cấp sẵn một hệ ảo hóa cho GPU hay card đồ họa. Thƣ viện
mã nguồn cấp thấp nhƣ DirectX, SDL, và OpenAL (thƣ viện âm thanh mã nguồn mở)
cũng thƣờng đƣợc sử dụng trong các Game khi chúng cung cấp khả năng truy cập
phần cứng độc lập.
1.2.4. Lịch sử
Thuật ngữ Game Engine xuất hiện vào giữa những năm 90, đặc biệt là trong
mối quan hệ giữa Game 3D. Nhƣ các thƣơng hiệu nổi tiếng của Software: Doom và
Quake, thay vì phải làm việc từ đầu, các nhà phát triển khác sẽ có quyền truy nhập vào
phần lõi của Game và thiết kế hình ảnh, nhân vật, vũ khí, và các màn chơi của riêng họ
- gọi là Game Content (nội dung Game) hay Game Assets . Các game sau này, nhƣ
Quake III Arena và sản phẩm năm 1988 của Epic Games: Unreal đƣợc thiết kế với
cách tiếp cận mới này, Game Engine và nội dung Game đƣợc chia thành các phần
riêng biệt để phát triển. Engine có thể tái sử dụng khiến việc phát triển Game tiếp theo
nhanh hơn và dễ dàng hơn, một thuận lợi to lớn trong ngành công nghiệp cạnh tranh
này. Game Engine hiện đại là một trong những ứng dụng đƣợc viết ra (bằng các ngôn
ngữ lập trình) phức tạp nhất, thƣờng xuyên phải có rất nhiều tinh chỉnh trong hệ thống
để đảm bảo kiểm soát chính xác trải nghiệm ngƣời dùng. Sự phát triển liên tục của
Game Engine đã tạo ra một sự phân chia mạnh mẽ giữa các công việc dựng hình, viết
kịch bản, thiết kế hình ảnh, và thiết kế màn chơi. Hiện nay thông thƣờng một đội ngũ
phát triển Game điển hình phải có số lƣợng họa sĩ gấp vài lần số lƣợng lập trình viên.
1.2.5. Xu hƣớng hiện tại
Với công nghệ tạo Game Engine càng phát triển và trở nên thân thiện hơn với
ngƣời dùng, ứng dụng của nó càng đƣợc mở rộng, và giờ đây đƣợc sử dụng để tạo các
Game mang mục đích khác với giải trí đơn thuần nhƣ: mô phỏng, huấn luyện ảo, y tế
ảo, và mô phỏng các ứng dụng quân sự. Nhiều Game Engine đang đƣợc tạo ra bằng
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 8
các ngôn ngữ lập trình cấp cao nhƣ Java cà C# hay.NET (ví dụ: TorqueX, và
Visual3D.NET) hay Python (Panda3D). Vì hâu hết các game 3D hiện nay đều có giới
hạn cho GPU, khả năng gây chậm của các ngôn ngữ lập trình cấp cao trở nên không
đáng kể, trong khi việc tăng năng suất đƣợc cung cấp bởi các ngôn ngữ này lại có lợi
nhuận cho các nhà phát triển Game Engine.
1.2.6. Phần mềm trung gian
Một số hãng hiện nay chuyên tập trung vào phát triển các bộ phần mềm gọi là
phần mềm trung gian (Middleware). Các nhà phát triển Middleware cố gắng phát triển
một bộ phần mềm mạnh mẽ bao gồm hầu hết các yếu tố một nhà phát triển Game cần
đến để xây dựng một Game. Phần lớn các Middleware cung cấp các cơ sở để phát triển
Game một cách dễ dàng, nhƣ hình ảnh, âm thanh, hệ thống vật lý và chức năng AI.
Gamebryo và RenderWare là hai phần mềm trung gian đƣợc sử dụng rộng rãi. Một số
Middleware chỉ làm một chức năng nhƣng nó còn hiệu quả hơn cả toàn bộ Engine. Ví
dụ, SpeedTree đƣợc sử dụng để dựng hình ảnh cây cối thêm thực tế trong Game nhập
vai The Elder Scrolls IV: Oblivion. Bốn gói phần mềm trung gian đƣợc sử dụng rỗng
rãi nhất, thƣờng đƣợc cung cấp dƣới dạng một chức năng bổ sung trong một hệ thống
Engine gồm có Bink của hãng RAD Game Tools, hãng Firelight với FMOD, Havok,
và GFx của Scaleform. RAD Game Tools phát triển Bink cho dựng hình video cơ bản,
đi cùng với âm thanh Miles, và dựng hình ảnh 3D Granny. FMOD của Firelight là một
thƣ viện và bộ công cụ phần mềm âm thanh mạnh mẽ giá rẽ. Havok cung cấp một hệ
thống mô phỏng vật lý mạnh, cùng với các bộ phần mềm về hình ảnh động và mô
phỏng hành vi. Scaleform đem lại GFx dùng cho các biểu diễn cao cấp trên nền giao
diện Flash, cùng với các giải pháp trình chiếu video chất lƣợng cao, và một Input
Method Editor (IME) phần bổ sung nhằm hỗ trợ trò chuyện trong Game bằng ngôn
ngữ Châu Á
1.3. TỔNG QUAN KIẾN TRÚC GAME ENGINE
- Quá trình phát triển game tiết kiệm đƣợc rất nhiều thời gian và kinh phí vào
việc tái sử dụng và tái thích ứng một engine để tạo nhiều game khác nhau.
- Game Engine không chỉ bao gồm thành phần tạo hình ảnh mà bao gồm rất
nhiều thành phần khác nhƣ điều khiển luồng, quản lý bộ nhớ, điều khiển âm thanh…
Nếu Engine chỉ có chức năng render hình ảnh thì thƣờng đƣợc gọi là Graphic Engine.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 9
- Việc lựa chọn một Game Engine trƣớc khi phát triển sẽ giúp chúng ta giảm
thiểu những sai sót không đáng có trong quá trình phát triển phần mềm. Có một số tiêu
chí chúng ta cần chú ý nhƣ sau:
Giá thành: Một số Game Engine có giá thành cao, tuy có rất nhiều chức năng và
khả năng hỗ trợ tốt. Do vậy chúng ta cần xem xét đến vấn đề này trƣớc tiên. Nếu là
ngƣời lập trình thông thƣờng thì với mức giá khoảng 1500$ cho 1 Engine rõ ràng là
một vấn đề lớn. Thông thƣờng hiện nay có khá nhiều Engine không tính phí cho hiệu
năng cao. Từ phần tiếp theo chúng ta sẽ chỉ bàn đến các Engine free này mà thôi.
Hiệu năng: Trƣớc khi chúng ta lựa chọn một Engine, chúng ta cần kiểm tra hiệu
năng của Engine này trên nền tảng mà chúng ta hƣớng đến. Ví dụ: Một engine có hiệu
năng cao trên PC nhƣng lại cho hiệu năng thấp hoặc không hỗ trợ đầy đủ trên Android.
Hoặc 1 Engine chỉ cho 1-2 FPS (Frame Per Second) trong khi 1 Engine khác cho 30
FPS với cùng một cách lập trình.
Cộng đồng: Số lƣợng ngƣời sử dụng rõ ràng nói lên chất lƣợng của Engine đó.
Đồng thời, nhiều ngƣời sử dụng và nhiều lập trình viên có nghĩa là khi bạn vƣớng mắc
một vấn đề nào đó, khi đƣa câu hỏi lên, sẽ nhanh có câu trả lời hơn, và câu trả lời chất
lƣợng hơn.
Tài liệu: Nếu một Engine không có tài liệu cụ thể, r ràng đó là một engine
không tốt. Tài liệu cụ thể sẽ giúp bạn rất nhiều khi mới làm quen với Engine, cũng nhƣ
giải quyết các vấn đề về thiết kế cũng nhƣ các vấn đề xảy ra trong khi lập trình.
Mã nguồn: đôi khi các tài liệu không có đủ thông tin, chúng ta cần tìm hiểu mã
nguồn để hiểu cách xử lý của Engine. Một số Engine mặc dù Free nhƣ lại có mã nguồn
đóng. Do đó chúng ta cần có sự lựa chọn. Hoặc đôi khi mã nguồn của Engine không
thực sự phù hợp với yêu cầu của chúng ta, khi đó chúng ta cần sửa đổi mã nguồn của
Engine đó. Mã nguồn mở cũng giúp cho việc sửa lỗi nhanh hơn do có nhiều ngƣời có
thể đóng góp hơn.
Các tính năng: R ràng mục đích của chúng ta khi sử dụng Engine là tiết kiệm
thời gian phát triển và dễ dàng hơn trong quá trình phát triển. Do đó một Engine có
nhiều tính năng hơn sẽ giúp chúng ta nhiều hơn, phù hợp hơn trong nhiều ứng dụng.
- Qua 6 điểm trên, chúng ta có thể đánh giá và đƣa ra quyết định của mình khi sử
dụng một Engine nào đó.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 10
- Engine Unity hỗ trợ cho chúng ta UnityAPI để viết script game. UnityAPI là
API lập trình game trong Unity rất mạnh. UnityAPI chứa các đối tƣợng và phƣơng
thức hỗ trợ hầu hết các đối tƣợng và các loại thành phần trong Unity.
- Trong một scene thƣờng có nhiều đối tƣợng game. Mỗi đối tƣợng này có thể có
hoặc không có đoạn script nào gắn lên đó. Nếu muốn gắn script vào đối tƣợng, ta bắt
buộc phải kế thừa class đó từ lớp MonoBehaviour của UnityAPI và tên class phải
trùng với tên file script. Mỗi script khi gắn lên đối tƣợng game đều đƣợc đối tƣợng
game xem nhƣ một thành phần bên trong và đƣợc cấp phát vùng nhớ khi chạy game.
Hình 1.2. Tổng quan kiến trúc Unity
- MonoBehaviour: tất cả các script muốn gắn vào một đối tƣợng game bắt buộc
phải kế thừa từ lớp này.
- GameObject: lớp cha của tất cả các thực thể trong scene.
- Component: lớp cha của tất cả các thành phần có thể gắn vào đối tƣợng.
- Transform: giúp thay đổi vị trí, xoay, biến đổi tỉ lệ mô hình.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 11
- Input: hỗ trợ lập trình với chuột, cảm ứng đa điểm, cảm biến gia tốc.
- Camera: giúp lập trình camera.
- Light: giúp tạo ánh sáng trong game.
- Projector: giúp chiếu texture lên bề mặt vật thể
- ParticleEmitter: hỗ trợ tạo các hiệu ứng particle đẹp mắt.
- Audio: hỗ trợ lập trình với âm thanh.
- Animation: chạy chuyển động của mô hình nhân vật
- Rigibody: giúp tạo hiệu ứng vật lý liên quan đến trọng lực nhƣ bóng nẩy, lăn
- CharacterController: giúp điều khiển nhân vật di chuyển theo độ cao địa hình
- Collider: hỗ trợ lập trình va chạm giữa các vật thể.
- GUI: giúp lập trình giao diện ngƣời dùng trên Unity.
1.4. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C#
1.4.1 Tổng quan về C#
C# là một ngôn ngữ lập trình theo phƣơng pháp lập trình hƣớng đối tƣợng và lập
trình trực quan đƣợc phát triển bởi Microsoft.
C# ra đời năm 2000, đƣợ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…
Đƣợc xây dựng trên nền tảng của hai ngôn ngữ lập trình mạnh nhất đó là C++ và
Java. Do đó C# đƣợc miêu tả là ngôn ngữ có sự cân bằng giữa C++, Pascal, Delphi và
Java.
C# với sự hỗ trợ mạnh mẽ của.NET Framework giúp cho việc tạo một ứng dụng
Windows Forms hay WPF (Windows Presentation Foundation)… trở nên rất dễ dàng.
1.4.2 Các đặc điểm của C#
- Là một ngôn ngữ hƣớng đối tƣợng, trực quan.
- Tám mƣơi từ khóa và hơn mƣời kiểu dữ liệu đƣợc dựng sẵn.
- Cung cấp những đặc tính hƣớng thành phần (component - oriented) nhƣ là
Property, Event.
- C# không khuyến khích sử dụng con trỏ nhƣ C++.
- C# có bộ Garbage Collector (thu gom rác) sẽ tự động thu gom vùng nhớ khi
không còn sử dụng nữa.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 12
- C# đã loại bỏ đa kế thừa trong C++ mà thay vào đó C# sẽ hỗ trợ thực thi giao
diện interface.
Nguyên nhân lựa chọn C# là vì:
C# là một ngôn ngữ đơn giản.
C# là một ngôn ngữ hiện đại.
C# là một ngôn ngữ mạnh mẽ và mềm dẻo.
C# là một ngôn ngữ ít từ khóa.
C# là một ngôn ngữ phổ biến.
C# mang sức mạnh của nhiều ngôn ngữ (C++, Java…)
1.4.3 Ƣu điểm và nhƣợc điểm của C#
- Một số ƣu điểm nổi bật của C#:
+ Gần gũi với các ngôn ngữ lập trình thông dụng (C++, Java, Pascal).
+ Xây dựng dựa trên nền tảng của các ngôn ngữ lập trình mạnh nên thừa hƣởng
những ƣu điểm của những ngôn ngữ đó.
+ Đã cải tiến các khuyết điểm của C/C++ nhƣ con trỏ, các hiệu ứng phụ…
+ Dễ tiếp cận, dễ phát triển.
+ Đƣợc hỗ trợ của.NET Framework.
- Một số nhƣợc điểm:
+ Nhƣợc điểm lớn nhất của C# là chỉ chạy trên nền Windows và có cài.NET
Framework.
+ Thao tác đối với phần cứng yếu hơn so với các ngôn ngữ khác. Hầu hết phải
dựa vào Windows.
1.5. TÌM HIỂU VỀ CÔNG CỤ HỖ TRỢ VISUAL STUDIO
1.5.1 Giới thiệu
Visual Studio là (IDE – Integrated Development Environment) một bộ công cụ
phát triển phần mềm do Microsoft phát triển. Visual Studio cũng là một phần mềm
đƣợc sử dụng bởi các lập trình viên để xây dựng nên các sản phẩm phần mềm.
1.5.2 Lý do nên dùng Visual Studio
- Hỗ trợ lập trình trên nhiều ngôn ngữ nhƣ C/C++, C#, F#, Visual Basic, HTML,
CSS, JavaScript. Phiên bảnVisual Studio 2015 có hổ trợ ngôn ngữ Python.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 13
- Visual Studio là một công cụ hỗ trợ việc Debug một cách mạnh mẽ, dễ dàng
nhất (Break Point, xem giá trị của biến trong quá trình chạy, hỗ trợ debug từng câu
lệnh).
- Giao diện Visual Studio rất dễ sử dụng đối với ngƣời mới bắt đầu.
- Visual Studio hỗ trợ phát triển ứng dụng desktop MFC, Windows
Form,Universal App, ứng dụng mobileWindows Phone 8/8.1, Windows 10, Android
(Xamarin), iOS và phát triển website Web Form, ASP.NET MVC và phát triển
Microsoft Office.
- Visual Studio hỗ trợ kéo thả để xây dựng ứng dụng một cách chuyên nghiệp,
giúp các bạn mới bắt đầu có thể tiếp cận nhanh hơn.
- Visual Studio cho phép chúng ta tích hợp những extension từ bên ngoài nhƣ
Resharper (hổ trợ quản lý và viết mã nhanh cho các ngôn ngữ thuộc.Net), hay việc cài
đặt thƣ viện nhanh chóng thông qua Nuget.
- Visual Studio đƣợc sử dụng đông đảo bởi lập trình viên trên toàn thế giới.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 14
CHƢƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1. CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG
2.1.1. Rendering (kết xuất hình ảnh)
Giống nhƣ tất cả các Engine hoàn chỉnh khác, Unity hỗ trợ đầy đủ khả năng kết
xuất hình ảnh (Rendering) cùng nhiều hỗ trợ cho phép áp dụng các công nghệ phổ biến
trong vực đồ họa 3D nhầm cải thiện chất lƣợng hình ảnh. Các phiên bản gần đây nhất
của Unity đƣợc xây dựng lại thuật toán nhằm cải thiện hiệu suất kết quả hình ảnh đồng
thời tăng cƣơng chất lƣợng hình ảnh sau khi kết xuất.
2.1.2. Lighting (ánh sáng)
Ánh sáng là một điều thiết yếu giúp môi trƣờng trở nên đẹp và thực tế hơn. Unity
cũng cung cấp nhiều giải pháp đa dạng cho phép chúng ta áp dụng ánh sáng một cách
tốt nhất vào môi trƣờng trong trò chơi với nhiều loại nguồn sáng nhƣ ánh sáng có
hƣớng (Directional Light), ánh sáng điểm (Point Light), … Một số công nghệ và kỹ
thuật về ánh sáng đƣợc Unity hỗ trợ: Lingtmapping, Realtime Shadows, hiệu ứng
Sunshafts và Lens Flares
2.1.3. Terrains (địa hình)
Terrains còn gọi chung là địa hình bao gồm phần đất nền của môi trƣờng trong
trò chơi cùng các đối tƣợng gắn liền nhƣ cây, cỏ, …
Unity cung cấp một công cụ hỗ trợ rất tốt khả năng này với tên gọi là Terrains
Tools cho phép chúng ta thiết kế địa hình với các công cụ vẽ dƣới dạng Brush có nhiều
thông số tùy chỉnh để tạo hình và lát Texture cho địa hình. Cùng với Terrain Tools là
Tree Creator, một công cụ mạnh mẽ cho phép chúng ta tạo ra cây cối với hình dạng,
kích thƣớc và kiểu cách đa dạng.
2.1.4. Substances (Texture thông minh)
Substance có thể hiểu đơn giản là một dạng tùy biến Textures nhằm làm đa dạng
chúng trong nhiều điều kiện môi trƣờng khác nhau. Unity cung cấp khả năng này
thông qua các API dựng sẵn trong thƣ viện, hỗ trợ lập trình viên lập trình để tùy biến
hình ảnh đƣợc kết quả của Texture
2.1.5. Physics (vật lý)
Physx là một Engine mô phỏng và xử lí vật cực kỳ mạnh mẽ đƣợc phát triển bởi
nhà sản xuất card đồ họa hàng đầu thế giới NVIDIA. Unity đã tích hợp Engine này vào
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 15
để đảm nhận mọi vấn đề vật lý. Một số vấn đề vật lý đƣợc hỗ trợ bởi Unity nhƣ: Soft
Bodies,Rigibodies, Ragdolls, Joints, Cars,…
2.1.6. Pathfinding (tìm đƣờng)
Đây là một tính năng rất mới mẻ đến từ phiên bản Unity 3.5. Với các phiên bản
trƣớc, để phát triển khả năng tìm đƣờng cho trí thông minh nhân tạo (AI), nhà phát
triển phải hoàn toàn tự xây dựng cho mình một hệ thống tìm đƣờng riêng biệt. Tuy
nhiên ở phiên bản 3.5 đến nay, Unity hỗ trợ cho chúng ta tình năng Pathfinding cho
phép tạo ra khả năng tìm đƣờng cho AI nhờ vào khái niệm lƣới định hƣớng
(NavMesh).
2.1.7. Audio (âm thanh)
Về âm thanh, Unity tích hợp FMOD – công cụ âm thanh thuộc hàng mạnh nhất
hiện nay. Qua đó Unity hỗ trợ chúng ta nhập và sử dụng nhiều định dạng tập tin âm
thanh khác nhau
2.1.8. Programming (lập trình)
Lập trình là một trong những yếu tố quan trọng nhất trong phát triển Game. Lập
trình cho phép nhà phát triển tạo nên khả năng tƣơng tác, trí thông minh và yếu tố
Gameplay cho trò chơi.
Unity cho phép chúng ta lập trình bằng nhiều ngôn ngữ mạnh mẽ và phổ biến với
các lập trình viên nhƣ: C#, Java Script và Boo.
2.1.9. Networking
Networking cho phép chúng ta tạo ra các trò chơi trực tuyến (online) – một trong
những thể loại trò chơi thu hút đƣợc nhiều ngƣời chơi nhất. Tính năng này sẽ hỗ trợ
đầy đủ để chúng ta tạo nên các khía cạnh phổ biến trong Game online nhƣ hệ thống
điểm kinh nghiệm, chat và tƣơng tác thời gian thực, …
Một số tính năng cung cấp bởi Networking nhƣ: State Synchronization, Realtime
Networking, Remote Procedure Calls, Backend Connectivity, Web Browser
Integration, Web Connectivity.
2.2. CÁC THÀNH PHẦN XÂY DỰNG GAME
2.2.1. GameObject
- Một đối tƣợng cụ thể trong game gọi là một game object, có thể là nhân vật, đồ
vật nào đó.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 16
Ví dụ: cây cối, xe cộ, nhà cửa, ngƣời…
Hình 2.1. Các GameObject
2.2.2. Component
- Một GameObject sẽ có nhiều thành phần cấu tạo nên nó nhƣ là hình ảnh (sprite
render), tập hợp các hành động (animator), thành phần xử lí va chạm (collision), tính
toán vật lý (physical), mã điều khiển (script), các thành phần khác… mỗi thứ nhƣ vậy
gọi là một component của GameObject.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 17
Hình 2.2. Các thành phần trong đối tƣợng
2.2.3. Sprite
- Là một hình ảnh 2D của một game object có thể là hình ảnh đầy đủ, hoặc có
thể là một bộ phận nào đó.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 18
Hình 2.3. Sprites
2.2.4. Animation
- Là tập một hình ảnh động dựa trên sự thay đổi liên tục của nhiều sprite khác
nhau.
Hình 2.4. Animation
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 19
2.2.5. Key Frame
- Key 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.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.
Hình 2.5. Các prefabs
2.2.7. Sound
- Âm thanh trong game.
Hình 2.6. Sound
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 20
2.2.8. Script
- Script là tập tin chứa các đoạn mã nguồn, dùng để khởi tạo và xử lý các đối
tƣợng trong game, có thể xem scripts nhƣ là linh hồn của game
- Trong Unity có thể dùng ngôn ngữ lập trình C#, Java Script, BOO để lập trình
Script.
- Unity có hỗ trợ sẵn phần mềm MonoDeveloper dùng để lập trình.
Hình 2.7. Lập trình Unity bằng C# trên Visual Studio
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 21
Hình 2.8. Các script cấu tạo game hoàn chỉnh
2.2.9. Scene
- Quản lý tất cả các đối tƣợng trong một màn chơi của game
Hình 2.9. Các Scene
2.2.10. Assets
- Bao gồm tất cả những gì phục vụ cho dự án game nhƣ sprite, animation, sound,
script, scenes…
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 22
Hình 2.10. Các thành phần trong file Assets
2.2.11. Camera
- Là một game object đặc biệt trong scene, dùng để xác định tầm nhìn, quan sát
các đối tƣợng khác trong game.
Hình 2.11. Camera
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 23
2.2.12. Transform
- Là 3 phép biển đổi tịnh tiến, quay theo các trục, và phóng to tu nhỏ một đối
tƣợng
Hình 2.12. Transform
2.3. MỘT SỐ VẤN ĐỀ VÀ GIẢI PHÁP KHI XÂY DỰNG GAME
2.3.1. Load hoạt họa
Game 2D đƣợc xây dựng từ nhiều mô hình 2D đƣợc đặt lên không gian 2 chiều
sao cho hài hòa với nhau để tạo thành cảnh vật trong game. Do đó việc nạp và hiển thị
đƣợc mô hình 2D trong game là vô cùng quan trọng.
Mô hình 2D đƣợc cấu tạo từ rất nhiều đa giác để tạo nên khối vật thể. Ngày nay,
trong một mô hình 2D không chỉ đơn thuần chứa một khối vật thể mà nó bao gồm
nhiều khối vật thể đƣợc gắn kết với nhau trên một khung xƣơng. Điều này giúp cho
mô hình không bị gắn chết một chuyển động vào bên trong và dễ dàng thay đổi chuyển
động cho mô hình
Các mô hình 2D, 3D thông thƣờng đƣợc thiết kế sẵn bằng các phần mềm thiết kế
3D chuyên dụng nhƣ Adobe InDesign, Adobe Photoshop, … Sau đó, mô hình sẽ đƣợc
đƣa vào game engine để sử dụng.
Engine Unity hỗ trợ rất nhiều định dạng mô hình 2D, 3D khác nhau nhƣ: PNG,
JPG… khi mô hình đƣợc load vào project ta sẽ chuyển mô hình sang mục Prefab để có
thể tái sử dụng nhiều lần
Unity có hỗ trợ load mô hình bằng cách kéo thẻ Prefab vào vị trí bất ký trong
Scene.
Tuy nhiên, để linh hoạt hơn thì chúng ta có thể xử lý bằng code.
Trƣớc tiên, ta tạo một file script và gắn nó vào một đối tƣợng trong game bất kì
để đoạn script có thể thực thi. Trong file script này, ta khai báo một đối tƣợng kiểu
GameObject để lƣu mô hình và dùng hàm Instantiate() để khởi tạo mô hình này ở vị trí
góc quay mong muốn.
Giải phải ở đây là load mô hình từ Prefab.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 24
Hình 2.13. Các prefab
2.3.2. Thêm sự kiện vào chuyển động của nhân vật
Trong lúc lập trình kịch bản game, chúng ta muốn biết khi nào một nhân vật
chuyển động xong để có bƣớc xử lý tiếp theo. Ví dụ nhƣ sau khi nhân vật thực thi
chuyển động chết thì chúng ta phải hủy đối tƣợng đó khỏi bộ nhớ. Trong Unity, khi
một chuyển động chạy xong không tự phát ra sự kiện.
Tạo một file script chứa hàm sẽ thực thi sau khi sự kiện xảy ra. Chẳng hạn, file
script có nội dung chứa hàm hủy đối tƣợng:
Hình 2.14. Hàm destroy
Khi chạy game, lúc đối tƣợng chạy animation destroy xong thì sự kiện sẽ đƣợc
xảy ra. Nếu chạy animattion khác thì sự kiện không xảy ra.
Việc thêm sự kiện vào mô hình giúp ta kiểm soát chuyển động dễ dàng hơn và
đƣa ra các xử lý thích hợp ở thời điểm nhất định.
2.3.3. Xây dựng giao diện Game
Giao diện đồ họa ngƣời là một phần quan trọng không thể thiếu trong khi xây
dựng một ứng dụng game hay bất cứ một ứng dụng nào để vẽ các đối tƣợng đồ họa
nhƣ Button, Label, Checkbox, Slider, …lên màn hình.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 25
Để làm đƣợc điều này chúng ta dùng lớp GUI, GUI là chữ viết tắt của Graphical
User Interface – Giao diện đồ họa ngƣời dùng . Hệ thống GUI của Unity đƣợc gọi là
GUIUnity. Để sử dụng đƣợc các phƣơng thức trong GUI ta phải gọi thực hiện từ trong
hàm OnGUI() giống nhƣ sự kiện Paint trong C#. Ví dụ sau đây sẽ tạo ra một button
đơn giản.
Hình 2.15. GUI Button
Để tạo một Button hay một thành phần trong GUI đẹp hơn, chúng ta sử dụng
GUIStyle – style cài đặt cho các thành phần của GUI. GUIStyle chứa thông tin về font
chữ, vị trí đặt biểu tƣợng, hình nền, khoảng cách,… Chỉ cần định nghĩa và áp dụng cho
một bất kỳ thành phần nào nhƣ Button, Label, Checkbox,… Ta có thể xem GUIStyle
nhƣ CSS khi thiết kế web site vậy.
Ví dụ sau tạo một Label theo một định nghĩa GUIStyle, với kích thƣớc font là 14,
chữ in đậm. canh lề chữ ở giữa, nàu chữ đỏ, font Beckasin, vị trí vẽ ra, kích thƣớc hình
chữ nhật bao quanh 150x50:
Hình 2.16. Áp dụng GUIStyle lên Label
Để vẽ một Image ra màn hình, chúng ta sử dụng Texture2D, nó tƣơng tự đối
tƣợng Bimap hay Image bên ngôn ngữ C#. Để load hình từ Resources và vẽ ra màn
hình chúng ta dùng phƣơng thức DrawTexture() nhƣ sau:
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 26
Hình 2.17. Vẽ hình ảnh trên GUI
Kết luận: Với lớp GUI trong Unity, chúng ta hoàn toàn xây dựng nên một giao
diện tuyệt vời cho ứng dụng game. Ngoài các phƣơng thức của lớp GUI đã nêu trên thì
còn rất nhiều phƣơng thức vẽ các đối tƣợng khác nhƣ Radio, Checkbox, Slider…
2.3.4. Âm thanh trong game
Âm thanh là yếu tố không kém phần quan trọng trong ứng dụng game. Thật
nhàm chán khi một cảnh đánh nhau, bắn nhau hay các hiệu ứng đẹp mắt mà không có
âm thanh. Âm thanh 3 chiều sẽ làm cho game thực hơn và sống động hơn.
Để chơi đƣợc một file âm thanh trong Unity có 2 cách: bằng code hoặc trên giao
diện. Dù chọn cách nào thì trƣớc hết chúng ta phải có sẵn các file âm thanh và import
vào project.
Chọn đối tƣợng vừa tạo và gắn thành phần AudioSource cho đối tƣợng này.
AudioSource là một đối tƣợng âm thanh. Muốn Play hay stop, thay đổi cách lặp, tăng
giảm volume nhạc thì phải thông qua đối tƣờng này:
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 27
Hình 2.18. Thêm thành phần Audio Source
Sau khi gắn thành phần âm thanh cho đối tƣợng vừa tạo, chúng ta dễ dàng chỉnh
sửa các thông số và gán file âm thanh cho thành phần AudioSource này.
Hình 2.19. Thêm file âm thanh cho thành phần AudioSource
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 28
Hình 2.20. Thông tin âm thanh
Nếu thực hiện xong các bƣớc trên, chúng ta có thể chạy game để nghe thử. Việc
tạo đối tƣợng âm thanh trên giao diện khá đơn giản, nhƣng để áp dụng vào game thì
không đƣợc linh hoạt bằng cách sử dụng script.
Hình 2.21. Sử dụng Script để điều chỉnh âm thanh
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 29
Để chơi đƣợc âm thanh trong Unity thì chỉ cần áp dụng kỹ thuật nêu trên là đủ.
Ngoài ra còn nhiều thành phần khác nhƣ: AudioListener, AudioSetting để tạo hiệu ứng
âm thanh 3 chiều thực hơn cho game.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 30
CHƢƠNG 3: CHƢƠNG TRÌNH DEMO
3.1. GIỚI THIỆU GAME
Đặc trƣng của dòng game tính điểm mà em đã xây dựng là chỉ có 1 ngƣời chơi,
ngƣời chơi phải di chuyển giá đỡ để tung quả bóng bay lên. Khi quả bóng của chúng ta
va vào những viên gạch và vỡ những viên gạch đó thì sẽ đƣợc tính điểm, nếu nhƣ ta
không hứng đƣợc quả bóng thì trò chơi sẽ kết thúc và sẽ hiện ra lại menu để ngƣời
chơi có thể chơi lại hoặc dừng. Chúng ta phải phá hết những viên gạch thì mới chuyển
sang đƣợc level tiếp theo, ban đầu là những viên gạch vàng thì chỉ cần 1 lần va chạm
thì sẽ vỡ, ở những level sau sẽ xuất hiện thêm gạch đỏ và xanh thì sức chịu đựng của
chúng cũng tăng dần lên và va vào chúng 2-3 lần thì sẽ phá vỡ đƣợc. Game có tất cả là
12 level, độ khó cứ tăng dần theo mỗi level.
Hình 3.1. Màn hình để bắt đầu chơi
3.2. CÁC QUY LUẬT CHƠI CHÍNH
3.2.1. Di chuyển
Ngƣời chơi sẽ di chuyển bằng cách chạm vào bên phải hoặc bên trái màn hình, di
chuyển qua trái, qua phải, để có thể đỡ đƣợc quả bóng bay lên, ngƣời chơi chỉ có thể di
chuyển trong phạm vi màn hình camera.
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 31
Hình 3.2. Màn hình để chơi game
3.2.2. Điểm.
Ngƣời chơi sẽ đƣợc cộng điểm khi phá vỡ đƣợc những viên gạch thì ngƣời chơi
sẽ đƣợc cộng 1 điểm.
Hình 3.3. Màn hình GameOver
3.2.3. Tạm dừng game
Khi đang chơi game nếu ngƣời chơi muốn tạm dừng chỉ cần ấn nút II là sẽ dừng
Game
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 32
Hình 3.4. Pause Game
3.3. DỮ LIỆU GAME NÉM GẠCH
3.3.1. Màn hình bắt đầu lập trình
Game đƣợc hình thành bởi 2 Scene trên màn hình:
Hình 3.5. Tổng thể các scene để lập trình
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 33
3.3.2. Các Script có trong Game
Hình 3.6. Các Script
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 34
KẾT LUẬN
Sau nhiều ngày suy nghĩ kĩ để chọn đề tài tốt nghiệp, cuối cùng em cũng đã chọn
đƣợc đề tài Xây dựng game Ném gạch trên Unity.
Bƣớc đầu tìm hiểu về Unity và Game Engine em gặp rất nhiều khó khăn trong
việc tìm tài liệu và xây dựng ý tƣởng game vì tài liệu về unity đa phần bằng tiếng anh,
nhƣng sau khoảng 1 tháng cô gắng tìm tòi, học hỏi và tham khảo trên mạng thì em
cũng đã làm cho mình đƣợc 1 game gần hoàn chỉnh để phục vụ cho đề tài tốt nghiệp.
Trong thời gian làm đề tài em cũng có một số những vấn đề đạt đƣợc và chƣa đạt
đƣợc.
Đạt đƣợc
- Hiểu đƣợc cấu trúc, cách thức hoạt động, cách thức phát triển ứng dụng trên
Unity.
- Nâng cao kiến thức lập trình và tiếng anh chuyên ngành thông qua những tài
liệu về Unity bằng tiếng anh.
- Xây dựng đƣợc nhiều chức năng thông qua ngôn ngữ lập trình C# trên
MonoDevelop
- Tạo âm thanh cho trò chơi và 1 số chức năng khác.
Ngoài những thứ đạt đƣợc thì em còn rất nhiều những vấn đề chƣa đạt đƣợc:
Chƣa đạt đƣợc
- Do kiến thức của em về Unity còn hạn hẹp nên các chức năng trong game còn
nghèo nàn.
- Chƣa xây dựng đƣợc game hoàn chỉnh nhƣ mong muốn.
- Các script trong Unity tổ chức chƣa thực sự rõ ràng.
Thuận lợi
- Vận dụng đƣợc các kiến thức mà em đã học trong trƣờng để làm đồ án này
- Đƣợc sự chỉ dạy tận tình của thầy và các bạn
- Tài liệu rất nhiều trên Internet
Khó khăn
- Unity là một môi trƣờng lập trình mới đối với em nên khi bắt tay vào làm thì
em không biết làm từ đâu và cảm thấy bỡ ngỡ
Kinh nghiệm rút ra
Xây dựng Game ném gạch
Nguyễn Phi Hậu – Lớp CCCT17A 35
- Phải biết sắp xếp thời gian 1 cách hợp lý nếu không sẽ gặp rất nhiều khó khăn
- Làm việc phải tập trung mới có thể hoàn thành tốt đƣợc
Hƣớng phát triển
- Tối ƣu hóa để game có thể chạy nhanh hơn
- Thời gian càng về sau thì tốc độ của quả bóng càng nhanh và tăng độ khó
- Thêm nhiều level và tăng độ khó, kết hợp các item để nâng thêm phần đặc sắc
cho game
- Cung cấp thêm công cụ để ngƣời chơi có thể chọn và chỉnh sửa tạo riêng cho
mình những nhân vật, hiệu ứng âm thanh…
- Cái thiện trí thông minh của máy
vi
TÀI LIỆU THAM KHẢO
[1]. https://www.stdio.vn/unity-game/cac-thanh-phan-co-ban-trong-unity-Cf3Uw1
(8-25/12/2020)
[2]. https://giniwebseo.vn/unity (1-6/12/2020)
[3]. https://unity.com/ (2-30/12/2020)
[4]. https://codelearn.io/ (5-12/12/2020)
[5]. https://www.youtube.com/watch?v=_qPRDKmpEKk (4-10/12/2020)
[6]. https://khoapham.vn/unity.html (4-21/12/2020)