khóa luận tốt nghiệp phát triển game 3d thế giới mở developing 3d openworld game

76 0 0
Tài liệu đã được kiểm tra trùng lặp
khóa luận tốt nghiệp phát triển game 3d thế giới mở developing 3d openworld game

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Với hy vọng sẽ có thể phát triển một trò chơi nơi người chơi có thể tự do khám phá, tương tác với thế giới một cách thú vị nhưng không kém phần chân thật.. Trong báo cáo này, em sẽ trình

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM

NGUYỄN TUẤN KIỆT – 20520906

KHÓA LUẬN TỐT NGHIỆP

PHÁT TRIỂN GAME 3D THẾ GIỚI MỞ

Developing 3D Openworld Game

KỸ SƯ NGÀNH CÔNG NGHỆ PHẦN MỀM

GIẢNG VIÊN HƯỚNG DẪN TS ĐỖ THỊ THANH HUYỀNTH.S TRẦN THỊ HỒNG YẾN

TP HỒ CHÍ MINH, 2023

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

Trang 2

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM

NGUYỄN TUẤN KIỆT - 20520906

KHÓA LUẬN TỐT NGHIỆP

PHÁT TRIỂN GAME 3D THẾ GIỚI MỞ

Developing 3D Openworld Game

KỸ SƯ NGÀNH CÔNG NGHỆ PHẦN MỀM

GIẢNG VIÊN HƯỚNG DẪN TS ĐỖ THỊ THANH HUYỀNTH.S TRẦN THỊ HỒNG YẾN

TP HỒ CHÍ MINH, 2023

Trang 3

LỜI CẢM ƠN

Em chân trọng muốn bày tỏ lòng biết ơn của bản thân đến trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM vì đã hỗ trợ và tạo ra những điều kiện tuyệt vời cho cá nhân em cũng như các sinh viên khác trong quá trình học tập và rèn luyện tại Khoa Công nghệ phần mềm Hơn hết, trường sở hữu một Hệ thống thư viện hiện đại với đa dạng các văn bản, tài liệu đã hỗ trợ em rất nhiều trong việc nghiên cứu và hoàn thành Khóa luận tốt nghiệp của mình

Chúng em chân thành cảm ơn ThS Trần Thị Hồng Yến đã tận tâm, nhiệt tình hỗ trợ, hướng dẫn cũng như là định hướng cho em về cách làm việc và viết báo cáo khoa học Những góp ý, chỉ bảo trân quý này sẽ không chỉ giúp em hoàn thành khóa luận một cách xuất sắc mà còn trở thành hành trang quan trọng cho sự nghiệp, sự học trong tương sau này của em

Đặc biệt, em xin chân thành cảm ơn gia đình, tất cả thầy cô trong khoa, bạn bè và tập thể lớp PMCL2020 vì thời gian qua đã hỗ trợ, chia sẻ và giúp đỡ em không ngừng trong cả quá trình học tập và cuộc sống Em đã được truyền sức mạnh và động lực mạnh để vượt lên những khó khăn, cam go và thử thách nhờ niềm tin và sự đồng hành của mọi người

Em thật sự không thể tránh khỏi việc có sai sót trong quá trình hoàn thành khóa luận này Do đó, em kính mong nhận được sự chỉ dẫn và góp ý quý báu từ quý thầy cô để hoàn thiện khóa luận một cách tốt nhất

Em xin chân thành gửi lời biết ơn đến tất cả mọi người Em thật lòng mong chúc mọi điều tốt đẹp và thành công luôn luôn đồng hành cùng mọi người

Thành phố Hồ Chí Minh, ngày 25 tháng 12 năm 2023 Sinh viên thực hiện

Nguyễn Tuấn Kiệt

Trang 4

1.3.1 Hệ thống phát triển của quần thể/quần xã sinh vật (AI) 18

1.3.2 Hệ thống quan hệ giữa các loài 18

Trang 5

2.2 Hệ thống tạo dựng màn chơi 23

2.2.1 Khái niệm 23

2.2.2 Tổng quan phương pháp xây dựng 23

2.2.3 Xây dựng hệ thống tạo màn chơi tự động 24

2.3 Neural Network 30

CHƯƠNG 3 PHÁT TRIỂN TRÒ CHƠI 34

3.1 Phương pháp phát triển trò chơi 34

3.1.1 Hướng tiếp cận 34

3.1.2 Giải quyết vấn đề tối ưu trò chơi 34

3.2 Xây dựng hệ thống trí tuệ nhân tạo 35

3.2.1 Steering Behaviors 35

3.2.2 Hệ thống xử lý công việc 41

3.2.3 Hệ thống gu, kết duyên và sinh sản 47

3.3 Xây dựng các cơ chế về phần người chơi 49

3.3.1 Cơ chế nguyên liệu 49

3.3.2 Cơ chế nấu ăn 49

Trang 6

3.4.1 Sơ đồ Use case 51

3.4.2 Danh sách Actor 52

3.4.3 Danh sách Use Case 52

3.4.4 Mô tả use case 53

3.4.5 Cơ sở dữ liệu 71

CHƯƠNG 4 SẢN PHẨM 72

4.1 Danh sách đồ họa 72

4.2 Danh sách giao diện 72

CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 73

Trang 7

DANH MỤC HÌNH

Hình 2-1: Godot Engine 22

Hình 2-2: Mô tả quá trình tạo màn chơi tự động 24

Hình 2-3: Tìm kiếm vị trí phù hợp để vùng tiếp theo 27

Hình 2-4: Kết nối hai điểm Regions lại 27

Hình 2-5: Khoảng tỷ lệ 28

Hình 2-6: Đánh dấu vùng chiếm của đối tượng 30

Hình 2-7: Newtonsoft Json Library 30

Hình 2-8: Neural Network 31

Hình 2-9: Ví dụ về Neural Network cho rắn trong Snake Game 32

Hình 3-1: Ví dụ về các trường hợp kết hợp hành vi 37

Hình 3-2: Raycasts xác định vật cản 38

Hình 3-3: Tầm nhìn của đối tượng Chicpea 39

Hình 3-4: Tầm nhìn của đối tượng Chicpea 40

Hình 3-5: Ánh sáng vào buổi sáng 42

Hình 3-6: Ánh sáng vào buổi chiều tối 43

Hình 3-7: Một Chicpea đang thu thập lương thực 45

Hình 3-8: Sơ đồ Usecase tổng quát 51

Hình 3-9: Biểu đồ hoạt động use case thoát game 54

