Tải bản đầy đủ (.pdf) (50 trang)

Game space shooter

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.88 MB, 50 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

Game Space Shooter
Ngành: Khoa học Máy tính

Hội đồng:
GVHD:
GVPB:
SV thực hiện:

Khoa Học Máy Tính 1
Vương Bá Thịnh
Trần Huy
Vũ Minh Dương

Tp. Hồ Chí Minh, Tháng 12/2022

1810885


ĐẠI HỌC QUỐC GIA TP.HCM
---------TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA:KH & KT Máy tính ____
BỘ MƠN: KHMT ___________

CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc



NHIỆM VỤ LUẬN ÁN TỐT NGHIỆP
Chú ý: Sinh viên phải dán tờ này vào trang nhất của bản thuyết trình

HỌ VÀ TÊN: Vũ Minh Dương________________________ MSSV: 1810885 ______
NGÀNH: Khoa học máy tính ___________________ LỚP: MT18 ________________
1. Đầu đề luận án:
Game Space Shooter___________________________________________________________
2. Nhiệm vụ (yêu cầu về nội dung và số liệu ban đầu):
Mô tả đề tài:


Hiện thực game combat trên môi trường không gian

Nhiệm vụ (yêu cầu về nội dung và số liệu ban đầu):


Tìm hiểu về lập trình game trên 1 engine cụ thể


Mô phỏng việc di chuyển có qn tính trong mơi trường khơng trọng lực, kèm theo các
hiệu ứng môi trường như thiên thạch hay các thiên thể có trọng lực


Hệ thống combat cân bằng giữa giáp - máu và nhiệt



Tìm hiểu về networking game




Tìm hiểu AI cho NPC



Thiết kế game phù hợp



Hiện thực game có kiểm thử

3. Ngày giao nhiệm vụ luận án: 03/09/2022
4. Ngày hoàn thành nhiệm vụ: 12/12/2022
5. Họ tên giảng viên hướng dẫn:

Phần hướng dẫn:

1) Vương Bá Thịnh ____________________________________________________________
2) __________________________________________________________________________
3) __________________________________________________________________________
Nội dung và yêu cầu LVTN đã được thông qua Bộ môn.
Ngày ........ tháng ......... năm ..........
CHỦ NHIỆM BỘ MÔN

GIẢNG VIÊN HƯỚNG DẪN CHÍNH

(Ký và ghi rõ họ tên)

(Ký và ghi rõ họ tên)


PHẦN DÀNH CHO KHOA, BỘ MÔN:
Người duyệt (chấm sơ bộ):________________________
Đơn vị: _______________________________________
Ngày bảo vệ: __________________________________
Điểm tổng kết: _________________________________
Nơi lưu trữ luận án: _____________________________




Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

1

Lời cam đoan

Đề cương được thực hiện dựa vào những tìm hiểu, nghiên cứu do tác giả thực hiện dưới sự hướng dẫn của thầy
Vương Bá Thịnh. Tác giả cam đoan các nội dung, số liệu, mơ hình được đưa ra được thực hiện bởi tác giả với sự
hỗ trợ của Giảng viên hướng dẫn và có trích dẫn rõ ràng nếu lấy nguồn từ bên ngồi. Sản phẩm đạt được qua q
trình làm luận văn, ngồi các cơng cụ và asset bên ngồi đa nêu đều do tác giả phát triển. Nếu lời cam đoan khơng
đúng sự thật, tác giả sẽ chịu hồn tồn trách nhiệm và chịu sự xử lý theo qui định của Đại học Bách Khoa - Đại học
quốc gia TP HCM.

Luận văn tốt nghiệp

Trang i/39



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2

Lời cảm ơn

Đầu tiên, tác giả xin được gửi lời cám ơn chân thành đến các Thầy, Cô, Anh Chị giảng viên và trợ giảng,
cán bộ công nhân viên Khoa Khoa học và Kỹ thuật Máy Tính của trường Đại học Bách Khoa - Đại học Quốc Gia
Thành phố Hồ Chí Minh đã cung cấp cho tác giả một nền tảng vững chắc và sự tự tin để xây dựng đề tài. Những
năm dùi mài kinh sử trên giảng đường dưới sự dìu dắt của Khoa là nền móng khơng thể thiếu của luận văn này.
Tác giả xin chân thành cảm ơn thầy Vương Bá Thịnh, giảng viên hướng dẫn đề tài đã chỉ dẫn nhiệt tình và
đúng đắn trong suốt quá trình thực hiện luận văn. Sự đồng hành của thầy là yếu tố mà khơng có nó luận văn khơng
thể hồn thiện.
Cuối cùng nhưng không kém phần quan trọng, tác muốn gửi lời cảm ơn đến những anh chị khóa trên, những
người bạn cùng khóa và những đàn em khóa dưới đã ln bên cạnh gắn bó, chia sẻ kiến thức, tạo động lực và niềm
tin để tác giả có thể tiến bước được tới hiện tại.

Luận văn tốt nghiệp

Trang ii/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

3

Tóm tắt báo cáo


Trong báo cáo này, tác giả sẽ trình bày về những thành quả đạt được trong quá trình nghiên cứu phát triển đề
tài game Space Shooter 2D. Nội dung cụ thể như sau:
• Mơ tả và nêu mục tiêu của đề tài.
• Trình bày các trị chơi liên quan và những cơng nghệ được sử dụng.
• Phân tích và thiết kế các hệ thống cần có của game.
• Hiện thực các hệ thống trên.
• Nêu kết quả đạt được, đánh giá và ra kết luận.

Luận văn tốt nghiệp

Trang iii/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Mục lục
1

Lời cam đoan

i

2

Lời cảm ơn

ii

3


Tóm tắt báo cáo

iii

4

Lời mở đầu

vii

5

Giới thiệu

1

5.1

Mô tả sản phẩm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

5.2

Mục tiêu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

6


7

8

9

