+ All Categories
Home > Documents > XÂY DỰNG GAME NÉM GẠCH - Thư viện số

XÂY DỰNG GAME NÉM GẠCH - Thư viện số

Date post: 28-Feb-2023
Category:
Upload: khangminh22
View: 3 times
Download: 0 times
Share this document with a friend
43
TRƢỜNG ĐẠI HC CÔNG NGHTHÔNG TIN VÀ TRUYN THÔNG VIT - HÀN KHOA KHOA HC MÁY TÍNH NGUYN PHI HU XÂY DNG GAME NÉM GCH ĐỒ ÁN TT NGHIP NGÀNH: CÔNG NGHTHÔNG TIN (NG DNG PHN MM) NIÊN KHÓA: 2017 - 2020 Đà Nẵng, 01/2021
Transcript

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)


Recommended