Hình 3-10: Biểu đồ hoạt động use case thay đổi độ phân giải 55

Hình 3-11: Biểu đồ hoạt động use case chơi màn chơi hướng dẫn 57

Hình 3-12: Biểu đồ hoạt động use case xem trang bị 58

Hình 3-13: Biểu đồ hoạt động use case tháo gỡ/mặc trang bị 59

Hình 3-14: Biểu đồ hoạt động use case xem vật phẩm 60

Hình 3-15: Biểu đồ hoạt động use case sử dụng vật phẩm 62

Hình 3-16: Biểu đồ hoạt động use case xem nguyên liệu 63

Hình 3-17: Biểu đồ hoạt động use case chọn nguyên liệu 65

Trang 8

Hình 3-18: Biểu đồ hoạt động use case xem sách thế giới 66

Hình 3-19: Biểu đồ hoạt động use case thu thập tài nguyên 67

Hình 3-20: Biểu đồ hoạt động use case cập nhật sách thế giới 69

Hình 3-21: Biểu đồ hoạt động use case chiến đấu 70

Hình 3-22: Biểu đồ hoạt động use case quay về nhà 71

DANH MỤC BẢNG Bảng 2-1: Bảng phân tích các phương pháp tạo màn chơi tự động 25

Bảng 3-1: Bảng danh sách Actor 52

Bảng 3-2: Bảng danh sách Use Case 53

Bảng 3-3: Bảng mô tả use case thoát game 53

Bảng 3-4: Bảng mô tả use case thay đổi độ phân giải 55

Bảng 3-5: Bảng mô tả use case chơi màn chơi hướng dẫn 56

Bảng 3-6: Bảng mô tả use case xem trang bị 58

Bảng 3-7: Bảng mô tả use case tháo gỡ/mặc trang bị 59

Trang 9

Bảng 3-8: Bảng mô tả use case xem vật phẩm 60

Bảng 3-9: Bảng mô tả use case sử dụng vật phẩm 61

Bảng 3-10: Bảng mô tả use case xem nguyên liệu 63

Bảng 3-11: Bảng mô tả use case chọn nguyên liệu 64

Bảng 3-12: Bảng mô tả use case xem sách thế giới 66

Bảng 3-13: Bảng mô tả use case thu thập tài nguyên 67

Bảng 3-14: Bảng mô tả use case cập nhật sách thế giới 68

Bảng 3-15: Bảng mô tả use case chiến đấu 70

Bảng 3-16: Bảng mô tả use case quay về nhà 71

Trang 10

DANH MỤC TỪ VIẾT TẮT

Từ viết tắt Từ đầy đủ Giải thích

UI User Interface Giao diện người dùng UX User Experience Trải nghiệm người dùng

Trang 11

11

TÓM TẮT KHOÁ LUẬN

Ngành phát triển trò chơi điện tử đã có một nền tảng lịch sử tương đối dài và sở hữu nhiều cột mốc đáng nhớ Hơn hết, ngành phát triển trò chơi cũng đã phát triển đáng kể trong thời gian gần đây Từ những trò chơi đơn giản trên các nền tảng cổ điển như máy tính cá nhân và hệ máy cầm tay, ngành này đã tiến xa hơn và tạo ra những trải nghiệm tuyệt vời trên các nền tảng di động, thực tế ảo và thế giới mở

Một trong những yếu tố chính đã thúc đẩy sự phát triển của ngành là sự tiến bộ vượt bậc trong công nghệ Công nghệ đồ họa 3D đã trở nên phổ biến và tiên tiến hơn, cho phép các nhà phát triển tạo ra những trò chơi với hình ảnh đẹp mắt, chi tiết và sống động Ngoài ra, tiến bộ trong công nghệ phần cứng và phần mềm đã cung cấp khả năng xử lý mạnh mẽ hơn, đồng thời giúp tối ưu hóa trải nghiệm chơi game

Với một nền tảng công nghệ đã tương đối phát triển, kết hợp với ngành phát triển game cũng ngày một được phổ biến rộng rãi, em quyết định chọn việc Phát triển Game 3D Thế giới mở là đề tài Khóa luận Tốt nghiệp Với hy vọng sẽ có thể phát triển một trò chơi nơi người chơi có thể tự do khám phá, tương tác với thế giới một cách thú vị nhưng không kém phần chân thật

Trong báo cáo này, em sẽ trình bày quá trình tìm hiểu kiến thức ở các lĩnh vực liên quan khác nhau: sinh học (quần thể, quần xã, các mối quan hệ trong tự nhiên,…), thiết kế game (cân bằng game, hướng đi, UX/UI,…) và tìm ra những bài toán, hạn chế chưa được giải quyết rồi từ đó thiết kế giải pháp, xây dựng một trò chơi hoàn thiện

Trang 12

12

ĐỀ CƯƠNG CHI TIẾT

TÊN ĐỀ TÀI: Phát triển game 3D thế giới mở Cán bộ hướng dẫn:

- TS Đỗ Thị Thanh Tuyền - ThS Trần Thị Hồng Yến

Thời gian thực hiện: Từ ngày 27/02/2023 đến ngày kết thúc Khóa luận tốt nghiệp Sinh viên thực hiện:

Nguyễn Tuấn Kiệt – 20520906

Nội dung đề tài 1 Lý do chọn đề tài:

Việc phát triển một tựa game 3D thế giới mở luôn là một lĩnh vực hấp dẫn và đầy thách thức trong ngành công nghiệp game từ rất lâu về trước tới tận thời điểm bây giờ Trong lĩnh vực này, các nhà phát triển sẽ tạo ra một môi trường ảo hoàn toàn mới, cho phép người chơi khám phá và tương tác với một thế giới rộng lớn, đồng thời tạo ra những trải nghiệm độc đáo và tùy chỉnh theo sở thích của mỗi người Một tựa game thế giới mở không có cốt truyện cũng như lối chơi tuyến tính, người chơi có thể tự do lựa chọn hướng đi cũng như câu chuyện cho riêng mình

Vậy nên, việc phát triển game thế giới mở đòi hỏi sự kết hợp giữa nghệ thuật, kỹ thuật và khả năng thiết kế game tinh tế, chặt chẽ Với mục tiêu xây dựng một hệ sinh thái giả tưởng mô phỏng tương đối chính xác các hành vi và tính chất có ở thực tế cuộc sống, tác giả đã thiết kế các hệ thống phân chia tính cách, cảm xúc, mức độ sinh tồn cho các giống loài và cá thể khác nhau Tiếp đến, tác giả phải dựa trên chủ đề bản thân mong muốn để mô phỏng lại các địa điểm, các NPC sao cho thế giới trong game thật sự chân thật và cuốn hút