Những trò chơi liên quan

3

6.1

Soul Knight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

6.2

Starsector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

Công nghệ sử dụng

8

7.1

Game Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


8

7.2

Thư viện mạng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

7.3

Giải pháp tìm đường cho AI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

Phân tích & thiết kế hệ thống

19

8.1

Thiết kế tổng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

8.2

Hệ thống điều khiển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21


8.3

Hệ thống vũ khí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

8.4

Hệ thống kiểm soát và đồng bộ đạn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

8.5

Hệ thống sát thương và thanh sinh lực . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

8.6

Sinh và phá hủy tàu vũ trụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

8.7

Các thiên thể trong màn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22


8.8

Kiểm soát trạng thái màn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

8.9

Tàu do máy điều khiển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

8.10 Lobby, tạo và vào phòng chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

Hiện thực hệ thống

23

9.1

Hệ thống điều khiển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

9.2

Hệ thống vũ khí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


24

9.3

Hệ thống kiểm soát và đồng bộ đạn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

9.4

Hệ thống sát thương và thanh sinh lực . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

9.5

Sinh và phá hủy tàu vũ trụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

9.6

Các thiên thể trong màn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

9.7

Kiểm soát trạng thái màn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


26

9.8

Tàu do máy điều khiển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

9.9

Lobby, tạo và vào phòng chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

Luận văn tốt nghiệp

Trang iv/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

10 Đánh giá kết quả đạt được

32

11 Kết luận

38


Luận văn tốt nghiệp

Trang v/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Danh sách hình vẽ
1

Game Loop cơ bản của Unity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2

Game Loop vật lý của Unity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

4

Hai client phỏng đoán trạng thái tương lai dựa trên Tick đã được server kiểm chứng . . . . . . . .

11

3


Các tính năng của Photon Fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

5

Đồng bộ hai client với độ trễ khác nhau với server . . . . . . . . . . . . . . . . . . . . . . . . . .

13

6

Các bước hành vi của nhân vật chuyển động . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

7

Một trường hợp mà Steering Behaviour sẽ cho ra biểu hiện không tự nhiên . . . . . . . . . . . . .

15

8

Context Map tròn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

9


Context Map dạng phẳng dùng cho game đua xe . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

10

Context Map mang tên interest cho hành vi tiến tới mục tiêu . . . . . . . . . . . . . . . . . . . .

16

11

Context Map mang tên danger cho hành vi tránh vật cản . . . . . . . . . . . . . . . . . . . . . .

16

12

Sinh ra Context Map sau cùng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

13

Chọn hướng di chuyển sau cùng cho nhân vật . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

14


Hành vi Seek có thể chọn mục tiêu gần nhất hay nhiều mục tiêu nhất tùy theo cách viết vào objective 18

15

Input của người chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

16

GameStateControllerBase tại mỗi Tick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

17

GameStateControllerBase tại mỗi lần Render . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

18

GameStateControllerBase trước mỗi Tick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

19

Menu khởi đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


29

20

Menu tạo phòng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

21

Menu chọn phòng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

22

Menu staging PvP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

23

Menu staging PvE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

Luận văn tốt nghiệp

Trang vi/39



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

4

Lời mở đầu

Nhu cầu giải trí của con người là một chủ đề không mới. Từ trước khi xã hội loài người đạt được những phát
triển vượt bậc, đã có những hình thức trị chơi, thú vui tiêu khiển được lưu truyền từ đời này sang đời khác. Từ
những trò chơi dân gian cho thiếu nhi như cị cị, ơ ăn quan đến những trị chơi tập thể ngày lễ hội như kéo co, đua
thuyền, hay trí tuệ như cờ tướng, cờ vây, hoặc thậm chí cả các tệ nạn như tổ tôm, đánh bạc, người xưa mặc dù lam
lũ, bươn chải để kiếm sống vẫn tìm cách làm giàu đời sống tinh thần cho chính mình. So với những hình thức giải
trí khác như thơ ca, hội họa, kịch nghệ hay điện ảnh, người tham gia trị chơi khơng thưởng thức chúng một cách
thụ động. Họ trực tiếp tham gia vào quá trình chơi, là một phần trong chuỗi hành động của trò chơi đấy. Những
quyết định của người chơi ảnh hưởng trực tiếp dến diễn biến, kết quả của trị chơi, có thể dẫn đến những tình huống
kì lạ, khơng thể lường trước. Người ta tìm tới trị chơi, dù là người chơi trực tiếp hay là khán giả, ắt cũng vì nghiện
cái cảm giác ấy.
Khi mà cơm áo gạo tiền dần dần trở nên ít nhức nhối, con người nhận ra họ có nhiều thời gian hơn để thỏa
mãn cái nhu cầu về văn hóa, giải trí của mình. Đi lên cùng xã hội, những hình thức giải trí cũng tiến hóa. Thơ ca
trở thành sách, truyên, tiểu thuyết, được bày bán trên kệ sách cho mọi người. Nhạc, họa vừa chuyên môn hóa vừa
cộng đồng hóa, thể nên có ca sĩ, nhạc sĩ, họa sĩ chun nghiệp thì cũng có những con người lấy cái nghề này làm
sở thích, thỏa cái thú ca vẽ cho đời. Trị chơi cũng khơng phải là ngoại lệ, ngược lại chúng phát triển như tên lửa,
chỉ trong một thời gian ngắn đã có vơ vàn thể loại, hình thức trị chơi. Trị chơi được thể chế hóa, có luật rõ ràng,
người ta gọi là thể thao. Trị chơi được thương mại hóa, được sáng tạo, phát hành bởi các đơn vị chuyên nghiệp, trở
thành một loại hàng hóa được mua bán. Hình thức của trị chơi cũng trở nền đa dạng hơi. Từ thô sơ, tự phát đễn
chuyên nghiệp, có luật chơi rõ ràng, dụng cụ chuyên biệt (xúc xắc, thẻ bài,...), chả mất bao lâu sau khi máy tính ra
đời, người ta bắt đầu làm trị chơi trên nó.
Trị chơi điện tử ngày nay đã là một thứ gì đó gần gũi đối với xã hội lồi người. Một ngành cơng nghiệp khổng
lồ từ những ông lớn hàng tỉ đô la cho đễn một hoặc hai thanh thiếu niên khơng có gì ngồi tham vọng và nhiệt

