Năm 2021, Việt Nam nổi lên như một “thủ phủ” của game ứng dụng blockchain, NFT với hàng loạt tựa game do người Việt sản xuất, phát hành, như Axie Infinity, My DeFi Pet, Theta Arena, Myth
Trang 1THÀNH PHỐ HỒ CHÍ MINH
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
KHÓA 2019-2023
GVHD: ThS NGUYỄN MINH ĐẠO SVTH : ĐỖ DUY LONG
S K L 0 1 2 0 4 8
Trang 2
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
ĐỖ DUY LONG: 19110390
ĐỀ TÀI PHÁT TRIỂN ỨNG DỤNG GAME BẰNG UNREAL ENGINE
KHÓA LUẬN TỐT NGHIỆP CÔNG NGHỆ PHẦN MỀM
GIÁO VIÊN HƯỚNG DẪN ThS NGUYỄN MINH ĐẠO
KHÓA 2019-2023
Trang 3PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên : Đỗ Duy Long MSSV: 19110390
Ngành: Công nghệ Thông tin
Tên đề tài: Phát triển ứng dụng game bằng Unreal Engine
Họ và tên Giáo viên hướng dẫn: ThS Nguyễn Minh Đạo
NHẬN XÉT
1 Về nội dung đề tài & khối lượng thực hiện:
2 Ưu điểm:
3 Khuyết điểm:
4 Đề nghị cho bảo vệ hay không ?
5 Đánh giá loại :
6 Điểm :
Tp Hồ Chí Minh, ngày tháng năm
Giáo viên hướng dẫn
(Ký & ghi rõ họ tên)
Trang 4PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên Sinh viên : Đỗ Duy Long MSSV: 19110390
Ngành: Công nghệ Thông tin
Tên đề tài: Phát triển ứng dụng game bằng Unreal Engine
Họ và tên Giáo viên phản biện: ThS Mai Anh Thơ
NHẬN XÉT
1 Về nội dung đề tài & khối lượng thực hiện:
2 Ưu điểm:
3 Khuyết điểm
4 Đề nghị cho bảo vệ hay không ?
5 Đánh giá loại :
6 Điểm :
Tp Hồ Chí Minh, ngày tháng năm
Giáo viên phản biện
(Ký & ghi rõ họ tên)
Trang 5LỜI CÁM ƠN
Lời đầu tiên em xin chân thành cảm ơn trường Đại học Sư phạm Kỹ thuật thành phố
Hồ Chí Minh và khoa Công nghệ thông tin đã tạo môi trường học tập, nghiên cứu để em có thể thực hiện và hoàn thành đề tài Khóa luận tốt nghiệp
Cảm ơn thầy Nguyễn Minh Đạo đã hướng dẫn và hỗ trợ em trong suốt quá trình thực hiện Nhờ có sự chỉ dẫn, giải đáp và chỉnh sửa của thầy mà em mới có thể thực hiện và hoàn thành đề tài đúng thời hạn
Với kinh nghiệm và kiến thức chuyên môn còn hạn chế, bài báo cáo này không thể tránh được những thiếu sót Em rất mong nhận được sự chỉ bảo, đóng góp ý kiến của quý thầy cô để em có thể rút ra kinh nghiệm và thực hiện tốt hơn sau này
Em xin chân thành cảm ơn
Hồ Chí Minh, ngày tháng năm
Sinh viên thực hiện
Trang 6ĐH SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CNTT
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP
Họ và tên Sinh viên thực hiện 1: Đỗ Duy Long Mã số SV: 19110390
Thời gian làm luận văn từ: 27/2/2023 (Tuần 1) đến 2/7/2023 (Tuần 19)
Chuyên ngành Công nghệ phần mềm
Tên luận văn: Phát triển ứng dụng game bằng Unreal Engine
Giáo viên hướng dẫn: ThS Nguyễn Minh Đạo
Nhiệm vụ của luận văn:
1 Nghiên cứu các kỹ thuật, công nghệ và bộ công cụ trong phần mềm phát triển trò chơi Unreal Engine: gameplay framework, cơ chế hoạt ảnh, âm thanh, vật lý, hiển thị hình ảnh, AI, Unreal Editor, Blueprint và các thành phần khác
2 Nghiên cứu các phần mềm hỗ trợ trong quá trình phát triển như phần mềm chỉnh sửa
âm thanh với Audacity, hình ảnh với Photoshop, video với Davinci Resolve 17
3 Nghiên cứu các kỹ thuật và công nghệ trong phát triển game: lập trình hướng đối tượng, lập trình hướng sự kiện, hệ thống trạng thái hữu hạn Finite State Machine
4 Đánh giá, tối ưu hiệu năng và dung lượng ứng dụng
5 Nghiên cứu trải nghiệm và cảm nhận game của người dùng
Đề cương viết luận văn:
MỞ ĐẦU
1 Tính cấp thiết của đề tài
2 Mục đích của đề tài
3 Các tiếp cận và phương pháp nghiên cứu
4 Phân tích những công trình có liên quan
5 Kết quả dự kiến đạt được
NỘI DUNG
Trang 71 Chương 1: Cơ sở lý thuyết
1.1 Phần mềm phát triển trò chơi
1.2 Unreal Engine
1.2.1 Lý do chọn Unreal Engine
1.2.2 Giới thiệu Unreal Engine
1.2.3 Ngôn ngữ lập trình trực quan Blueprint 1.2.4 Mô hình cấu trúc dự án trong Unreal Engine 1.2.4.1 Cấu trúc code
1.2.4.2 Cấu trúc gameplay 1.3 Quy trình thực hiện
1.3.1 Ý tưởng
1.3.2 Thiết kế
1.3.2.1 Cốt truyện 1.3.2.2 Nhân vật 1.3.2.3 Quái vật 1.3.2.4 Môi trường 1.3.2.5 Nâng cấp 1.3.3 Phát triển
Trang 83.7 Cốt truyện và nhiệm vụ
4 Chương 4: Giao diện game
5 Chương 5: Cài đặt và kiểm thử
5.1 Cài đặt phần mềm
5.2 Kiểm thử
KẾT LUẬN
1 Kết quả đạt được
2 Ưu điểm, nhược điểm
3 Mục tiêu mở rộng và hướng phát triển DANH MỤC TÀI LIỆU THAM KHẢO
Trang 9KẾ HOẠCH THỰC HIỆN
1 Tuần 1 Lập kế hoạch thực hiện chi tiết và đề
cương luận văn
2 Tuần 2, 3 Thực hiện tìm hiểu và khảo sát, mô tả ứng
dụng
Mô tả và xây dựng mô hình thiết kế ứng dụng
3 Tuần 4 Thiết kế lối chơi, quy tắc của trò chơi
5 Tuần 5 Thiết kế cơ bản hệ thống, chức năng có
trong game
Có những thành phần gì, thực hiện nhiệm vụ gì
3 Tuần 7, 8 Xây dựng hệ thống nhân vật và hệ thống
trạng thái nhân vật
4 Tuần 9, 10 Xây dựng hệ thống chiến đấu, chỉ số,
trang bị cơ bản
5 Tuần 11 Xây dựng hệ thống giao diện
6 Tuần 12, 13 Xây dựng hệ thống AI, quái vật và cạm
Trang 1011 Tuần 19 Kiểm thử và hoàn thành báo cáo
Giáo viên hướng dẫn
(Ký và ghi rõ họ tên)
Tp Hồ Chí Minh, ngày tháng năm
Người viết đề cương (Ký và ghi rõ họ tên)
Trang 1111
MỤC LỤC
LỜI CÁM ƠN 5
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP 6
MỤC LỤC 11
DANH MỤC HÌNH VẼ 15
DANH MỤC BẢNG BIỂU 18
DANH MỤC CHỮ VIẾT TẮT 20
MỞ ĐẦU 21
1 Tính cấp thiết của đề tài 21
2 Mục đích của đề tài 22
3 Cách tiếp cận và phương pháp nghiên cứu 22
3.1 Đối tượng nghiên cứu 22
3.2 Phạm vi nghiên cứu 22
4 Phân tích những công trình có liên quan 22
4.1 Hades 22
4.2 Curse Of The Dead Gods 24
5 Kết quả dự kiến đạt được 25
NỘI DUNG 27
1 Chương 1: CƠ SỞ LÝ THUYẾT 27
1.1 Phần mềm phát triển trò chơi 27
1.2 Unreal Engine 27
1.2.1 Lý do chọn Unreal Engine 27
1.2.2 Giới thiệu Unreal Engine 28
1.2.3 Ngôn ngữ lập trình trực quan Blueprint 28
Trang 1212
1.2.4 Mô hình cấu trúc dự án trong Unreal Engine 28
1.2.4.1 Cấu trúc code 29
1.2.4.2 Cấu trúc gameplay 31
1.3 Quy trình thực hiện 37
1.3.1 Ý tưởng 37
1.3.2 Thiết kế 37
1.3.2.1 Cốt truyện 37
1.3.2.2 Nhân vật chính 38
1.3.2.3 Quái vật 39
1.3.2.4 Môi trường 39
1.3.2.5 Nâng cấp 39
1.3.3 Phát triển 39
2 Chương 2: THIẾT KẾ 40
2.1 Danh sách chức năng 40
2.2 Danh sách kịch bản 41
2.3 Chi tiết kịch bản 42
3.3.1 UC1: Bắt đầu trò chơi 42
3.3.2 UC2: Di chuyển nhân vật 43
3.3.3 UC3: Né tránh 44
3.3.4 UC4: Đổi vũ khí 45
3.3.5 UC5: Tương tác vật phẩm 46
3.3.6 UC6: Tương tác NPC 47
3.3.7 UC7: Tấn công quái vật 48
3.3.8 UC8: Thay đổi cài đặt game 49
Trang 1313
3.3.9 UC9: Tương tác cốt truyện 50
2.4 Sơ đồ lớp 51
3.4.1 Sơ đồ lớp màn hình chính 51
3.4.2 Sơ đồ lớp game 52
3.4.3 Sơ đồ lớp quái vật 53
3 Chương 3: PHÁT TRIỂN 54
3.1 Người chơi 54
3.1.1 PlayerController 54
3.1.2 PlayerCharacter 54
3.1.3 Điều khiển 56
3.2 Quái vật 56
3.2.1 AIController 56
3.2.2 EnemyCharacter 59
3.3 Môi trường 61
3.4 Nâng cấp nhân vật 64
3.5 Thiết kế hệ thống 66
3.6 Lưu và tải dữ liệu 66
3.7 Cốt truyện và nhiệm vụ 67
4 Chương 4: GIAO DIỆN 69
4.1 Giao diện màn hình chính 69
4.2 Giao diện chọn file tải dữ liệu 71
4.3 Giao diện chọn đền thờ 72
4.4 Giao diện tương tác với NPC 73
4.5 Giao diện chọn nâng cấp 76
Trang 1414
4.6 Giao diện tạm dừng game 78
4.7 Giao diện trong game 82
4.8 Giao diện cốt truyện 83
5 Chương 5: CÀI ĐẶT VÀ KIỂM THỬ 86
5.1 Cài đặt phần mềm 86
5.1.1 Epic Games Launcher và Unreal Engine 5.0.3 86
5.1.2 Visual Studio 88
5.1.3 Project 89
5.2 Kiểm thử 91
5.2.1 Các loại kiểm thử áp dụng 91
5.2.2 Các trường hợp kiểm thử 92
5.2.2.1 Các trường hợp kiểm thử chức năng 92
5.2.2.2 Các trường hợp crash và bug 104
KẾT LUẬN 111
1 Kết quả đạt được 111
2 Ưu điểm, nhược điểm 111
3 Mục tiêu mở rộng và hướng phát triển 111
DANH MỤC TÀI LIỆU THAM KHẢO 112
Trang 1515
DANH MỤC HÌNH VẼ
Hình 1: Hình ảnh minh họa 1 trò chơi Hades 23
Hình 2: Hình ảnh minh họa 2 trò chơi Hades 24
Hình 3: Hình ảnh minh họa 1 trò chơi Curse Of The Dead Gods 25
Hình 4: Hình ảnh minh họa 2 trò chơi Curse Of The Dead Gods 25
Hình 5: Mô hình cấu trúc mã nguồn dự án game sử dụng Unreal Engine 30
Hình 6: Mô hình cấu trúc game 31
Hình 7: Mô hình vật thể nhận input từ người dùng 35
Hình 8: Mô hình kịch bản chung 42
Hình 9: Kịch bản bắt đầu trò chơi 42
Hình 10: Kịch bản người chơi di chuyển 43
Hình 11: Kịch bản người chơi né tránh 44
Hình 12: Kịch bản người chơi đổi vũ khí 45
Hình 13: Kịch bản tương tác vật phẩm 46
Hình 14: Kịch bản tương tác NPC 47
Hình 15: Kịch bản tấn công quái vật 48
Hình 16: Kịch bản thay đổi cài đặt game 49
Hình 17: Kịch bản tương tác luồng cốt truyện 50
Hình 18: Sơ đồ lớp màn hình chính 51
Hình 19: Sơ đồ lớp game 52
Hình 20: Sơ đồ lớp quái vật 53
Hình 21: Nhân vật người chơi điều khiển 54
Hình 22: Components của nhân vật người chơi 55
Hình 23: Cây trạng thái của quái vật Ghoul 57
Hình 24: Cây trạng thái của quái vật Lich 57
Hình 25: Cây trạng thái của quái vật Troll 58
Hình 26: Cây trạng thái của boss Master Grunt 58
Hình 27: Components của nhân vật quái vật 59
Hình 28: Nhân vật quái vật Ghoul 60
Hình 29: Nhân vật quái vật Lich 60
Trang 1616
Hình 30: Nhân vật quái vật Troll 61
Hình 31: Nhân vật quái vật Grunt Master 61
Hình 32: Mẫu tầng chỉ số 0 của đền thờ Cobra 62
Hình 33: Mẫu tầng chỉ số 1 của đền thờ Cobra 63
Hình 34: Mẫu tầng chỉ số 2 của đền thờ Cobra 63
Hình 35: Giao diện hoạt họa mở đầu 1 69
Hình 36: Giao diện hoạt họa mở đầu 2 69
Hình 37: Giao diện hoạt họa mở đầu 3 70
Hình 38: Giao diện màn hình chính 70
Hình 39: Giao diện chọn file lưu 71
Hình 40: Giao diện chọn đền thờ đã mở khóa 72
Hình 41: Giao diện chọn đền thờ chưa mở khóa 72
Hình 42: Giao diện tương tác NPC 1 73
Hình 43: Giao diện tương tác NPC 2 73
Hình 44: Giao diện tương tác NPC 3 74
Hình 45: Giao diện tương tác NPC 4 74
Hình 46: Giao diện tương tác NPC 5 75
Hình 47: Giao diện tương tác NPC 6 76
Hình 48: Giao diện chọn nâng cấp 1 76
Hình 49: Giao diện chọn nâng cấp 2 77
Hình 50: Giao diện chọn nâng cấp 3 77
Hình 51: Giao diện xem thông tin người chơi khi ngừng game 78
Hình 52: Giao diện thay đổi cài đặt âm thanh 79
Hình 53: Giao diện thay đổi cài đặt đồ họa 80
Hình 54: Giao diện xem thông tin input người dùng 81
Hình 55: Giao diện thay đổi cài đặt lối chơi 81
Hình 56: Giao diện gameplay 1 82
Hình 57: Giao diện gameplay 2 82
Hình 58: Giao diện gameplay 3 83
Hình 59: Giao diện gameplay 4 83
Trang 1717
Hình 60: Giao diện cốt truyện 1 84
Hình 61: Giao diện cốt truyện 2 84
Hình 62: Giao diện cốt truyện 3 85
Hình 63: Tải EpicGamesLauncher từ web 86
Hình 64: Đăng nhập vào EpicGamesLauncher 87
Hình 65: Di chuyển đến tab tải Unreal Engine 87
Hình 66: Nút chọn tải Unreal Engine 88
Hình 67: Chọn phiên bản Unreal Engine 88
Hình 68: Visual Studio workloads cho Unreal Engine 89
Hình 69: Xác nhận đăng ký phiên bản Unreal 89
Hình 70: Thông báo đăng ký phiên bản hoàn tất 90
Hình 71: ProjectNo6.uproject 90
Hình 72: Thông báo rebuild project do thiếu module 91
Hình 73: Output kiểm thử trong màn hình editor 91
Hình 74: Output kiểm thử trong Output Log 92
Trang 1818
DANH MỤC BẢNG BIỂU
Bảng 1: Luồng kịch bản bắt đầu trò chơi 43
Bảng 2: Luồng kịch bản người chơi di chuyển 43
Bảng 3: Luồng kịch bản người chơi né tránh 44
Bảng 4: Luồng kịch bản người chơi đổi vũ khí 45
Bảng 5: Luồng kịch bản tương tác vật phẩm 46
Bảng 6: Luồng kịch bản tương tác NPC 47
Bảng 7: Luồng kịch bản tấn công quái vật 48
Bảng 8: Luồng kịch bản thay đổi cài đặt game 49
Bảng 9: Luồng kịch bản tương tác luồng cốt truyện 50
Bảng 10: Bảng nâng cấp cơ bản 64
Bảng 11: Bảng nâng cấp nâng cao 65
Bảng 12: Luồng cốt truyện và nhiệm vụ tuyến tính 67
Bảng 13: Kiểm thử các đường link liên kết bên ngoài 92
Bảng 14: Kiểm thử bắt đầu trò chơi mới 92
Bảng 15: Kiểm thử bắt đầu trò chơi với dữ liệu đã được lưu 93
Bảng 16: Kiểm thử xóa dữ liệu đã lưu 93
Bảng 17: Kiểm thử mua nâng cấp thất bại 94
Bảng 18: Kiểm thử mua nâng cấp thành công 94
Bảng 19: Kiểm thử chọn nâng cấp cơ bản 95
Bảng 20: Kiểm thử chọn nâng cấp đặc biệt 96
Bảng 21: Kiểm thử lưu nhiệm vụ 96
Bảng 22: Kiểm thử lưu đối thoại 96
Bảng 23: Kiểm thử bẫy gai 97
Bảng 24: Kiểm thử bẫy mìn 97
Bảng 25: Kiểm thử bẫy lửa 98
Bảng 26: Kiểm thử tấn công quái vật Ghoul 98
Bảng 27: Kiểm thử tấn công quái vật Lich 99
Bảng 28: Kiểm thử tấn công quái vật Troll 99
Bảng 29: Kiểm thử tấn công quái vật Master Grunt 100
Trang 1919
Bảng 30: Kiểm thử tấn công của quái vật Ghoul 100
Bảng 31: Kiểm thử tấn công của quái vật Lich 101
Bảng 32: Kiểm thử tấn công của quái vật Troll 101
Bảng 33: Kiểm thử tấn công của quái vật Master Grunt 102
Bảng 34: Kiểm thử bắt đầu lại trò chơi từ khu vực bắt đầu khi chết 102
Bảng 35: Kiểm thử xem thông tin người chơi sau khi kích hoạt nâng cấp chỉ số 103
Bảng 36: Kiểm thử thông tin chỉ số sau khi hoàn thành tầng ngục 104
Trang 2121
MỞ ĐẦU
1 Tính cấp thiết của đề tài
Ngành công nghiệp trò chơi đã và đang là một trong những ngành công nghiệp giải trí lớn hàng đầu về doanh thu Đây cũng là ngành công nghiệp giải trí có tốc độ phát triển nhanh nhất trong thập kỷ qua Vào năm 2020, có 2.69 tỷ game thủ trên toàn thế giới Đặc biệt, thị trường châu Á rất lớn và dự đoán rằng số lượng game thủ sẽ không ngừng tăng lên trong những năm tiếp theo
Ngành công nghiệp trò chơi ở Việt Nam cũng không phải là ngoại lệ Trong những năm trở lại đây ngành công nghiệp trò chơi tại Việt Nam đang có những bước phát triển vượt bậc Các giải đấu Esport được tổ chức với quy mô và giải thưởng lớn, từ chuyên nghiệp đến nghiệp dư Thị trường game mobile ngày càng phát triển, Việt Nam được xếp hạng 7 trong các quốc gia phát hành mobile game trên toàn cầu Năm 2013, cú hit Flappy Bird được phát hành và nhanh chóng trở thành một cơn sốt trên toàn thế giới Năm 2021, Việt Nam nổi lên như một “thủ phủ” của game ứng dụng blockchain, NFT với hàng loạt tựa game do người Việt sản xuất, phát hành, như Axie Infinity, My DeFi Pet, Theta Arena, Mytheria… Các streamer, youtuber, các nhà sáng tạo nội dung, các tuyển thủ chuyên nghiệp cũng ngày càng đánh dấu được vị thế Ngoài ra, các tựa game indie cũng được ủng hộ và đánh giá cao như Thần Trùng, Cỏ Máu, Hoa, Task Force Elite Đặc biệt, Bộ Thông tin và Truyền thông đã xây dựng lộ trình 5 năm phát triển lĩnh vực game từ 2022 đến 2027 với bước đi quan trọng là Ngày hội Game Việt Nam - Vietnam GameVerse đã được tổ chức lần đầu tiên vào tháng 3-2023
Để tạo ra một tựa game, các studio cần sử dụng một game engine cụ thể và xuyên suốt quá trình phát triển, có thể là custom game engine do họ tự phát triển hoặc là các game engine miễn phí và trả phí có trên thị trường Việc sử dụng các game engine thay vì phát triển từ cơ bản nhất giúp giảm một lượng lớn chi phí và thời gian phải bỏ ra
Xuất phát từ thực tế trên, người thực hiện báo cáo cho rằng việc nghiên cứu một game engine cụ thể, về khả năng, độ linh hoạt, hỗ trợ của game engine đối với nhu cầu, đặc tính và thiết kế của một tựa game trước khi quyết định sử dụng nó để phát triển là điều quan
Trang 22Thứ hai, từ những tìm hiểu trên, sử dụng Unreal Engine để phát triển một tựa game hoàn thiện
3 Cách tiếp cận và phương pháp nghiên cứu
3.1 Đối tượng nghiên cứu
Đề tài tập trung nghiên cứu vào các đối tượng sau:
- Các tựa game được phát triển bằng Unreal Engine và các tựa game cùng thể loại với đề tài của người thực hiện đề tài
- Phần mềm phát triển game Unreal Engine, phiên bản 5.0.3 trở về trước
3.2 Phạm vi nghiên cứu
Đề tài tập trung nghiên cứu trong phạm vi:
- Công nghệ và kỹ thuật phát triển game trong Unreal Engine
- Xây dựng lối chơi và cơ chế gameplay
- Tối ưu hóa hiệu suất và tài nguyên của ứng dụng
- Đánh giá trải nghiệm người dùng, tương tác giữa người chơi và ứng dụng
4 Phân tích những công trình có liên quan
4.1 Hades
Là tựa game hành động nhập vai roguelike được phát triển và xuất bản bởi nhà phát hành Supergiant Games vào ngày 17/09/2020, được nhận giải thưởng "Best Indie Game" (Tựa game độc lập xuất sắc nhất) tại lễ trao giải The Game Awards 2020
Trang 2323
Hades kết hợp yếu tố hành động và nhập vai, trong đó người chơi phải chiến đấu qua các tầng của địa ngục, chống lại các quái vật và cạm bẫy nguy hiểm Trong quá trình tiến lên, người chơi có thể thu thập và nâng cấp các vũ khí, kỹ năng và lợi ích để tăng sức mạnh cho nhân vật
Đặc điểm nổi bật:
- Hệ thống combat nhanh nhẹn và hấp dẫn, với sự kết hợp giữa các vũ khí và kỹ năng đặc trưng
- Cốt truyện phong phú và độc đáo, được phát triển thông qua các cuộc trò chuyện
và tương tác với các nhân vật
- Hệ thống nâng cấp và tùy chỉnh cho phép người chơi tùy biến và xây dựng phong cách chơi riêng
Một số hình ảnh minh họa cho tựa game Hades:
Hình 1: Hình ảnh minh họa 1 trò chơi Hades
Trang 2424
Hình 2: Hình ảnh minh họa 2 trò chơi Hades
4.2 Curse Of The Dead Gods
Tựa game thuộc thể loại hành động nhập vai, roguelike được phát triển bởi Passtech Games, phát hành vào ngày 23/03/2021
Đặc điểm nổi bật:
- Hệ thống vũ khí đa dạng, kết hợp thay đổi trong quá trình chơi
- Hệ thống bóng tối và ánh sáng mới lạ
- Hệ thống lời nguyền làm thay đổi lối chơi, tạo trải nghiệm mới mẻ
Một số hình ảnh minh họa cho tựa game Curse Of The Dead Gods:
Trang 2525
Hình 3: Hình ảnh minh họa 1 trò chơi Curse Of The Dead Gods
Hình 4: Hình ảnh minh họa 2 trò chơi Curse Of The Dead Gods
5 Kết quả dự kiến đạt được
Phát triển một tựa game roguelike cơ bản, đảm bảo các yêu cầu về:
Trang 26- Dung lượng ứng dụng vừa phải, không chiếm quá nhiều bộ nhớ trên thiết bị người chơi
- Tối ưu hóa tốt, hiệu suất trò chơi cao, tạo trải nghiệm chơi game mượt mà, giảm thiểu độ trễ và giật lag trong quá trình trải nghiệm
Có thể mang tới những trải nghiệm hấp dẫn cho người chơi từ cơ chế hệ thống và lối chơi, cho đến điều khiển nhân vật cũng như sự cân đối của độ khó
Nhận được phản hồi tích cực từ cộng đồng, học hỏi được thêm kinh nghiệm trong quá trình phát triển, áp dụng cho các dự án tiếp theo
Trang 2727
NỘI DUNG
1 Chương 1: CƠ SỞ LÝ THUYẾT
1.1 Phần mềm phát triển trò chơi
Phần mềm phát triển trò chơi, hay game engine là một loại phần mềm dùng để thiết
kế và phát triển trò chơi điện tử Game engine không chỉ giúp tiết kiệm thời gian và công sức phát triển, mà còn cung cấp cho nhà phát triển các công cụ mạnh mẽ để tạo ra trò chơi chất lượng cao với hiệu suất tốt trên nhiều nền tảng
Game engine cung cấp nhiều tính năng, bao gồm:
- Tạo nền tảng phát triển: cung cấp các bộ công cụ và tài nguyên cần thiết để phát triển game, giảm thiểu công việc, tăng tốc quá trình phát triển
- Hỗ trợ đa nền tảng: cho phép trò chơi có thể được build và chạy trên nhiều nên tảng khác nhau
- Hỗ trợ đa dạng chức năng: cung cấp kiến trúc và chức năng chính, bao gồm quản
lý vật thể, hệ thống vật lý, hệ thống âm thanh, hệ thống hình ảnh, quản lý sự kiện
Trang 2828
- Khả năng tạo game trong môi trường 3D với chất lượng đồ họa cao, ánh sáng và hiệu ứng chân thật
- Bộ công cụ phát triển mạnh mẽ, hỗ trợ nhiều tính năng
- Kết hợp giữa 2 ngôn ngữ chính C++ và Blueprint Blueprint giúp tạo mẫu và kiểm thử chức năng hệ thống nhanh chóng, trước khi quyết định và thực hiện trong C++
- Mã nguồn mở, được phép truy cập và thay đổi
1.2.2 Giới thiệu Unreal Engine
Unreal Engine là phần mềm phát triển trò chơi được phát triển và cung cấp bởi Epic Games, được mô tả là một trong những bộ công cụ phát triển 3D thời gian thực tiên tiến nhất Nó cung cấp bộ công cụ đa dạng, linh hoạt trong công việc sáng tạo và miễn phí cho mọi đối tượng Sử dụng ngôn ngữ lập trình C++ và ngôn ngữ lập trình trực quan Blueprint
1.2.3 Ngôn ngữ lập trình trực quan Blueprint
Là ngôn ngữ dựa trên việc lập trình và thiết kế hệ thống thông qua việc sử dụng các node và không cần qua IDE Điều này giúp việc thực hiện các ý tưởng và hiện thực hóa nó được thực hiện một cách nhanh chóng hơn
Ngôn ngữ lập trình trực quan Blueprint không phải là một ngôn ngữ lập trình riêng biệt so với C++, nó được chạy trên một tầng máy ảo và được chuyển đổi thành C++ Việc chuyển đổi này sẽ tốn thêm tài nguyên trong quá trình chạy chương trình, cho nên theo lý thuyết, sử dụng Blueprint cơ bản sẽ tốn tài nguyên hơn so với việc sử dụng C++ nhưng không đáng kể nếu sử dụng hợp lý
Khi lập trình game với Unreal Engine, cần có sự cân bằng giữa việc sử dụng C++
và sử dụng Blueprint một cách hợp lý
1.2.4 Mô hình cấu trúc dự án trong Unreal Engine
Mô hình cấu trúc của một dự án game sử dụng Unreal Engine
Trang 2929
Hình: Mô hình cấu trúc một dự án game sử dụng Unreal Engine
1.2.4.1 Cấu trúc code
Trang 3030
Hình 5: Mô hình cấu trúc mã nguồn dự án game sử dụng Unreal Engine
Mã nguồn của dự án Unreal Engine, bao gồm mã nguồn của phần mềm phát triển được chia thành các module, plugin và platform
Module là cấu trúc code chia sẻ code và chức năng với nhau, đảm nhiệm một số chức năng và xử lý một phần cụ thể trong chương trình Ví dụ module xử lý lưu và tải dữ liệu, module thực hiện xử lý các giao diện người dùng
Plugin là cấu trúc code hoạt động độc lập chia sẻ code và chức năng giữa các thành phần trong nó, đảm nhiệm chức năng và xử lý một phần cụ thể Có thể được bật và tắt để
sử dụng khi cần thiết Ví dụ ControlRig plugin, AnimationWarping plugin
Plugin có thể bao gồm các file asset của Unreal Engine còn module chỉ bao gồm các file code Tùy vào mục đích sử dụng, plugin và module có thể được chia sẻ giữa các project với nhau
Mỗi module hoặc plugin sẽ có một file build.cs điều khiển và cấu hình module hoặc plugin đó được xây dựng như thế nào ví dụ như định nghĩa các module và plugin phụ thuộc khác, các thư viện được sử dụng và các đường dẫn
Trang 32Game Instance không bị phá hủy trong suốt quá trình chạy chương trình, vì vậy có thể dùng làm lớp chung chứa các hệ thống quản lý tự tạo khác, đặc biệt là khi chuyển level, các object và actor thường bị phá hủy
- Số lượng người chơi và người theo dõi hiện tại, cũng như số lượng người chơi
và người theo dõi tối đa
- Các mà người chơi tham gia vào game, bao gồm các quy tắc người chơi như chọn
vị trí ban đầu, chọn nhân vật sẽ điều khiển
- Định nghĩa game có thể được tạm dừng hay không và cách tạm dừng trò chơi được xử lý như thế nào
- Các chuyển đổi giữa các level, bao gồm việc xác định việc game có được bắt đầu với chế độ cinematic hay không
- Quy định các nguyên tắc của game hiện tại, ví dụ như game sinh tồn với quy tắc của nó, game bắn súng với quy tắc khác và nhiều quy tắc khác nữa
Có 2 lớp cha được hỗ trợ và sử dụng phổ biến trong Unreal Engine, bao gồm AGameMode và AGameModeBase
AGameModeBase đơn giản và dễ dàng sử dụng AGameMode được kế thừa từ AGameModeBase, được tích hợp thêm các chức năng khác hỗ trợ nhiều người chơi và các thuộc tính liên quan như một StateMachine hỗ trợ luồng gameplay
Game State
Trang 33Game State sẽ lưu trữ thông tin được thay đổi trong trận đấu, được nhìn thấy và chia
sẻ tới tất cả người chơi
Controller
Đối với người chơi và AI, Controller được xem như là bộ não điều khiển hành vi và các hoạt động liên quan Controller là các actor không có tính vật lý, có thể sở hữu các instance được tạo từ lớp Pawn hoặc các lớp kế thừa từ nó như Character
Các lớp kế thừa từ Controller như PlayerController và AIController hỗ trợ thêm các chức năng khác PlayerController được sử dụng bởi người chơi và thông thường sẽ nhận input từ người chơi để điều khiển nhân vật của mình, trong khi AIController được thực hiện thêm trí thông minh nhân tạo, dựa vào input từ môi trường xung quanh để quyết định hành động tiếp theo dựa trên các lập trình có sẵn, mặc định, không có khả năng học hỏi, dùng để điều khiển các nhân vật như NPC, quái vật,…
Controller nhận thông báo từ các sự kiện của Pawn mà nó đang điều khiển, từ đó có thể thực hiện các hành vi phản ứng lại các thông báo đó
Mặc định, mối quan hệ giữa Controller và Pawn là một-một, mỗi một Controller chỉ
có thể điều khiển và sở hữu một Pawn tại một thời điểm, nhưng có khả năng thay đổi Pawn đang được điều khiển
Player State
Player State được tạo cho mỗi người chơi trong server hoặc standalone Player State được đồng bộ hóa cho tất cả các client, chứa các thông tin được chia sẻ như tên người chơi, điểm số Player State được sử dụng để lưu trữ các thông tin được chia sẻ chung đến tất cả client, không chỉ riêng người sở hữu Giống như Player Controller, Player State được liên kết với Pawn theo mối quan hệ một-một
Pawn and Character
Trang 3434
Pawn là thực thể vật lý đại diện cho người chơi và các nhân vật trong thế giới, được điều khiển và thực hiện hành động thông qua các Controller Pawn không chỉ xác định về mặt hình ảnh của các nhân vật mà còn thể hiện cách nó tương tác với thế giới như tương tác vật lý và va chạm
Input Object
Input Object là các vật thể chịu trách nhiệm chuyển input nhận được từ người chơi
và chuyển nó thành dữ liệu sao cho các thành phần trong engine có thể hiểu được Là một phần trong quá trình chuyển đổi input từ phần cứng của người chơi sang dạng các sự kiện
và giá trị, thông qua việc sắp xếp và xác định giá trị tương ứng được liên kết (hay còn gọi
là map giá trị và InputComponent)
Input từ phần cứng của người chơi có thể bao gồm các phím được nhấn, thả, di chuyển chuột, click chuột; nhấn thả các phím trên các loại tay cầm; chạm màn hình cảm ứng, di chuyển từ máy VR và các input khác
Input từ phần cứng của người chơi được chuyển sang 2 dạng chính là dạng sự kiện
và dạng giá trị Quá trình chuyển đổi input thành dạng sự kiện gọi là ActionMapping, quá trình chuyển đổi input thành dạng giá trị là AxisMapping
InputComponent được sử dụng trong các lớp Pawn và Controller Pawn là lớp cha của các nhân vật mà người chơi có thể điều khiển, còn Controller là lớp cha của lớp mà người dùng điều khiển và thực hiện giao tiếp, tương tác với game InputComponent kết nối quá trình Action Mapping và AxisMapping thành các hành động trong game, có thể trong C++ hoặc blueprint
Thứ tự ưu tiên khi nhận input bởi InputComponent:
- Các Actor với AcceptsInput được bật Actor nào được bật gần nhất sẽ có thứ tự
ưu tiên cao nhất
- Các Controller
- Các LevelScript
- Các Pawn
Trang 35Các actor và component có thể được cài đặt để tick mỗi khung hình, thay đổi tick interval hoặc không bao giờ tick Ngoài ra, còn có thể thay đổi trình tự các nhóm tick khác nhau theo các nhóm của engine, về cơ bản sẽ thay đổi thứ tự hàm tick được thực hiện
Subsystem
Subsystem là các lớp được tự động tạo instance và được quản lý thời gian tồn tại khác nhau Các lớp này cung cấp khả năng sử dụng nhanh chóng, thay thế cho Singleton Pattern
Các loại Subsystem được hỗ trợ bao gồm:
- Engine Subsystem: được tạo, truy cập và tồn tại theo GEngine
- Editor Subsystem: được tạo, truy cập và tồn tại theo GEditor
Trang 3636
- GameInstance Subsystem: được tạo, truy cập và tồn tại theo UGameInstance
- LocalPlayer Subsystem: được tạo, truy cập và tồn tại theo ULocalPlayer
Event và Delegate
Event là một loại node trong blueprint, được gọi để bắt đầu thực hiện một loạt hành động nào đó theo thứ tự Về cơ bản, nó tương tự và có quan hệ với hàm trong code C++
Unreal Engine hỗ trợ các event mặc định được sử dụng nhiều, có thể kể đến:
- ActorBeginOverlap/ActorEndOverlap: event được gọi khi hai actor bắt đầu/kết thúc overlap với nhau Overlap là khi collision detection của 2 actor có điểm chung với nhau và các setting của chúng là phù hợp
- EventHit: event được gọi khi collision detection của 2 actor va chạm với nhau và các setting của chúng là phù hợp
- EventBeginPlay: được gọi khi game bắt đầu và actor đã được đặt sẵn trong level hoặc khi actor được spawn trong thời gian thực
- EventEndPlay: được gọi khi actor bị loại bỏ khỏi thế giới
- EventTick: được gọi mỗi khung hình khi các cài đặt của actor là đúng
- CustomEvent: được gọi khi chủ động gọi tới nó hoặc khi bind vào các delegate Delegate có thể gọi hàm thành viên của các vật thể C++ một cách an toàn Một delegate có thể được gắn bởi nhiều hàm của vật thể và thực hiện gọi hàm đó trong một thời điểm sau này
Trang 37xa hơn trong mỗi lần chơi
Ý tưởng:
- Tầng ngục ngẫu nhiên: sau khi chọn đền thờ cần khám phá, người chơi tiến hành khám phá các tầng ngục ngẫu nhiên được chọn ra từ mảng các khu vực tầng ngục mẫu
- Kẻ thù đa dạng, mỗi loại có một đặc tính riêng, bao gồm các loại quái vật cận chiến với tốc độ nhanh, quái vật có tầm đánh xa, quái vật có sức phòng thủ mạnh
mẽ và quái vật boss với sức chiến đấu cao
- Vũ khí và đòn đánh đa dạng, có thể kết hợp với nhau tạo ra các lối chơi riêng biệt cho mỗi người
- Nâng cấp người chơi trong quá trình khám phá
- Cốt truyện tuyến tính bao gồm các đoạn hội thoại với người dẫn truyện và các nhiệm vụ
1.3.2 Thiết kế
1.3.2.1 Cốt truyện
Tại một vùng đất xa xăm, xảy ra cuộc xâm lược khủng khiếp từ các quái vật Cả vùng đất chìm trong sự hỗn loạn và tuyệt vọng Một người chiến binh với danh xưng Revenant, người đã trải qua nhiều cuộc chiến và mang trong mình trái tim kiên cường, được chọn bởi các thần linh của vùng đất là người sẽ giải phóng tất cả Nhiệm vụ của Revenant
là tiêu diệt các quái vật và đưa lại hòa bình cho vùng đất bằng cách chinh phục 6 ngôi đền thờ quái vật, mỗi ngôi đền đại diện cho một khu vực của vùng đất
Trang 3838
1.3.2.2 Nhân vật chính
Nhân vật chính người chơi điều khiển, Revenant là một chiến binh khoác trên mình
bộ đồ cao bồi bí ẩn, che kín mặt Revenant có sự bền bỉ vượt trội, khả năng chịu đựng và phục hồi thể lực nhanh chóng sau những trận chiến khốc liệt
Sử dụng 2 vũ khí chính là đuốc và súng dao Đuốc có khả năng phát sáng và tấn công diện rộng, súng dao nhỏ gọn linh hoạt và hiệu quả cả trong cận chiến và tầm xa Việc kết hợp 2 loại vũ khí cùng với các đòn đánh khác nhau của chúng tạo nên độ linh hoạt và
đa dạng trong chiến đấu
Các đòn đánh có thể thực hiện được với vũ khí đuốc:
- Đuốc tấn công nhẹ: nhấn chuột trái
- Đuốc tấn công mạnh: nhấn chuột phải
- Đuốc tấn công diện rộng: giữ chuột trái cho tới khi đạt được một thời gian nhất định và thả chuột
Các đòn đánh có thể thực hiện được với vũ khí súng dao:
- Dao tấn công nhẹ: nhấn chuột trái
- Dao tấn công mạnh: giữ chuột trái cho tới khi đạt được một thời gian nhất định
và thả chuột
- Dao tấn công liên hoàn: nhấn chuột trái trước khi đòn đánh dao tấn công nhẹ trước đó kết thúc Tối đa có thể tấn công liên hoàn 4 combo
- Dao súng kết hợp: nhấn chuột phải khi đòn dao tấn công liên hoàn đang diễn ra
và combo hiện tại chưa phải là 4
- Súng tấn công nhẹ: nhấn chuột phải
- Súng tấn công mạnh: giữ chuột phải cho tới khi đạt được một thời gian nhất định
và thả chuột Nếu thả chuột trong khoảng thời gian trước hoặc sau thời điểm nhất định đó, đòn đánh trở thành đòn đánh súng tấn công nhẹ
Mặc định, Revenant có 5 điểm năng lượng Khi sử dụng các đòn đánh mạnh hoặc tránh né, trừ một điểm năng lượng Điểm năng lượng tự động hồi sau một khoảng thời gian ngắn người chơi không thực hiện các hành động, di chuyển không tính là hành động của người chơi
Trang 3939
1.3.2.3 Quái vật
Một môi trường đền thờ được thiết kế với ít nhất 3 loại quái vật tiêu biểu, bao gồm quái vật cận chiến với tầm đánh ngắn, quái vật tầm xa với tầm đánh dài và quái vật dạng mini boss
- Quái vật cận chiến: thường có kích thước nhỏ, linh hoạt, tấn công bằng cách xông thẳng vào mục tiêu và gây sát thương Loại quái vật này thường có lượng máu thấp, tuy nhiên di chuyển nhanh và đông về số lượng
- Quái vật tầm xa: thường có hình dạng của các quái vật bay, tấn công người chơi
từ xa, có thể bằng cung tên, súng, phép thuật hoặc năng lượng
- Quái vật mini boss: thường có kích thước lớn, tấn công cận chiến với sát thương lớn, lượng máu trâu và giáp cao tuy nhiên độ linh hoạt thấp
1.3.2.4 Môi trường
Mỗi đền thờ có đặc điểm riêng về môi trường, bao gồm hình dạng, màu sắc, chủ đề
và các đặc điểm khác Môi trường của đền thờ được chia thành các khu vực nhỏ, gọi là các tầng, được liên kết với nhau thông qua các cổng lối đi Hoàn thành tầng hiện tại bằng cách tiêu diệt hết quái vật có trong tầng đó để có thể di chuyển đến tầng kế tiếp
Nâng cấp tạm thời mua từ NPC chỉ có tác dụng trong tầng ngục hiện tại, khi hoàn thành tầng ngục nâng cấp sẽ mất tác dụng
1.3.3 Phát triển
Phát triển ứng dụng qua các giai đoạn:
- Tạo lớp điều khiển người chơi, xử lý input
Trang 40- Xây dựng hệ thống chiến đấu, sử dụng cho người chơi và quái vật
- Xây dựng hệ thống chỉ số, sử dụng cho người chơi và quái vật, được mở rộng cho người chơi với các chỉ số phụ
- Xây dựng hệ thống vũ khí cho người chơi
- Xây dựng hệ thống hiệu ứng hình ảnh và âm thanh
- Xây dựng hệ thống quái vật, điều khiển trạng thái thông qua BehaviorTree
- Tích hợp các hệ thống, điều chỉnh và tạo gameplay cơ bản
- Xây dựng hệ thống giao diện người dùng
- Xây dựng hệ thống môi trường ngẫu nhiên
- Xây dựng hệ thống tiến trình và nâng cấp
- Quản lý trạng thái thông qua hệ thống trạng thái hữu hạn Finite State Machine và hệ thống trạng thái cây Behavior Tree: điều khiển logic, việc chuyển đổi giữa các trạng thái của nhân vật người chơi và quái vật
- Xử lý chiến đấu giữa người chơi và quái vật bao gồm vũ khí, đòn đánh, chỉ số, hiệu ứng hình ảnh và âm thanh