Một yếu tố quan trọng khác trong việc phát triển game 3D thế giới mở là tạo

Trang 13

13

ra một hệ thống gameplay linh hoạt và tự do Người chơi có thể thực hiện nhiều hành động khác nhau như: khám phá, chiến đấu, xây dựng, giao tiếp với NPC và thực hiện nhiệm vụ Điều này đòi hỏi tác giả phải xây dựng một hệ thống logic phức tạp và cung cấp các công cụ phát triển mạnh mẽ để tạo ra các nhiệm vụ và sự tương tác độc đáo

Việc phát triển game 3D thế giới mở là một quá trình tuy khó khăn nhưng sẽ vô cùng thú vị tác giả sẽ sử dụng các công nghệ như Godot, Firebase và các phương pháp như Procedural Animation, để hỗ trợ quá trình phát triển

2 Phạm vi sử dụng

Phạm vi môi trường: Windows Phạm vi chức năng:

Một trò chơi hoàn chỉnh, đáp ứng được các chức năng mong muốn

- Hệ thống độ hảo cảm: xây dựng một hệ thống về sở thích cho từng thực thể riêng biệt, chia thành năm mức từ ghét đến yêu Mỗi đặc điểm của thực thể bất kỳ đều thuộc một nhóm nào đó, từ đó, các thực thể trong game sẽ có sở thích cũng như cách chấm điểm khác nhau Đối với sinh vật trong trò chơi, độ hảo cảm đủ cao sẽ giúp chúng kết đôi và lập gia đình Hay đối với người chơi, ta sẽ có thể làm thân với một nhóm sinh vật nào đó, hoặc tương tác dễ dàng hơn với các NPC

- Hệ thống sinh tồn: hệ thống sinh tồn cũng tương tự với hệ thống độ hảo cảm, được chia làm năm mức từ sợ đến tự tin Điểm sinh tồn này sẽ ảnh hưởng rất lớn đến hành vi giữa các sinh vật với nhau Ví dụ, nếu một sinh vật A có sức mạnh ưu việt hơn rất nhiều sinh vật B, sinh vật B sẽ từ từ sợ sinh vật A, tránh giao tranh với A và ngược lại

- Hệ thống tư duy: các cá thể trong trò chơi đều có bộ não riêng, đồng nghĩa với việc kiến thức của một cá thể học được sẽ không ảnh hưởng tới các cá thể khác cùng loài hay khác loài Ví dụ, sinh vật A thấy người

Trang 14

14

chơi đánh bại toàn bộ đàn của mình và may mắn sống sót, sinh vật A đó có thể chạy về lãnh thổ của mình và báo tin cho các cá thể khác, từ đó các cá thể khác mới có kiến thức về sức mạnh của người chơi

- Hệ thống tính cách: trò chơi sẽ có một danh sách tính cách được thiết kế trước, từ đó, các cá thể sinh ra sẽ có được một tính ngẫu nhiên trong danh sách đó, hoặc, được ảnh hưởng từ tính cách của cha và mẹ Tính cách sẽ cho cá thể đó các thuộc tính bất lợi cũng như có lợi Ví dụ như sinh vật A có tính cách háo chiến, trong tình huống A gặp một sinh vật nguy hiểm hơn, A vẫn sẽ có tỷ lệ giao đấu với sinh vật đấy

- Hệ thống hành vi/hệ sinh thái: các sinh vật sẽ luôn vận động chứ không giới hạn mỗi ở những khu vực mà người chơi đang có mặt Tức là, dù cho người chơi không có mặt tại hiện trường, các sinh vật vẫn sẽ đi kiếm ăn, vẫn sẽ chiến đấu với các kẻ thù tự nhiên của mình

- Tối ưu hóa hệ sinh thái: một trò chơi thế giới mở có quy mô tương đối lớn và số lượng thực thể sẽ có thể lên tới hàng chục, hàng trăm ngàn Mỗi cá thế lại có rất nhiều chức năng cần phải xử lý, hình ảnh để hiển thị Việc này sẽ tiêu tốn rất nhiều tài nguyên của máy tính Thế nên tác giả sẽ sử dụng các phương pháp đặc biệt để đảm bảo tính chân thật của hệ sinh thái nhưng không gây ảnh hưởng đến trải nghiệm và hiệu suất của trò chơi

- Người chơi có thể di chuyển nhân vật, tấn công, tương tác

3 Đối tượng sử dụng:

- Những cá nhân thích chơi trò chơi điện tử

- Những nhà phát triển có hứng thú với việc tìm hiểu về một hệ sinh thái chi tiết được áp dụng trong game

4 Phương pháp thực hiện:

- Xây dựng Game Design Document và bắt đầu phát triển các chức năng cơ bản của trò chơi

Trang 15

6 Kết quả mong đợi:

- Xây dựng được một thế giới game mô phỏng chi tiết một hệ sinh thái sống động nơi mà mọi thứ không chỉ xoay quanh người chơi Các sinh vật khác vẫn sẽ hoạt động mặc cho người chơi vẫn chưa truy cập vào khu vực đó

- Thế giới game được xây dựng chỉnh chu về mặt hình ảnh, cơ chế cũng như cân bằng game

7 Kế hoạch làm việc:

Tuần 1 - 2 - Thiết kế game

Tuần 3 - 4 - Tìm hiểu về lý thuyết cũng như các phương pháp áp dụng thực tiễn của Procedural Animation

- Áp dụng Procedural Animation cho một số hoạt ảnh cơ bản

Tuần 5 - 6 - Phát triển các chức năng game dựa trên thiết kế game

Trang 16

16

Tuần 7 - 8 - Xây dựng hệ thống độ hảo cảm, độ sinh tồn, tính cách và những tính năng liên quan tới sự vận hành của thế giới game

- Xây dựng hệ thống NPC có thể điều chỉnh theo tiến trình phát triển của người chơi

Tuần 9 - 10 - Bắt đầu hoàn chỉnh tựa game

- Cải thiện lại về mặt hình ảnh, âm thanh và mạch game Tuần 11 - 16 - Kiểm lỗi và cân bằng trò chơi

Tp Hồ Chí Minh, ngày 29 tháng 12 năm 2023

Trang 17

1.2 Lý do chọn đề tài