huyết, là ước mơ của hàng vạn người, ác mộng của hàng vạn người khác. Một lĩnh vực mà người thành công rất
nhiều mà người thất bại cũng không ít. Một chủ đề mà mặt tốt lẫn mặt xấu của nó ln ln được lơi ra tranh luận,
bàn tán. Nhưng gì thì gì, người ta vẫn muốn chơi game và làm game.
Dự án game Space Shooter này, mặc dù người thực hiện thiếu chuyên môn, thiếu năng lực, thời gian và nhân
lực hạn hẹp, dự án vẫn bước những bước đi chập chững, vấp ngã rồi lại đứng dậy, cố gắng để cho ra đời một trị
chơi hồn chỉnh, bước vào một ngành công nghiệp đáng mơ ước nhưng cũng đầy cạm bẫy và chông gai.

Luận văn tốt nghiệp

Trang vii/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

5

Giới thiệu

Khi nhắc tới "trị chơi điện tử đầu tiên", nhiều người sẽ nghĩ đễn Pong, game thùng (arcade game) được
phát hành bởi Atari .Inc vào năm 1972. Tuy nhiên trước đó, vào năm 1962, một số sinh viên và giảng viên tại
Đại học Tổng hợp Massachusett (MIT) phát triển game "Spacewar!" chạy trên máy mainframe PDP-1 của trường.
"Spacewar!" là trò chơi cho hai người, mỗi người điều khiển một trong hai tàu vũ trụ chiến đấu trong môi trường
2D trong trường trọng lực của một ngôi sao. Game mô tả đơn giản môi trường không gian (người chơi áp dụng lực
đẩy lên tàu vũ trụ để di chuyển và sẽ không dừng lại khi người chơi ngừng tác dụng, trọng lực của ngôi sao cũng
được mô phỏng), cho phép người chơi sử dụng các chiến thuật như sử dụng trường trọng lực của ngôi sao để tăng
tốc cho tàu, tạo lợi thế cho mình. "Spacewar!" tạo ảnh hưởng lớn đễn văn hóa game ở Mỹ [1] và đi tiên phong trong
sự phát triển của ngành công nghiệp game.

"Spacewar!" là một sản phẩm đi trước thời đại, cho thấy tiềm năng cũng như sức hấp dẫn của trị chơi điện tử

tới cơng chúng. Mặc dù vậy, do là người đi tiên phong, so với những sản phẩm hiện tại, trị chơi có nhiều điểm yếu,
có thể kể đến như việc hỗ trợ nhiều người chơi còn sơ khai. Việc thực hiện Space Shooter bắt nguồn từ ý tưởng
thực hiện game tương tự Spacewar! trên nền tảng hiện đại với các cải tiến mà tác giả nhận định sẽ mở rộng lối
chơi và hấp dẫn hơn.

5.1

Mô tả sản phẩm

Space Shooter là trị chơi đối kháng lấy góc nhìn top-down có hỗ trợ nhiều người chơi. Trị chơi lấy bối cảnh
không gian, nơi người chơi điều khiển một trong nhiều tàu không gian, sử dụng các loại vũ khí khác nhau để tiêu
diệt nhau, đồng thời tránh những thiên thạch được sản sinh ngẫu nhiên trong màn chơi. Người chơi có thể đấu đội
theo hình thức ghi điểm hoặc hợp tác với nhau để sống sót trước hàng loạt tàu "zombie" do máy điều khiển trong
một khoảng thời gian xác định.
Mỗi màn chơi chỉ kéo dài vài phút trên thực tế, phù hợp cho giờ giải lao hoặc trên phương tiện công cộng.
Tuy giữ phương châm đơn giản, dễ chơi nhưng Space Shooter vẫn mang trong mình đặc trưng của việc di chuyển
trong môi trường không trọng lực, yêu cầu người chơi phải khéo léo điều khiển tàu của mình để khơng những sống
sót trước hiểm họa từ mơi trường và người chơi khác mà cịn có thể bắn trả lại để gây điểm.
Trò chơi cung cấp một số lượng các tàu vũ trụ với mỗi tàu có những đặc trưng riêng. Mỗi tàu có khả năng tấn
cơng, phòng thủ cũng như di chuyển khác nhau, phù hợp với lối chơi của từng người. Các loại vũ khí cũng có các

Luận văn tốt nghiệp

Trang 1/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

thơng số và cách gây sát thương khác nhau, người chơi chú ý để áp dụng cho phù hợp.

Tính năng nhiều người chơi được tính đến từ những giai đoạn đầu trong quá trình phát triển game. Trò chơi
hỗ trợ tạo phòng, chọn thể loại chơi, cho phép người chơi tham gia vào phòng được tạo sẵn.

5.2

Mục tiêu

Tác giả chọn thực hiện game làm đề tài cho luận văn tốt nghiệm vì đề tài bao quát được tồn bộ kiến thức
trong chương trình của ngành Khoa học Máy Tính. Do tính chất rộng của một dự án game, khi thực hiện ta sẽ phải
áp dụng toàn bộ những kiến thức đã học vào quá trình phát triển. Những kiến thức ấy bao gồm từ cơ bản về lập
trình, về tốn học, lập trình phần mềm, cơng nghệ phần mềm cho đến đến những kiến thức chuyên về game hơn
như lập trình hướng đối tượng, mạng máy tính và trí tuệ nhân tạo. Điều này khiên game thích hợp cho đề tài luận
văn, người thực hiện khơng chỉ ôn lại kiến thức, thử sức bản thân, mà cịn thể hiện được mình có thể làm được
những gì và đã xứng đáng để tốt nghiệp hay chưa.
Tác giả phát triển Space Shooter với các mục tiêu cụ thể như sau:
• Xây dựng game với gameplay loop (một chuỗi hành động mà người chơi lặp đi lặp lại trong quá trình chơi
game [2]) dựa trên Spacewar!, cụ thể là việc di chuyển một tàu vũ trụ với góc nhìn top-down (từ trên xuống
trong môi trường 2D) trong môi trường khơng trọng lực và dùng các vũ khí trên tàu để chiến đấu với các tàu
vũ trụ khác
• Thực hiện các cải thiện so với Spacewar!, cụ thể với khả năng chơi nhiều người qua mạng Internet, tính năng
chọn một trong nhiều tàu vũ trụ, hệ thống sinh lực và các chủng loại vũ khí khác nhau. Nếu có thể, tính đến
việc thực hiện tàu do máy điều khiển một cách đơn giản.
• Thử sức bản thân với một dự án game hồn chỉnh. Trị chơi điện tử là một loại hình phần mềm đặc biệt, bao
gồm rất nhiều yếu tố từ nhiều lĩnh vực khác nhau, liên kết với nhau tạo thành một trải nghiệm hoàn chỉnh.
Các lĩnh vực một game cần có thể từ mang tính khoa học cao như trí tuệ nhân tạo, mạng máy tính cho tới yêu
cầu con mắt thẩm mỹ, tính nghệ thuật như thiết kế giao diện, nhân vật, cốt truyện, màn chơi, ... Một game
có thể trơng đơn giản nhưng vẫn cần rất nhiều công sức để thực hiện, phần lớn trong đó là hiện thực những
hệ thống nền mà tuy khơng được thấy bởi người chơi, vẫn đóng vai trị lớn trong việc đảm bảo trải nghiệm
game là thông suốt.


Luận văn tốt nghiệp

Trang 2/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

6

Những trị chơi liên quan

Khi thực hiện đề tài này, để lấy ý tưởng cho các cải thiện so với game Spacewar! theo mục tiêu của đề tài,
tác giả lấy cảm hứng từ: 1) những game trên thị trường có bối cảnh và lối chơi tương đương và 2) một số game mà
tác giả đã được trải nghiệm có những điểm đáng học hỏi. Loại hình thứ nhất gồm Starsector, một game nhập vai
trên nền tảng PC và loại thứ hai có game bắn súng Soul Knight trên điện thoại di động. Cụ thể, tác giả lấy Soul
Knight làm cảm hứng cho hình thức, độ tiếp cận và Starsector cung cấp nguồn ý tưởng cho bối cảnh và hệ thống
chiến đấu trong trò chơi.

6.1

Soul Knight

Soul Knight là một game bắn súng góc nhìn top-down trên nền tảng Android và iOS do công ty ChillyRoom
phát triển, ra mắt vào năm 2017 trên Google Play Store và Apple AppStore. Người chơi điều khiển các nhân vật
với kỹ năng đặc biệt riêng để chiến đấu trước kẻ thù trong một hệ thống hầm ngục được sản sinh ngẫu nhiên, sử
dụng các vũ khí có được bằng mở hịm kho báu hoặc mua tại cửa hàng trong hầm ngục. Trò chơi hỗ trợ nhiều người
chơi bằng kết nối LAN hoặc qua mạng, với tối đa 4 người chơi. Trò chơi hấp dẫn ở khả năng chơi lai gần như vô
hạn nhờ hệ thống sản sinh hầm ngục, số lượng vũ khí lớn và đa dạng, hệ thống di chuyển mượt và yếu tố rouge-like
(người chơi bắt đầu lại từ đầu nếu chết).

Các tính năng của game bao gồm [3]:
• Trên nhân vật với năng lực độc nhất, phù hợp cho mỗi lối chơi khác nhau.
• Trên 400 vũ khí khác nhau: súng, gươm, cuốc, xẻng và nhiều thể loại khác.
• Trải nghiệm mới hoàn toàn mỗi lần chơi nhờ hệ thống hầm ngục được cấu tạo ngẫu nhiên.
• NPC hỗ trợ người chơi.
• Hệ thống điều khiển trực quan với nhắm bắn tự động.
• Hỗ trợ nhiều người chơi, từ LAN đến trực tuyến qua Internet.
• ...
Tác giả có cơ hội chơi Soul Knight vào những năm cuối cấp 3, chủ yếu là chơi kết nối LAN với bạn vào giờ
giải lao giữa các buổi học. Khi tìm ý tưởng thực hiện Space Shooter, tác giả nhận thấy trong Soul Knight những
điểm tốt cần làm theo:
• Phong cách đồ họa pixel đễ nhìn
• Mơi trường top-down làm đơn giản hóa việc thực hiện các chức năng game
• Hệ thống vũ khí đa dạng, nhiều chủng loại
• Hỗ trợ nhiều người chơi ngay từ ban đầu
Luận văn tốt nghiệp

Trang 3/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Tuy nhiên, có một số yếu tố của Soul Knight không phù hợp với đề tài hoặc thiếu sót mà đề tài cần tránh:
• Trong giai đoạn đầu khi game ra mắt, việc đồng bộ giữa các người chơi với nhau chưa thực sự đáng tin cậy
• Soul Knight sử dụng hệ thống nhắm bắn tự động, tuy phù hợp với điều khiển nhân vật là người nhưng với
nhân vật tàu vũ trụ như Space Shooter khi mà hướng của tàu đóng vai trị quan trọng trong di chuyển và
nhắm bắn thì khơng thích hợp.

6.2


Starsector