Mục tiêu của đề tài không chỉ dừng lại ở việc phát triển một trò chơi chỉ đơn thuần có giá trị về mặt giải trí, bản thân tác giả đề tài muốn áp dụng được các kiến thức đa ngành (về sinh học, vật lý,…) vào trò chơi Thông thường, các hướng phát triển của một trò chơi sẽ xoay quanh người chơi (nhân vật mà người chơi điều khiển) Việc này về cơ bản không ảnh hưởng gì tới giá trị của một trò chơi cả, tuy nhiên nếu xét về việc phát triển một thế giới mở, việc một khu vực chỉ bắt đầu vận hành khi có bản thân người chơi xuất hiện sẽ khiến cho thế giới đó thiếu đi chiều sâu

Mục tiêu lớn nhất mà tác giả đề tài muốn đạt được đó chính là phát triển được trò chơi sở hữu một thế giới luôn vận hành mà không cần có sự có mặt của nhân vật chính Bản thân người chơi cũng chỉ là một phần của mắt xích sinh học, không phải là người điều khiển thế giới đó

1.3 Tính năng khác biệt

Tác giả đã nghiên cứu, trải nghiệm và phân tích các trò chơi cùng thể loại và

Trang 18

18 nhận thấy một số vấn đề sau:

1.3.1 Hệ thống phát triển của quần thể/quần xã sinh vật (AI)

Trò chơi thế giới mở là một thể loại game mà người chơi được tự do khám phá một thế giới ảo rộng lớn, không bị giới hạn bởi các cấu trúc hay hướng dẫn tuyến tính Dựa trên định nghĩa, đa số các trò chơi thuộc thể loại này đều tập trung phát triển sao cho người chơi không cần phải đi theo một chuỗi nhiệm vụ tuyến tính nào đó, mà có thể tự do làm các hành động một cách tự do, không theo trật tự

Tuy nhiên, thế giới chủ yếu vẫn sẽ vận hành xoay quanh người chơi Người chơi đơn thuần chỉ cần lựa chọn xem mình sẽ hành động ra sao, mở nội dung của khu vực nào trước Các sinh vật/kẻ địch trong trò chơi sẽ lao vào chiến đấu với người chơi mà không quan tâm hay tương tác với sinh vật khác Thậm chí, các sinh vật đó sẽ không có bất kỳ hành động gì cho đến khi người chơi đi vào phạm vi cần thiết của chúng

Để có thể tăng thêm chiều sâu cho thế giới game mà người chơi trải nghiệm, em đã triển khai một giải pháp để giúp cho các loài trong trò chơi có thể tự sinh tồn, phát triển quần thể sao cho ngày một mạnh mẽ hơn mà không cần phải phụ thuộc vào sự tồn tại của nhân vật chính là người chơi Giải pháp này sẽ bao gồm có hệ thống quần thể, con đầu đàn và hệ thống phân công công việc dựa trên hệ số quan trọng và thời gian trong ngày

1.3.2 Hệ thống quan hệ giữa các loài

Giải quyết được vấn đề “bị động” của các loài, sinh vật trong trò chơi điện tử, tính năng tiếp theo mà em muốn thực hiện, chú trọng đến chính là hệ thống quan hệ/cách hành xử giữa các loài với nhau Cụ thể hơn, các sinh vật được sẽ không chỉ đơn thuần được phân làm hai nhóm là NPC (non-playable characters) và Enemies (kẻ địch), mà toàn bộ các thực thể trong trò chơi sẽ có chung một định danh là Entities (thực thể)

Trang 19

19

Giữa các thực thể với nhau sẽ có các mối quan hệ khác nhau, người chơi sẽ có nhiều hơn một phương thức để tiếp cận một sinh vật bất kỳ trong trò chơi, các đối tượng khác ngoài nhân vật chính cũng không chỉ chăm chăm vào việc tấn công người chơi nữa Người chơi có thể thực hiện các hành động để lấy cảm tình của các quần thể, từ đó chúng sẽ đáp lại ta dựa trên hành vi mà ta thực hiện

1.4 Mục tiêu đề tài

- Nghiên cứu và áp dụng Steering Behaviors cho việc di chuyển của AI trở nên tự nhiên nhưng không tiêu tốn quá nhiều tài nguyên để thực thi - Nghiên cứu và học hỏi phương pháp Neural Network để ứng dụng cho việc

tiếp nhận thông tin, xử lý và đưa ra hành động tương ứng của AI - Xây dựng hệ thống quan hệ giữa các quần thể, quần xã

- Xây dựng đa dạng các chức năng, cơ chế để khiến cho trải nghiệm chơi game của người chơi trở nên thú vị, không chỉ gò bó ở mặt học thuật - Phát triển trò chơi ở mức độ hoàn thiện nhất định

1.5 Đối tượng nghiên cứu 1.5.1 Các công nghệ

- Game Engine: Godot Mono 4.1.1 - IDE: Visual Studio Code

- Programming Language: C# - Version Control: Github

1.5.2 Đối tượng hướng đến trong phạm vi đề tài

- Những người thích trò chơi điện tử, có nhu cầu trải nghiệm một thế giới game có chiều sâu, thích sự tương tác giữa các loài sinh vật giống và khác nhau

Trang 20

20

- Những người chơi thích thể loại game Open-world, Roguelike/lite nói riêng Thích sự thăng tiến sức mạnh của nhân vật thông qua việc phiêu lưu, khám phá, nâng cấp từ những nguyên liệu kiếm được

1.6 Phạm vi nghiên cứu

Phạm vi môi trường: Windows Phạm vi chức năng:

Đối với trò chơi:

- Procedural Map Generation: hệ thống tạo dựng bản đồ một cách ngẫu nhiên theo một quy luật định sẵn

- Hệ thống hành vi của AI - Hệ thống quần thể

- Hệ thống quan hệ trong quần xã

Đối với người chơi:

- Di chuyển nhân vật

- Tấn công, nhào lộn, né tránh - Thu lượm/ Sử dụng vật phẩm - Trang bị/ Tháo gỡ vật phẩm - Nấu ăn & Chế tạo trang bị

- Nghiên cứu về Neural Network để ứng dụng cho xử lý hành vi của AI

Trang 21

21

- Ứng dụng Steering Behaviors để chân thật hóa cách di chuyển của AI - Quản lý mã nguồn sử dụng Github, quản lý tiến độ sử dụng Google Sheet,

Milanote

Trang 22