Starsector (tên cũ là Starfarer) là một game nhập vai đơn người chơi thế giới mở với tính năng khám phá, mơ
phỏng kinh tế và chiến đầu trong không gian. Mặc dù trên danh nghĩa vẫn còn ở mức "đang phát triển", game được
đánh giá là hồn thiện và người chơi có thể mua game với mức giá thấp hơn bình thường để nhận bản game mới
nhất. Game hỗ trợ content do người chơi thiết kế và được cung cấp trên nền tảng Windows, MacOS và Linux [4].

Luận văn tốt nghiệp

Trang 4/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Các tính năng hiện tại của game bao gồm:
• Điều khiển tàu trong mơi trường 2D top-down.
• Chỉ huy một hạm đội tàu để chiến đấu
• Thu gom kinh nghiệm để lên level các kỹ năng
• Cơ chế chiến đấu trong khơng gian chi tiết
• Tùy chỉnh tàu vũ trụ
• Thuê NPC để nhận kỹ năng thưởng, điều khiển tàu vũ trụ và các chức năng khác
• Khám phá một vũ trụ bị chiến tranh tàn phá
• Lợi dụng các sự kiện trong thế giới game để kiếm lời
• Ngoại giao với các thế lực trong game
• Khám phá hành tinh mới, những tàn tích lạ kỳ
• Hỗ trợ mod do người chơi tự thiết kế
• Hệ thống kinh tế được mô phỏng đầy đủ, với cung-cầu ảnh hưởng tới giá cả
• ...


Luận văn tốt nghiệp

Trang 5/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Tác giả nghiên cứu Starsector vì game có cùng bối cảnh khơng gian và hình thức top-down giống như Space
Shooter. Trò chơi đã và đang được phát triển hơn một thập kỷ bởi một đội ngũ gồm 4 người và có nhiều tính năng
ngang ngửa, thậm chí hơn cả những game được phát triển bởi các cơng ty game lớn. Bởi vậy game có rất nhiều hệ
thống phức tạp và thú vị, ví dụ như hệ thống kinh tế mô tả cung/cầu của cả thế giới trong game. Tuy nhiên, trong
giới hạn của việc tìm cách cải thiện lối chơi của Spacewar! trong khuôn khổ phát triển Space Shooter, ta chỉ nói
đến hệ thống chiến đấu.
Hệ thống chiến đấu trong Starsector nhìn tưởng chừng là đơn giản, nhưng thực chất là một hệ thống phức
tạp với nhiều yếu tố khác nhau ảnh hưởng đến khả năng chiến đấu hiệu quả của một tàu vũ trụ. Một tàu vũ trụ
được trang bị nhiều vũ khí. Mỗi loại vũ khí gây sát thương theo 4 loại: vật lý (kinetic), nổ (high explosive), phân
mảnh (fragmentation) và năng lượng (energy). Hệ thống sinh lực của tàu gồm khiên năng lượng (shield), giáp
(armor) và thân tàu (hull) và mỗi loại sát thương sẽ hữu hiệu trước một lớp bảo vệ khác nhau. Chẳng hạn, cách
nhanh nhất để làm cạn kiệt khiên của đối thủ là dùng vũ khí gây sát thương vật lý, giáp chống chịu kém nhất trước
sát thương nổ, vũ khí có sát thương phân mảnh sẽ rút thanh chỉ số thân tàu của đối thủ về 0 trong phút chốc cịn vũ
khí năng lượng gây sát thương đều (không hữu dụng bằng ba loại kia) lên cả ba lớp bảo vệ nêu trên. Do mỗi tàu có
khả năng tấn cơng và phịng thủ khác nhau, người chơi cần lưu ý những yếu tố này để có thể chiến đấu một cách
hiệu quả.

Hệ thống quan trọng nhất ảnh hưởng đến chiến đấu là flux, một thanh năng lượng đặc biệt mô phỏng nhiệt

Luận văn tốt nghiệp


Trang 6/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

lượng do thân tàu khi sử dụng vũ khí và khi khiên hấp thụ sát thương. Chỉ số flux giảm dần một cách tự động theo
một tốc độ nhất định, hoặc người chơi có thể "xả flux" gấp đôi tốc độ này đổi lại việc không thể dựng khiên, dùng
vũ khí hay dừng q trình xả tới khi flux về 0. Mỗi tàu có một con số flux tối đa mà tàu có thể hứng chịu được,
vượt qua ngưỡng này sẽ dẫn đến tình trạng overheat. Ở trạng thái này, tàu có thể di chuyển nhưng khơng thể sử
dụng khiên, vũ khí, năng lực và các hệ thống khác trong một thời gian và sẽ giảm flux ở mức một nửa tốc độ ban
đầu. Rơi vào trạng thái này trong lúc đối đầu với kẻ địch là cực kì nguy hiểm, bởi tàu gần như mất khả năng tự vệ
và dễ bị phá hủy. Quản lý flux là một kỹ năng sống còn trong hệ thống chiến đấu; người chơi cần chọn lúc thích
hợp để rút lui khi flux của mình ở mức nguy hiểm, cũng như tìm cách ngăn địch thủ làm điều tương tự để tiêu diệt
mục tiêu dễ dàng nhất.

Do thời gian có hạn, ở giai đoạn hiện tại, tác giả sẽ áp dụng một phiên bản đơn giản của hệ thống chiến đấu
này với hai chỉ số khiên và thân tàu. Đồng thời hệ thống vũ khí cũng cần được thiết kế sao cho hỗ trợ xử lý các loại
thiệt hai khác nhau.

Luận văn tốt nghiệp

Trang 7/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

7
7.1


Cơng nghệ sử dụng
Game Engine