Godot Engine được phát triển bởi một nhóm lập trình viên tự do và được phát hành theo giấy phép MIT, cho phép người dùng sử dụng, sửa đổi và phân phối mã nguồn một cách tự do Điều này có nghĩa là bất kỳ ai cũng có thể sử dụng Godot Engine mà không cần trả bất kỳ khoản phí nào và có quyền truy cập vào mã nguồn của nó để tùy chỉnh theo nhu cầu của bạn

Godot Engine cung cấp một công cụ tạo trò chơi có giao diện dễ sử dụng và linh hoạt Nó sử dụng một ngôn ngữ lập trình tự động gọi là GDScript, tuy nhiên, bạn cũng có thể sử dụng các ngôn ngữ khác như C# hoặc C++ để phát triển trò chơi trong Godot Engine

Godot Engine hỗ trợ nhiều tính năng như hệ thống đồ họa 2D và 3D, hệ thống vật lý, xử lý âm thanh, quản lý tài nguyên, quản lý cảnh, giao diện người dùng, và nhiều hơn nữa Nó cung cấp một cộng đồng lớn và nhiều tài liệu hướng dẫn giúp bạn học và phát triển trò chơi trong Godot Engine

Hình 2-1: Godot Engine

Trang 23

23

2.2 Hệ thống tạo dựng màn chơi 2.2.1 Khái niệm

Tạo màn chơi tự động (Procedural Map Generation) là quá trình tạo ra các

màn chơi một cách tự động bằng cách sử dụng các thuật toán và quy tắc được xác định từ trước bởi Game Designers/Game Developers Procedural Map Generation cho phép người phát triển tạo ra các màn chơi ngẫu nhiên nhưng vẫn tuân theo các giới hạn, quy tắc được đặt sẵn thay vì phải thiết kế và xây dựng các màn chơi một cách thủ công Các phương pháp tạo màn chơi tự động không chỉ có lợi về mặt phát triển (tiết kiệm thời gian, giảm số lượng tài nguyên cần thiết,…) mà còn nâng cao trải nghiệm của người chơi ở một số thể loại nhất định yêu cầu sự thay đổi trong quá trình chơi

Quá trình tạo bản đồ có thể áp dụng cho nhiều thể loại trò chơi, từ game thế giới mở, game hành động, game nhập vai cho đến game chiến thuật Cách thức tạo bản đồ thường được xác định bởi các quy tắc logic và thuật toán, và có thể bao gồm các yếu tố như địa hình, địa điểm, đối tượng, và phân bố tài nguyên

Tuy nhiên, cũng có một số thách thức khi sử dụng Procedural Map Generation Thuật toán và các quy tắc được đặt ra ảnh hưởng rất lớn đến tính khả thi của màn chơi Nếu người phát triển sử dụng thuật toán và đặt ra các quy tắc không đủ đáp ứng việc tạo dựng thế giới, khả năng người chơi bị kẹt lại, không thể tiếp tục tiến trình chơi là hoàn toàn có thể xảy ra

Ngoài ra, việc kiểm soát chất lượng và đảm bảo rằng các màn chơi được tạo ra vẫn cung cấp được trải nghiệm chơi game tốt nhất cũng là một yếu tố vô cùng quan trọng

2.2.2 Tổng quan phương pháp xây dựng

Ngày nay có rất nhiều kỹ thuật tạo màn chơi tự động Song, hầu hết các phương

Trang 24

24 pháp đều sẽ trải qua 5 bước sau:

Hình 2-2: Mô tả quá trình tạo màn chơi tự động

Trong báo cáo luận án này, em sẽ tập trung nghiên cứu, kiến trúc và xây dựng một hệ thống tạo màn chơi tự động hoàn chỉnh sử dụng phương pháp lấy cảm hứng từ phương pháp Rapidly Exploring Random Tree (RRT)

2.2.3 Xây dựng hệ thống tạo màn chơi tự động 2.2.3.1 Xác định mục tiêu

Bước đầu tiên phải làm trong việc xây dựng hệ thống tạo màn chơi tự động chính là xác định được những nội dung mà game cần khởi tạo Ở đây, một màn chơi cửa đề tài cần có:

- Các vùng (regions) Các vùng sẽ định nghĩa xem khu vực đó sẽ có những kiểu địa hình nào, tỷ lệ ra các loại địa hình đó là bao nhiêu

- Các kiểu địa hình (terrains) Các kiểu địa hình sẽ định nghĩa xem địa hình đó sẽ có những loại vật thể, sinh vật nào, tỷ lệ của mỗi loại đó là bao nhiêu - Các thuộc tính, thành phần của địa hình đó (vật cản, quần thể,…)

2.2.3.2 Thiết kế quy tắc & thuật toán

Dựa trên các mục tiêu đã vạch ra, bước này sẽ xác định thuật toán phù hợp sao cho đáp ứng được các quy tắc được đề ra, cũng như tối ưu hóa việc tạo dựng màn chơi một cách hiệu quả Để thực hiện điều này, tác giả đã xác định dược các quy tắc cần thiết để có thể tạo ra một màn chơi ngẫu nhiên, từ đó tham khảo và ứng dụng một

Trang 25

25

số phương pháp phổ biến để tìm xem hướng đi tốt nhất

Phương pháp Ưu điểm Khuyết điểm

Cellular Automata Đơn giản Phù hợp để tạo ra các màn chơi dạng hang động, liền mạch với các vách tường ngăn cách

Bị giới hạn việc áp dụng nguyên tắc Độ tính toán tương đối phức tạp, có khả năng ảnh hưởng tới hiệu suất

Rapid Exploring Random Tree

Hiệu suất cao, có khả năng xử lý không gian chiều cao và độ chính xác có thể kiểm soát

Dễ bị mắc kẹt

Perlin Noise Tính tự nhiên và mượt mà, đa dạng và đa năng, có khả năng kiểm soát được

Phù hợp với lại các dạng tạo địa hình tự nhiên, thuần 3D, khác với định hướng phát triển game 3D Isometric Độ phức tạp tính toán cũng tương đối cao

Voronoi Diagrams Có tính tương thích với dữ liệu không gian, tính tương tác và trực quan

Độ phức tạp tính toán cao, gặp vấn đề với trường hợp cận biên

Wave Function Collapse

Tính đa dạng và đa năng, tự động và linh hoạt Có tính ngẫu nhiên đồng thời đi với khả năng tái tạo dựa trên các quy định, hình ảnh tạo trước