Game Engine là phần mềm được thiết kế nhằm mục đích giảm thời gian, chi phí và độ phức tạp khi phát triển
game. Chúng thực hiện điều đó bằng cách cung cấp các giải pháp cho những công việc thường phải làm khi làm
game, giảm khối lượng kiến thức cần biết cho người phát triển. So với việc thực hiện mọi thứ từ A tới Z, các đội
ngũ một người hoặc muốn tập trung vào thực hiện một game tốt nhất có thể sẽ có một lợi thế to lớn khi sử dụng
Game Engine. [5]
Khi bắt đầu thực hiện đề tài, sau khi cân nhắc độ phức tạp của game, thời gian phát triển cũng như khả năng
của người phát triển, tác giả xác định sẽ phải sử dụng Game Engine và quyết định chọn một Game Engine đã tồn
tại trên thị trường mà có cho phép sử dụng miễn phí, ít nhất là trong quá trình phát triển. Tác giả quyết định chọn
Unity làm Game Engine để phát triển Space Shooter.

Unity ra đời năm 2005, là một game engine chuyên dụng cho trò chơi điện tử được phát triển bởi Unity
Technologies. Tính đến năm 2022, Unity được xem là một trong những công cụ phát triển game được sử dụng rộng
rãi nhất trên toàn cầu [6]. Đặc điểm chung của game engine là cung cấp cho người dùng những công cụ thiết yếu
để hồn thiện sản phẩm, có thể kể đến:
• Renderer: Render đồ họa 2D hoặc 3D, hệ thống ánh sáng, lập trình shader.
• Hệ thống vật lý: Mơ phỏng các định luật vật lý như trọng lực, ma sát, va chạm, đàn hồi, vv...
• Scripting: Cơng cụ chính để xây dựng logic trong game thông qua việc sử dụng các ngơn ngữ lập trình mà
game engine hỗ trợ.
• Networking: Thư viện lập trình mạng bậc cao để trừu tượng hóa các thủ tục mạng cấp thấp như serialization,
giao thức mạng.
• AI: AI: Cung cấp các mơ hình hành vi, lưới điều hướng, machine learning agents.
Với tên tuổi lâu đời, nổi tiếng với tính tiện lợi, thân thiện với người mới học, liên tục được cập nhật các
tính năng mới, kho assets đa dạng, và cộng đồng khổng lồ, Unity không chỉ là nguồn tư liệu học tập màu mỡ,
lựa chọn hàng đầu của cộng đồng lập trình game, các nhóm phát triển vừa và nhỏ [7] mà cịn được các doanh
nghiệp tầm cỡ tin dùng để phát triển các sản phẩm của họ, tiêu biểu có thể liệt kê: Hearthstone (phát triển bởi
Blizzard Entertainment), Escape from Tarkov (phát triển bởi BattleState Games), Mario Kart Tour (phát triển bởi

Nintendo)...
Thực thể cơ bản nhất trong Unity là Game Object. Mỗi GameObject ngồi có thể chứa các Game Object khác
làm con, tạo thành cây phân quyền (hierachy) thì cịn có thể được gắn các hành vi (Component) gồm các hành vi
do Unity cung cấp hay do người lập trình tự đặc tả bằng cách kế thừa interface do Unity cung cấp. Logic của game
để tham gia vào game loop của Unity cần phải được thực hiện trên các Component này.
Unity hỗ trợ hai backend là Mono và IL2CPP. Trong báo cáo này sẽ chỉ nói đến Mono. Người sử dụng viết
Component mới bằng cách kế thừa class MonoBehaviour. Tùy vào trạng thái của game loop, Unity sẽ gọi các
method xác định. Hai thành phần cần đáng chú ý là game loop cơ bản (hình 1) và game loop vật lý (hình 2).
Game loop vật lý luôn thực hiện trước game loop cơ bản. Nếu game loop cơ bản luôn được thực thi một lần mỗi
frame thì game loop vật lý có thêm một giá trị gọi là bước vật lý lấy đơn vị thời gian và luôn cố định. Về mặt trừu
tượng, game loop vật lý luôn được thực thi theo mỗi bước vật lý này để đảm bảo mô phỏng vật lý diễn ra ổn định.
Luận văn tốt nghiệp

Trang 8/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Trong thực tế thì tùy theo bước vật lý và khoảng thời gian giữa hai frame mà game loop vật lý có thể được thực thi
nhiều hơn một lần trong một frame.

Hình 1: Game Loop cơ bản của Unity.

Hình 2: Game Loop vật lý của Unity.

Tác giả chọn Unity thay vì các Game Engine khác như Unreal Engine hay Godot Engine vì các lý do sau:
• Space Shooter là game 2D, khơng có u cầu đồ họa cao nên năng lực xử lý đồ họa của Unreal Engine là
khơng cần thiết.
• Unity có một thư viện đồ sộ các asset, add-on và giải pháp phát triển cho nó (bao gồm thư viện mạng và giải

pháp tìm đường sẽ nói ở phần sau), một điều mà Unreal và Godot khơng có. Ngồi ra, trên mạng Internet
các tài liệu, video hướng dẫn, diễn đàn hỏi đáp cho Unity cũng nhiều hơn của Unreal và Godot.
• Tác giả có nhiều kinh nghiệm và sự tự tin khi sử dụng Unity, mất ít thời gian làm quen với Game Engine so
với khi sử dụng Unreal Engine và Godot Engine.

Luận văn tốt nghiệp

Trang 9/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

7.2

Thư viện mạng

Trị chơi có kết nối mạng (networked) cho phép người chơi kết nối và chơi với nhau thơng qua mạng, có thể là
LAN hay Internet. Trải nghiệm thu được nhờ chơi với người chơi khác, tới bây giờ cũng khó có thể sao chép bằng
người chơi máy hay AI.
Trong chế độ nhiều người chơi, mỗi máy tính của người chơi được gọi là Client. Với topology Client-Server,
một máy tính đặc biệt (có thể là một client) đảm nhiệm việc xử lý trạng thái thực của trị chơi. Máy tính này gọi là
Server. Một máy tính đảm nhiệm cả vai trị server lẫn client được gọi là Host.
Khi đông bộ nhiều người chơi, do trên thực tế mỗi Client có một bản thể riêng của game với mỗi object nằm
trong game, ta cần biết Client nào đang giữ trạng thái "thực" của object đó và vì vậy có quyền lực (Authority) lên
object đó. Trong topology Client-Server, Server giữ Authority của tất cả object trong màn chơi; ngược lại, trong
topology Peer-to-Peer, mỗi Client giữ một phần trạng thái "thực", thường các Object do Client đó tạo ra (về mặt
luận lý, trên thực tế mỗi Client sẽ tự tạo một bản copy cục bộ cho mình). Ngồi ra trong trường hợp này một Client
có thể trao Authority của object dưới quyền hạn của mình cho một Client khác.
Remote Procedure Call hay viết tắt là RPC là phương pháp phổ biến để các client giao tiếp với nhau. Một