Độ phức tạp tính toán cao, có vấn đề về kích thước và tỉ lệ, bị giới hạn bởi tương đối nhiều ràng buộc

Bảng 2-1: Bảng phân tích các phương pháp tạo màn chơi tự động

Trong quá trình nghiên cứu và chạy thử, tác giả chủ yếu tập trung vào 3 phương

Trang 26

- Phương pháp Wave Function Collapse thì có khả năng tạo ra được những màn chơi đẹp mắt, đúng ý muốn của người phát triển Tuy nhiên, phương pháp này lại yêu cầu một khối lượng input lớn (các màn chơi được tạo trước) để sử dụng làm mẫu

- Phương pháp Rapid Exploring Random Tree thì tương đối phù hợp với định hướng của tác giả, nhưng lại không thật sự phù hợp với lại định hướng mà tác giả nhắm tới

Thế nên, tác giả quyết định lấy cảm hứng từ các phương pháp đã tìm hiểu và tạo nên một phiên bản đơn giản hơn, và hiệu quả hơn ở quy mô mà tác giả nhắm tới

Đầu tiên, một màn chơi sẽ được phân thành 3 cấp độ tạo dựng:

- Regions: là phần ảo, mang tính trừu tượng, nhằm tạo ra một chiều không gian tự nhiên, có tính kết nối

- Terrains: là những vùng “đất”, những không gian vật lý mà người chơi, các thực thể khác trong game có thể tương tác, đi lại được

- Contents: là những yếu tố với các tỷ lệ khác nhau sản sinh trên bề mặt Terrains

Trang 27

27

Hình 2-3: Tìm kiếm vị trí phù hợp để vùng tiếp theo

Đầu tiên, game sẽ chọn 1 vị trí ngẫu nhiên để đặt Region đầu tiên Có tổng cộng N Regions (N có thể thay đổi) Mỗi khi đặt xong 1 điểm, game sẽ lưu điểm đó vào một danh sách (list) – đặt tên là regionList

Tiếp đến, game sẽ chọn ngẫu nhiên 1 trong các điểm đã được lưu trong danh sách đã để cập trước đó (regionList) Sau đó, từ điểm đã được chọn, chọn 1 hướng bất kỳ trong 8 hướng xung quanh Nếu không có điểm đã được khởi tạo, game sẽ khởi tạo một khoảng cách ngẫu nhiên từ Min đến Max (Min và Max có thể thay đổi), và đặt điểm Region mới ở Khoảng Cách * Hướng Được Chọn

[ NewRegionPos = CurrentRegionPos + Distance * ChosenDirection ]

Hình 2-4: Kết nối hai điểm Regions lại

Trang 28

28

Mỗi Region có một danh sách bao gồm các Terrains với tọa độ khác nhau – gọi là terrainList Khi khởi tạo xong một Region mới ở vị trí mới, game sẽ thêm các Terrains vào terrainList của Region mới vừa được tạo ra Thứ tự thêm Terrain được xét theo chiều x hoặc y trước, không được xét cả hai một lúc, tránh trước hợp Terrain được tạo ở vị trí chéo, chặn khả năng di chuyển từ hai điểm của người chơi

Hơn hết, để tăng sự đa dạng trong hình thái của màn chơi, mỗi Region chỉ có thể là gốc để rẽ ra tối đa hai nhánh khác

2.2.3.3 Xử lý ngẫu nhiên

Ngẫu nhiên luôn là một bài toán khó đối với những người thiết kế, việc này cũng không là ngoại lệ trong khuôn khổ thiết kế trò chơi Tuy mục tiêu là tạo ra được một màn chơi ngẫu nhiên, chúng ta cần phải kiểm soát được tỷ lệ ra của các thành phần, tránh việc tạo ra các màn chơi vô lý, thiếu sự sáng tạo, thậm chí là không khả thi để chơi

Để tránh được việc đó, tác giả đã quyết định sử dụng phương pháp Weighted Random Selection

Trang 29

29

Từ đó, ta có các khoảng tỷ lệ với chặn dưới và chặn trên Nếu giá trị ngẫu nhiên sinh ra lớn hơn hoặc bằng chặn dưới và nhỏ hơn chặn trên, thành phần sinh ra sẽ là thành phần nằm ở khoảng đó

2.2.3.4 Kiểm tra & điều chỉnh

Weighted Random Selection là một phương pháp hiệu quả để có thể khống chế số lượng, tỷ lệ ra của các thực thể khác nhau, nhưng chúng ta đồng thời cũng cần phải khống chế tổng số lượng vật thể, cũng như là khoảng cách giữa các vật thể với nhau Hơn hết, một bài toàn khác sẽ được đặt ra rằng, các vật thể được sinh ra sẽ có trường hợp sinh ra lẻ tẻ, không đồng nhất, thiếu sức hấp dẫn

Để khắc phục vấn đề này, chúng ta sẽ có thể nhóm các nhóm thực thể lại với nhau và sinh ra nhóm đó, với các giá trị phù hợp thay vì sinh ra các giá trị đơn lẻ Các vật thể cũng sẽ có các quy tắc riêng để có thể khống chế cách được sinh ra

Một vật thể sẽ được đánh giá ở các khía cạnh bao gồm: - Có chặn hay không?

- Kích thước của vật thể là bao nhiêu? - Phần mở rộng là bao nhiêu?

Nếu như vật thể có khả năng chặn di chuyển, các vật thể khác phải cách vật thể đó ít nhất [1+ Phần mở rộng] Từ đó, dù cho trường hợp game liên tục sinh ra những vật cản, ta vẫn tránh được tình trạng cản đường di chuyển của người chơi

Trang 30

Để hỗ trợ trong việc sửa đổi, cập nhật các giá trị tạo màn nói riêng cũng như các giá trị trong game nói chung, tác giả sử dụng:

- Google Sheet: quản lý dữ liệu và trích xuất Json

- Newtonsoft Json: thư viện chuyển các dữ liệu từ file Json sang Class

Hình 2-7: Newtonsoft Json Library

2.3 Neural Network 2.3.1.1 Khái niệm

Mạng thần kinh (Neural Network) là một mô hình toán học được lấy cảm hứng từ cách hoạt động của hệ thần kinh sinh học trong não người Nó là một hệ thống gồm các phần tử xử lý thông tin, gọi là các "nơ-ron nhân tạo" (artificial neurons) hoặc "nút" (nodes), được kết nối với nhau thông qua các liên kết trọng số

Trang 31

31

Mạng thần kinh thường được tổ chức thành các lớp (layers) và có thể có một hoặc nhiều lớp ẩn (hidden layers) giữa lớp đầu vào (input layer) và lớp đầu ra (output layer) Mỗi nút trong mạng thần kinh nhận đầu vào từ các nút ở lớp trước đó, tính toán một giá trị dựa trên trọng số của các liên kết và hàm kích hoạt (activation function), sau đó truyền giá trị tính toán này cho các nút ở lớp tiếp theo

Hình 2-8: Neural Network

Quá trình này được lặp lại cho đến khi đạt được kết quả đầu ra cuối cùng Trong quá trình huấn luyện, mạng thần kinh điều chỉnh các trọng số của các liên kết để tối ưu hóa đầu ra dựa trên các dữ liệu huấn luyện đã biết trước Quá trình này được thực hiện thông qua các thuật toán tối ưu như "gradient descent" và "backpropagation"

Mạng thần kinh có khả năng học và tự điều chỉnh dựa trên các ví dụ đã biết, cho phép nó nhận biết các mẫu phức tạp và thực hiện các tác vụ như phân loại, nhận dạng, dự đoán, và xử lý thông tin trong nhiều lĩnh vực khác nhau Thành công của các mạng thần kinh đã được chứng minh trong nhiều ứng dụng, bao gồm nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên, xe tự lái, dự báo thị trường, và nhiều lĩnh vực khác

Trang 32

32

2.3.1.2 Khả năng ứng dụng vào đề tài

Neural Network là một mô hình toán học sở hữu rất nhiều ưu điểm nổi bật như là khả năng học tập, thích ứng dựa trên các dữ liệu cũ và mới Có khả năng xử lý thông tin phi cấu trúc, từ hình ảnh đến âm thanh Nó cũng có tính linh hoạt và khả năng mở rộng và xử lý song song, xử lý một lượng lớn dữ liệu và tính toán nhanh chóng

Tuy nhiên, Neural Network lại đòi hỏi lượng dữ liệu lớn để có thể huấn luyện, độ phức tạp cũng có thể bị mở rộng quá mức (số lượng lớp và nút quá lớn) Mạng thần kinh thường là mô hình black box, dẫn đến việc quá trình quyết định của nó cũng không dễ dàng để có thể hiểu và giải thích Điều này sẽ khiến cho việc kiểm tra, sửa lỗi trở nên khó khăn, thậm chí là phức tạp hóa khả năng xác định vấn đề

Trong quá trình tìm hiểu về các ứng dụng của công nghệ này ở lĩnh vực trò chơi điện tử, tác giả nhận thấy Neural Network thường được sử dụng cho Reinforcement Learning, với mục đích tạo ra các AI có thể tự động luyện để tự chơi và tìm ra giải pháp phá đảo game với tốc độ cao nhất Tuy nhiên, để có đảm bảo tính đúng đắn của AI, người phát triển phải xác định được chính xác số lượng nút đầu vào, đầu ra của mạng lưới, đồng thời giải quyết được toàn bộ các trường hợp khả thi thông qua các lớp và nút ẩn

Hình 2-9: Ví dụ về Neural Network cho rắn trong Snake Game

Trang 33

33

Từ đó, tác giả suy ra được rằng việc ứng dụng thực tế Neural Network vào quy mô đề tài hiện tại là không khả thi và hiệu quả, vì thế tác giả đã quyết định triển khai một phương án khác lấy cảm hứng từ mạng thần kinh

Trang 34

34

3.1 Phương pháp phát triển trò chơi 3.1.1 Hướng tiếp cận

Khi phát triển một trò chơi điện tử, điều cần quan tâm đến là đối tượng hướng đến là gì, công nghệ nào nên được sử dụng Những công nghệ phát triển trò chơi phổ biến hiện nay được kể đến như Unity, Unreal Engine, Godot Engine, Game Maker Studio 2 Sau khi tìm hiểu, nghiên cứu và đánh giá các công nghệ trên thì tác giả đã lựa chọn Godot Engine vì Godot Engine đang phát triển một cách mạnh mẽ, từ khía cạnh kỹ thuật đến khía cạnh hỗ trợ từ cộng đồng Ngôn ngữ lập trình cũng là một khía cạnh cần để tâm, tuy Godot có ngôn ngữ riêng là GDScript, nhưng xét về mặt hiệu suất và khối lượng thư viện hỗ trợ, C# lại là ngôn ngữ lập trình mà tác giả nghĩ là phù hợp nhất

3.1.2 Giải quyết vấn đề tối ưu trò chơi

Một trong những vấn đề đáng để tâm nhất trong việc phát triển một trò chơi 3D chính là việc tối ưu trò chơi Khác với việc sử dụng hình ảnh 2D (sprites), việc sử dụng các mô hình ba chiều có thể tiêu thụ rất nhiều GPU, dẫn đến sự ảnh hưởng rõ rệt trong hiệu suất xử lý của hệ thống game, gây giật/lag và những lỗi khó kiểm soát Bên cạnh các Meshes (tạo hình của mô hình), ta còn có Materials – những hiệu chỉnh về màu sắc, độ tương phản,… và Shaders – những đoạn mã lệnh thay đổi giá trị của Materials

Nếu như game 3D mà ta hướng tới chỉ giới hạn ở một không gian hữu hạn, nhỏ, không có nhiều thực thể, sự khác biệt về khía cạnh hiệu suất sẽ không thật sự rõ ràng Tuy nhiên, trò chơi mà đề tài hướng đến là trò chơi thế giới mở Vùng không gian được sinh ra tương đối lớn, đi với số lượng thực thể có thể lên tới hàng chục, hàng trăm ngàn

Với sự tiến bộ trong mặt công nghệ phần cứng, mức yêu cầu tối thiểu của các

Trang 35

35

tựa game cũng ngày một được nâng cao Tuy nhiên, để tối ưu trải nghiệm người dùng cũng như tạo cơ hội để nhiều nhóm người chơi khác nhau có thể tiếp cận trò chơi, tác giả đã đưa ra các giải pháp là:

- Lựa chọn định hướng hình ảnh cho trò chơi là Low-Poly

- Bằng cách giảm số lượng Poly cần thiết cho mỗi mô hình lại, ta sẽ có thể giảm thiểu được số bước cần thiết trong quá trình render của trò chơi - Hơn hết, ta cũng có thể giảm thiểu khối lượng dung lượng cho từng mô

hình

- Giảm thiểu số lượng Triangle tạo nên mỗi Mesh