object từ client này có thể gửi RPC đến bản sao của nó tại các client khác. Hàm RPC được gọi từ client gửi sẽ được
thực thi tại (một hoặc nhiều) client nhận, với tham số đầu vào của client gửi.
Thực hiện kết nối mạng là một công việc phức tạp và nếu làm thủ công sẽ mất rất nhiều cơng sức và thời gian
phát triển, vậy nên việc tìm và sử dụng thư viện mạng do bên thứ ba cung cấp là cần thiết.
Tại thời điểm bắt đầu dự án (đầu năm 2022) các thư viện được cân nhắc là:
• Unity Netcode for GameObject (tên cũ MLAPI) là thư viện mã nguồn mở cung cấp các tiện ích cho networking như NetworkedVars, quản lý scene, remote procedure call (RPC), ... Unity Netcode cung cấp kết nối tầng
Application và cho phép sửa đổi tầng Transport theo ý nhà phát triển. Hỗ trợ topology client-server Hiện
tại Unity Netcode đang trong quá trình phát triển và là solution chính thức của Unity cho xây dựng game
multiplayer.
• Photon Unity Networking 2 (PUN) là giải pháp networking được xây dựng trên transport Photon Realtime.
Hỗ trợ peer-2-peer topology, tuy nhiên có duy trì một Master Server làm trung gian cho việc gửi dữ liệu.
PUN hỗ trợ Unity phiên bản từ 2017 trở đi.
Sau quá trình tìm hiểu, tác giả kết luận Unity Netcode là giải pháp tốt hơn với hai lí do chính như sau như sau:
• So với PUN, Unity Netcode có độ trễ thấp hơn, độ phản hồi cao hơn và sử dụng tài nguyên hiệu quả hơn.
• Khả năng mở rộng (scalability) của Unity Netcode (mơ hình client-server) tốt hơn PUN (peer-2-peer).
• Unity Netcode khơng những mới hơn mà cịn là thư viện mạng chính thức của Unity, đảm bảo sẽ được nhà
phát triển Unity hỗ trợ
Tuy nhiên, tác giả vẫn chọn PUN bởi:
• Khối lượng tài liệu hướng dẫn (project mẫu, hướng dẫn,...) của PUN lớn hơn, dễ nắm bắt hơn.
• Tại thời điểm hiện tại của đề tài các ưu điểm của Unity Netcode chưa cần tới, mặt khác PUN cũng đáp ứng
nhu cầu sử dụng của đề tài.
• Hiện tại Unity Netcode vẫn cịn trong q trình phát triển, một số tính năng chưa được thực hiện.
Tuy nhiên, sau khi kết thúc giai đoạn đề cương, một số vấn đề nảy sinh:
• Những nhược điểm của PUN nói riêng và topology Peer-to-Peer nói chung (bảo mật, xử lý vật lý, ...) bắt đầu
bộc lộ khi phát triển các hệ thống cần thiết ở giai đoạn luận văn.
• Unity Netcode tại thời điểm đó vẫn cịn ở trong giai đoạn tiền phát hành, cịn thiếu những tính năng thiết yếu.
Phương án tiếp tục phát triển với PUN cũng không khả thi do thư viện đã bị ngừng hỗ trợ trước đó khơng
lâu.

Luận văn tốt nghiệp


Trang 10/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Các yếu tố trên dẫn đến việc chọn một thư viện mạng mới. Tác giả quyết định chọn Photon Fusion, một thư
viện mạng mới do nhà phát triển của PUN thực hiện. Thư viên được phát hành trong thời điểm tác giả đang thực
hiện đề cương nên khơng có trong các giải pháp được xét tới tại thời điểm ban đầu.

Photon Fusion là thư viện lập trình mạng - đồng bộ hóa cho Unity, được thiết kế để dễ dàng áp dụng trong
quy trình làm việc trên Unity, đồng thời cung cấp những tính năng nâng cao như data compression, client-side
prediction và lag compensation. Chi tiết có thể xem ở hình 3.
Fusion sử dụng quy trình mô phỏng sử dụng lockstep (Tick) độc lập với lockstep bởi hệ thống mô phỏng vật
lý của Unity. Mỗi Tick xảy ra tại một thời điểm cụ thể trên thời gian thực trên tất cả các máy trong quá trình đồng
bộ, ngồi việc đảm bảo trạng thái trị chơi giữa các máy ln thống nhất cịn cho phép phỏng đốn (hình 4) và quay
ngược (hình 5) về các tick trước để giảm thiểu ảnh hưởng của việc truyền thông tin qua mạng giữa các máy trong
q trình đồng bộ trị chơi.

Hình 4: Hai client phỏng đốn trạng thái tương lai dựa trên Tick đã được server kiểm chứng

Luận văn tốt nghiệp

Trang 11/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính


Hình 3: Các tính năng của Photon Fusion

Luận văn tốt nghiệp

Trang 12/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Hình 5: Đồng bộ hai client với độ trễ khác nhau với server

Remote Procedure Call hay viết tắt là RPC là phương pháp phổ biến để các client giao tiếp với nhau. Một
object từ client này có thể gửi RPC đến bản sao của nó tại các client khác. Hàm RPC được gọi từ client gửi sẽ được
thực thi tại (một hoặc nhiều) client nhận, với tham số đầu vào của client gửi. Fusion cho phép người lập trình định
nghĩa giá trị cần được đồng bộ hay RPC thẳng từ trong lớp kế thừa từ MonoBehaviour của Unity mà khơng cần
tuần tự hóa thủ cơng. Các đối tượng cần được đồng bộ cũng được khai báo sử dụng hệ thống Prefab của Unity với
đầy đủ tính năng, người lập trình khơng cần khai báo thủ cơng hay làm những thủ tục khác do quá trình đã được tự
động hóa.
Những tính năng trên, kèm với việc Fusion được giới thiệu là giải pháp thay thế cho PUN, là lí do tác giả chọn
thư viện này để thực hiện kết nối và đồng bộ trạng thái qua mạng cho Space Shooter thay cho PUN và thay vì sử
dụng Unity Netcode hay các thư viện khác như Mirror.

7.3

Giải pháp tìm đường cho AI

Đối đầu với tàu do máy điều khiển là một lựa chọn cho nhừng người muốn trải nghiệm game nhưng không
muốn đối đầu với người chơi khác hoặc khơng tìm được người chơi khác tại thời điểm chơi. Spacewar! gốc khơng
có tính năng này và việc thực hiện chế độ chơi với máy nằm trong mục tiêu cải thiện đã nêu ở trên.

Ở giai đoạn hiện tại, thực hiện AI dừng lại ở việc tìm đường, cụ thể là tới tàu do người chơi điều khiển, né tránh
các thiên thạch trên đường đi. Unity có hỗ trợ sẵn tính năng này thơng qua hệ thống NavMesh và NavMeshAgent,
tuy nhiên tác giả khơng sử dụng vì các lý do sau:
• Sản sinh NavMesh cho mơi trường động khá tốn kém, đặc biệt như trong Space Shooter với các tàu và thiên
thạch ln ln di chuyển.
• NavMeshAgent di chuyển nhân vật theo một cách riêng, không phù hợp với các hệ thống khác của game
Trong quá trình tìm một giải pháp tìm đường phù hợp, tác giả tìm tới Polarith AI và lý thuyết Steering
Behaviour đằng sau nó. Polarith AI là thư viện AI cho Unity dành riêng cho việc chuyển động. Thư việc được thiết
kế thuận tiện cho việc sử dụng và tái sử dụng, có hiệu năng cao và hỗ trợ mở rộng các chức năng mới.

Luận văn tốt nghiệp

Trang 13/39


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Nền tảng của Polarith AI là lý thuyết Steering Behaviour (những hành vi đơn giản kết hợp với nhau để thành
các hành vi phức tạp). Quy trình hành động của một đối tượng sử dụng Polarith AI bắt đầu bằng việc nhận biết
môi trường xung quanh với kết quả là một bảng cảm quan (đại diện bằng một dãy các giá trị mục tiêu). Người lập
trình thay đổi nhận thức của đối tượng bằng cách áp dụng những script hành vi được thư viện cung cấp hoặc viết
hành vi mới dựa trên các interface của thư viện. Đây cũng là lúc lý thuyết Steering Behaviour được sử dụng. Bước
thứ hai sẽ sử dụng bảng cảm quan từ bước thứ nhất, thông qua giải thuật tối ưu của thư viện để cung cấp quyết định
cho đối tượng di chuyển đến vị trí tối ưu nhất tại thời điểm hiện tại.
Hành vi của một nhân vật chuyển động nói chung và của tàu vũ trụ nói riêng có thể được dịch giải bằng cách
phân ra thành các bước như Hình 6, theo đó một nhân vật sẽ chọn hành động của mình, tính tốn cách di chuyển
sao cho thực hiện hành động ấy và cuối cùng thì mới thực sự di chuyển theo tính tốn đã chọn. Trong đó, Steering
Behaviour nằm trong phần tính tốn cách di chuyển, sử dụng những thơng tin sẵn có tại thời điểm thực hiện tính
tốn như vị trí và vận tốc của các vật thể xung quanh nhân vật, khoảng cách từ nhân vật tới mục tiêu, ... thay vì

những giải thuật phức tạp như các giải thuật dò đường. Được phổ biến bởi Craig W. Reynolds[8], kết quả của nhiều
Steering Behaviour (thường dưới dạng vector) có thể được tổng hợp lại với nhau nhằm tạo thành những hành vi
phức tạp và gần giống với thực tế. Một số Steering Behaviour được đề cập là: tìm (Seek) và tránh (Flee), tránh
va chạm (Collision Avoidance) và đi theo đàn (Flocking).

Hình 6: Các bước hành vi của nhân vật chuyển động

Tuy nhiên, ở một số trường hợp, Steering Behaviour sẽ cho ra biểu hiện khơng tự nhiên. Lấy ví dụ như hình 7,
ta có một nhân vật (biểu hiện bằng vòng tròn màu trắng) với hai hành vi đơn giản: tiến tới mục tiêu (vịng trịn A,
B) và né tránh vật cản (hình chữ nhật màu đen). Mục tiêu A gần nhân vật hơn nhưng bị vật cản che khuất. Trong
trường hợp lý tưởng, ta muốn nhân vật di chuyển về B. Do A gần hơn B và hành vi đầu tiêu (tiến tới mục tiêu)
khơng tính tới vật cản nên hành vi sẽ cho ra hướng di chuyển tiến về mục tiêu gần nhất, tức là A. Hành vi thứ hai
(né tránh vật cản) sẽ cho ra hướng di chuyển sao cho nhân vật xa với vật cản nhất. Hai hướng di chuyển này khi
kết hợp lại sẽ gần như triệt tiêu nhau, làm nhân vật gần như khơng di chuyển. Ta có thể giải quyết vấn đề này bằng

Luận văn tốt nghiệp

Trang 14/39


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×