- Đi song với việc giảm lượng Poly, tác giả còn phải chú ý đến số lượng Triangle mỗi Mesh sở hữu

- Sử dụng kỹ thuật hiển thị trong phạm vi Camera

- Về cơ bản, đây là kỹ thuật chỉ cấp phát dung lượng GPU để chạy các thực thể đang nằm trong phạm vi hoạt động của camera

- Tức là, những thực thể, sinh vật, môi trường nằm ngoài màn hình sẽ không hiển thị hình ảnh

- Tuy nhiên, để đảm bảo logic hoạt động của các loài sinh vật (theo tiêu chí đề ra là các sinh vật, thực thể sẽ luôn hoạt động dù không có sự hiện diện của người chơi), các thành phần như Vùng Va Chạm (collision), AI Behaviors (code-based) sẽ vẫn hoạt động song song chứ không bị tắt hay ngưng đi

3.2 Xây dựng hệ thống trí tuệ nhân tạo 3.2.1 Steering Behaviors

3.2.1.1 Khái niệm

Steering Behaviors, hay còn được gọi là hành vi điều khiển, là một phương pháp trong lĩnh vực trí tuệ nhân tạo và lập trình game để mô phỏng hành vi tự động của các đối tượng trong một môi trường 2D hoặc 3D Steering Behaviors tập trung

Trang 36

36

vào cách các đối tượng di chuyển, tương tác và phản ứng với môi trường xung quanh sử dụng các Vector định hướng

Các hành vi điều khiển có thể bao gồm:

- Seek (Tìm kiếm): đối tượng sẽ di chuyển theo hướng trực tiếp đến vị trí cụ thể

- Flee (Trốn): đối tượng di chuyển tránh xa khỏi một vị trí hay một đối tượng - Arrive (Đến nơi): tương tự với Seek nhưng đối tượng sẽ di chuyển với một tốc độ biến thiên Ví dụ như là đối tượng sẽ giảm dần tốc độ để ngừng lại vừa đủ tại vị trí chỉ định

- Wander (Lang thang): đối tượng di chuyển ngẫu nhiên trong một khu vực nhất định với các quy tắc đặt ra

- Obstacle Avoidance (Tránh vật cản): đối tượng sẽ tránh va chạm với các vật cản trong môi trường

Và còn rất nhiều hành vi khả thi khác có thể được xây dựng dựa trên quy tắc và bản chất của Steering Behaviors

Về bản chất, Steering Behaviors là phương pháp sử dụng Vector để điều khiển hướng di chuyển của một đối tượng Vậy nên, ta sẽ suy ra được giá trị rất lớn của phương pháp này, đó chính là khả năng kết hợp các hành vi với nhau, tương ứng với việc kết hợp các Vector với nhau

Trang 37

37

Hình 3-1: Ví dụ về các trường hợp kết hợp hành vi

Chính nhờ vào khả năng này, ta hoàn toàn có thể tạo ra một hệ thống quản lý hành vi của đối tượng, và đối tượng đó có thể thực hiện nhiều hành vi cùng một lúc Ví dụ như đối tượng cần phải vừa truy đuổi mục tiêu, vừa phải né tránh các vật cản trong quá trình truy bắt

3.2.1.2 Hành vi quay mình

Do phương pháp này sử dụng Vector để điều hướng, ta cần phải giải quyết bài toán rằng có nên ngay lập tức đưa đối tượng xoay về hướng vừa cập nhật hay không? Hay đối tượng đó có một lực cố định để thay đổi từ VectorA sang VectorB

Sau khi thử nghiệm cả hai hướng tiếp cận, tác giả đúc kết được những điều sau: - Việc chuyển hướng ngay lập tức mà không có lực trung gian sẽ khiến cho

đối tượng trông rất máy móc, thiếu tự nhiên

- Có rất nhiều yếu tố ảnh hưởng tới Vector di chuyển của đối tượng, việc không có điểm trung gian có khả năng khiến cho đối tượng “xoay lật” liên tục

Vì vậy, tác giả quyết định chọn hướng tiếp cận là thêm một phần chuyển giao giữa hai lực A và B

3.2.1.3 Hành vi né tránh vật cản

Một trong những phương pháp để giải quyết bài toán tìm đường trong trò chơi hoặc trong bài toán tìm kiếm đường đi trên đồ thị là sử dụng thuật toán A* Tuy nhiên, thuật toán này lại vô cùng tốn bộ nhớ, độ phức tạp thời gian có thể tăng dần tới cấp số nhân Hơn hết, màn chơi của đề tài là một màn chơi được tạo tự động, đồng thời có sự thay đổi về địa hình theo thời gian Với số lượng sinh vật lớn, việc chạy thuật toán A* liên tục để tìm đường sẽ cực kỳ kém hiệu quả

Trang 38

38

Để khắc phục vấn đề đó, tác giả quyết định để cho đối tượng xử lý hướng đi một cách cục bộ (không có thông tin từ môi trường ở toàn bộ màn chơi) Từ đó, giảm sự tiêu thụ bộ nhớ cũng như không làm giảm đi sự chân thật trong chuyển động

Hình 3-2: Raycasts xác định vật cản

Mỗi đối tượng khi sinh ra đều sẽ được khởi tạo số lượng n Raycasts (các tia bắn từ đối tượng hướng đến một hướng bằng một khoảng cách nhất định)

Mỗi Raycast sẽ được chấm điểm từ 0 đến 1 Điểm này sẽ được tính theo công

thức là: interest = raycastLength - distanceToCollider

Trong đó:

- interest: điểm

- raycastLength: độ dài raycast

- distanceToCollider: khoảng cách từ gốc raycast đến điểm va chạm

Từ đó, ta có thể suy được hướng đi của đối tượng Hướng đi của đối tượng sẽ là tổng của tất cả các Raycast sau khi nhân với điểm interest

𝑴𝒐𝒗𝒆𝑽𝒆𝒄𝒕𝒐𝒓 = ∑ 𝐫𝐚𝐲𝐜𝐚𝐬𝐭[𝐤] 𝒊𝒏𝒕𝒆𝒓𝒆𝒔𝒕 ∗ 𝒓𝒂𝒚𝒄𝒂𝒔𝒕[𝒌] 𝒅𝒊𝒓𝒆𝒄𝒕𝒊𝒐𝒏

𝒌=𝟎

Ngày đăng: 15/05/2024, 09:23

Tài liệu cùng người dùng

Tài liệu liên quan