PHÁT TRIỂN GAME 3D BẮN SÚNG FPS FINAL BATTLEGROUND TRÊN NỀN TẢNG UNITY

57 12 0
PHÁT TRIỂN GAME 3D BẮN SÚNG FPS FINAL BATTLEGROUND TRÊN NỀN TẢNG UNITY

Đ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

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA PHÁT TRIỂN NÔNG THÔN   BÁO CÁO NIÊN LUẬN NGÀNH ĐỀ TÀI: PHÁT TRIỂN GAME 3D BẮN SÚNG FPS FINAL BATTLEGROUND TRÊN NỀN TẢNG UNITY Giảng viên hướng dẫn: Sinh viên thực hiện: Lê Công Lý ThS Sử Kim Anh Mã số sinh viên: B1809605 Mã lớp: HG18V7A1 Khóa: 44 Cần Thơ, tháng năm 2021 TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA PHÁT TRIỂN NÔNG THÔN   BÁO CÁO NIÊN LUẬN NGÀNH ĐỀ TÀI: PHÁT TRIỂN GAME 3D BẮN SÚNG FPS FINAL BATTLEGROUND TRÊN NỀN TẢNG UNITY Giảng viên hướng dẫn: Sinh viên thực hiện: Lê Công Lý ThS Sử Kim Anh Mã số sinh viên: B1809605 Mã lớp: HG18V7A1 Khóa: 44 Cần Thơ, tháng năm 2021 LỜI CẢM ƠN Lời em xin chân thành cảm ơn đến cô Sử Kim Anh giúp em nhiều trình thực niên luận ngành Được phân công hướng dẫn cô Sử Kim Anh em thực đề tài “Phát triển game 3D bắn súng FPS Final Battleground tảng Unity” Trong trình thực hiện, giúp đỡ tận tình cô em thu nhiều kiến thức quý báu giúp em nhiều trình học làm việc tương lai Do hạn chế kiến thức kinh nghiệm lập trình nên đề tài khơng tránh khỏi số sai sót Em mong nhận góp ý để đề tài hoàn chỉnh hơn, đồng thời tạo tiền đề tốt cho nghiên cứu sau Một lần em xin chân thành cảm ơn giúp đỡ q trình thực để em hoàn thành tốt niên luận ngành Cần Thơ, ngày tháng năm Sinh viên thực Lê Công Lý i NHẬN XÉT Cần Thơ, ngày tháng năm Giảng viên hướng dẫn ThS Sử Kim Anh ii MỤC LỤC Trang CHƯƠNG TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ NGHIÊN CỨU 1.1.1 Hiện trạng 1.1.2 Mục tiêu 1.2 PHẠM VI CỦA ĐỀ TÀI 1.2.1 Về sở lý thuyết 1.2.2 Về kỹ thuật 1.3 PHƯƠNG PHÁP NGHIÊN CỨU 1.3.1 Thu thập liệu 1.3.2 Công cụ công nghệ phát triển CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ UNITY ENGINE 2.1.1 Unity gì? 2.1.2 Quá trình phát triển Unity 2.1.3 Một số thống kê Unity 2.1.4 Ưu điểm Unity 2.1.5 Các khái niệm Unity 2.1.6 Cửa sổ làm việc 2.1.7 Các phần mềm hỗ trợ khác 14 2.1.8 Game hướng phát triển 15 2.2 TỔNG QUAN VỀ GAME ENGINE 17 2.2.1 Khái niệm 17 2.2.2 Mục đích 17 2.2.3 Ảo hóa phần cứng (Hardware Abstraction) 18 2.2.4 Lịch sử 18 2.2.5 Xu hướng 18 2.2.6 Phần mềm trung gian 19 iii 2.2.7 Game Engine cho Game bắn súng góc nhìn người thứ (FPS) 19 2.2.8 Phân loại Game Engine theo mức độ chuyên biệt 20 2.3 TỔNG QUAN VỀ THẾ GIỚI 3D 21 2.3.1 Hệ trục tọa độ (coordinates) 21 2.3.2 Không gian cục toàn cục (Local Space World Space) 21 2.3.3 Vec-tơ (Vectors) 21 2.3.4 Camera (Cameras) 22 2.3.5 Đa giác (Polygon), cạnh (Edges), đỉnh (Vertices) mắt lưới (Meshes) 22 2.3.6 Vật liệu (Materials), kết cấu (Textures) đổ bóng (Shaders) 23 CHƯƠNG MƠ TẢ VÀ THIẾT KẾ GAME 24 3.1 GIỚI THIỆU GAME 24 3.1.1 Ý tưởng 24 3.1.2 Màn chơi 24 3.2 CÁC BƯỚC THỰC HIỆN 24 3.2.1 Tạo đồ 24 3.2.2 Tạo nhân vật 26 3.2.3 Tạo robot kẻ thù 27 3.2.4 Code Game 30 3.3 MỘT SỐ CLASS TRONG GAME 31 3.3.1 Player Input Handler 31 3.3.2 Player Character Controller 31 3.3.3 PlayerWeaponsManager 31 3.3.4 Jetpack 32 3.3.5 Actor 32 3.3.6 WeaponController 33 3.3.7 Damageable 33 3.3.8 ProjectileBase 33 3.3.9 EnemyController 35 iv 3.3.10 EnemyMobile 35 3.4 PHÂN TÍCH SƠ ĐỒ USECASE VÀ LUỒNG GAME 36 3.4.1 Sơ đồ Usecase 36 3.4.2 Luồng game 36 3.5 GIAO DIỆN GAME 39 3.5.1 Menu vào game 39 3.5.2 Bắn Enemy game 40 3.5.3 Tạm dừng/Tùy chọn game 42 3.5.4 Hoàn thành nhiệm vụ game 43 3.5.5 Khơng hồn thành nhiệm vụ 44 CHƯƠNG KẾT LUẬN 45 4.1 KẾT QUẢ ĐẠT ĐƯỢC 45 4.1.1 Về kiến thức 45 4.1.2 Về kỹ 45 4.1.3 Về thái độ 45 4.2 ƯU ĐIỂM – NHƯỢC ĐIỂM 45 4.2.1 Ưu điểm 45 4.2.2 Nhược điểm 46 4.3 HƯỚNG PHÁT TRIỂN 46 TÀI LIỆU THAM KHẢO 47 v DANH MỤC BẢNG Trang Bảng 1.1 Các phần mềm sử dụng vi DANH MỤC HÌNH Trang Hình 2.1 Một số Platform mà Unity hỗ trợ (Nguồn: Internet) Hình 2.2 Assets Unity Hình 2.3 Scenes Unity Hình 2.4 Game Object Unity Hình 2.5 Component Unity Hình 2.6 Tạo Script Unity Hình 2.7 Prefab Unity Hình 2.8 Material Unity Hình 2.9 Cửa sổ làm việc Unity Hình 2.10 Project Unity 10 Hình 2.11 Hierarchy Unity 11 Hình 2.12 Scene View Unity 12 Hình 2.13 Game View Unity 13 Hình 2.14 Inspector Unity 14 Hình 3.1 Bản đồ chơi thứ 25 Hình 3.2 Góc nhìn khác đồ thứ 25 Hình 3.3 Bản đồ chơi thứ hai 25 Hình 3.4 Góc nhìn khác đồ thứ hai 26 Hình 3.5 Player game 27 Hình 3.6 Các Script âm Player 27 Hình 3.7 Enemy_HoverBot game 28 Hình 3.8 Thiết lập cho robot tuần tra 28 Hình 3.9 Các Script âm Enemy_HoverBot 29 Hình 3.10 Enemy_Turret game 29 Hình 3.11 Các Script âm Enemy_Turret 29 Hình 3.12 Code game 30 Hình 3.13 Quy trình bắn game 34 vii Hình 3.14 Sơ đồ Usecase game 36 Hình 3.15 Luồng game 37 Hình 3.16 File > Build Setting 37 Hình 3.17 Thêm vào game 38 Hình 3.18 Mở GameManager 38 Hình 3.19 Đổi từ “WinScene” thành “SecondaryScene” 39 Hình 3.20 Menu vào game 40 Hình 3.21 Hướng dẫn điều khiển game 40 Hình 3.22 Bắn hạ Enemy game 41 Hình 3.23 Máu nhận sau bắn hạ Enemy 41 Hình 3.24 Bắn hạ Enemy khác game 42 Hình 3.25 Tạm dừng/Tùy chọn game 42 Hình 3.26 Sau bắn hạ Enemy thứ 43 Hình 3.27 Sau bắn hạ Enemy thứ hai 43 Hình 3.28 Menu sau hoàn thành nhiệm vụ 44 Hình 3.29 Menu sau nhiệm vụ thất bại 44 viii 3.3.6 WeaponController Mọi đối tượng vũ khí có thành phần WeaponController WeaponController đại diện cho vũ khí Loại vũ khí, định loại đạn nên sử dụng, đạn BulkAngle (cho súng ngắn), aimZoomRatio, v.v Thu phóng để bắn tỉa: Ví dụ, có súng trường bắn tỉa có chức phóng to súng lục Trong trường hợp đó, sử dụng aimZoomRatio Bắn súng: Trong WeaponController, khởi tạo prefabs đường đạn Dòng chức bên HandleShootInputs -> TryShoot -> HandleShoot Vị trí dấu đầu dịng: Mọi vị trí đạn tạo vũ khí Muzzle Ngoài ra, hiệu ứng đèn flash mõm tạo Ngăn chặn việc bắn nhanh: Nếu gọi hàm HandleShoot thực nhanh chóng, viên đạn tạo Nếu gọi HandleShoot người dùng nhấn nút viên đạn tạo nhanh người dùng có tốc độ ánh sáng! Chúng ta phải ngăn chặn Có biến m_LastTimeShoot ngăn việc gọi hàm thực nhanh chóng Đây logic thời gian 3.3.7 Damageable Có lớp Health, đại diện cho sức khỏe Player Bot Để giảm sức khỏe người chơi/bot, có hai cách:  Gọi phương thức TakeDamage lớp sức khỏe  Thông qua Damagable, gọi phương thức TakeDamage lớp sức khỏe Số dùng để phóng đạn Số sử dụng cho người chơi (Bị hư hỏng rơi / môi trường lý khác) 3.3.8 ProjectileBase Như bạn thấy, ProjectileStandard có thành viên ProjectileBase ProjectileBase có biến UnityAction, onShoot 33 đại biểu, onShoot gọi phương thức Shoot Logic thực tế liên quan đến Projectile nằm lớp ProjectileStandard Thành phần ProjectileStandard gắn vào Projectile_ [WeaponName] Đạn có bán kính để phát va chạm Điều chỉnh súng Torbjorn: Nếu bạn biết đến Overwatch (game Blizzard) có nhân vật Torbjorn Một chút thay đổi tạo cảm giác khác biệt Điều chỉnh số giá trị để tạo đường đạn giống với súng Torbjorn Gọi lại Register: Phương thức OnEnable, đăng ký phương thức OnShot cho đại biểu onShot ProjectileBase Khi gọi phương thức Shoot ProjectileBase phương thức gọi lại OnShot ProjectileStandard gọi Hình 3.14 Quy trình bắn game Khi người dùng bắn súng, số chức gọi gọi lại onShot gọi thông qua đại biểu Trong OnShot, đặt shootTime, tốc độ, m_LastRootPosition, v.v Đặc biệt m_LastRootPosition để theo dõi vị trí sử dụng để phát va chạm Ngăn chặn việc bắn súng trước tường: Người dùng bắn súng phía trước tường Khi người dùng thực gần tường, viên đạn xuyên qua tường Chúng ta cần ngăn chặn điều Phát va chạm: Điều quan trọng đường đạn phát va chạm Để phát va chạm, sử dụng sphere shape Như bạn biết viên đạn nhanh, có nghĩa xuyên qua tường kẻ thù, chí nhân vật người chơi Vì vậy, phát sphere vs plane sphere 34 vs sphere không đủ Chúng ta phải xem xét thời gian trơi Trong Unity tích hợp sẵn chức cho việc sử dụng Lưu trữ m_LastRootPosition: Khi kết thúc phương thức Update, nên lưu trữ m_LastRootPosition bên để theo dõi vị trí cuối đường đạn Quá trình nổ hư hỏng: Trong phương pháp OnHit, tạo hạt, phát SFX tự hủy Đối với q trình thiệt hại, sử dụng lớp Damageable Sử dụng GetComponent, nhận comp Damagable sau gọi hàm InflictDamage Nếu loại đạn khu vực (như bom), gọi InflictDamageInArea 3.3.9 EnemyController Khi nói kẻ thù (đối với lập trình viên AI), thơng thường lớp kẻ thù có trạng thái, hành vi AI Ví dụ, trạng thái nhàn rỗi, di chuyển, cơng, chết Trong ví dụ này, EnemyMobile EnemyTurret có hành vi di chuyển AI riêng điều khiển kẻ thù EnemyController EnemyController khơng có kết nối với EnemyMobile EnemyTurret Thay vào đó, EnemyMobile EnemyTurret sử dụng EnemyController EnemyController có weekPath, chức tiện ích khác logic chung cho EnemyMobile EnemyTurret 3.3.10 EnemyMobile EnemyMobile lớp AI cho Enemy HoverBot EnemyMobile có trạng thái Tuần tra, Theo dõi, Tấn công Dữ liệu tuần tra lấy từ đối tượng trò chơi tuần tra 35 Lớp PatrolPath có pathNode Kẻ thù theo đường trạng thái Tuần tra Ngay kẻ thù nhìn thấy người chơi thay đổi trạng thái người Điều chỉnh cao độ âm cho chuyển động: Khi kẻ thù di chuyển, thay đổi cao độ âm dựa tốc độ Transitions: Có nhiều cách khác để triển khai FSM (Finite State Machine) Theo định nghĩa, trạng thái có kết nối nó, sau kết nối có điều kiện Nếu trạng thái khơng có kết nối phù hợp trạng thái thực thi logic dựa trạng thái (nhập, cập nhật, thốt) Trong ví dụ bot này, trình chuyển đổi cập nhật logic tách thành chức UpdateAIStateTransitions UpdateCurrentAIState Theo cá nhân, tách logic chuyển tiếp cập nhật ý kiến hay 3.4 PHÂN TÍCH SƠ ĐỒ USECASE VÀ LUỒNG GAME 3.4.1 Sơ đồ Usecase Hình 3.15 Sơ đồ Usecase game 3.4.2 Luồng game Tạo cảnh cách chép MainScene thực thay đổi bạn muốn Để chép MainScene, tìm cửa sổ Project ( Assets> FPS> Scenes > MainScene ), chọn cú nhấp chuột, sau nhấn Ctrl + D (Windows) Cmd + D (Mac), sau đổi tên 36 Gọi cảnh SecondaryScene, cảnh tên bạn chọn Bây bạn có cảnh trò chơi bổ sung (hoặc 'cấp độ'), bạn điều chỉnh luồng trò chơi để cảnh bạn trải nghiệm sau: Hình 3.16 Luồng game Nếu MainScene mà bạn đáp ứng điều kiện thắng (mũi tên màu xanh cây), bạn thẳng đến SecondaryScene, bạn đáp ứng điều kiện thắng lần (mũi tên màu xanh cây), bạn đến WinScene Ngược lại, bạn đáp ứng điều kiện thua (mũi tên đỏ) điểm nào, bạn đến LoseScene Cuối cùng, bạn chọn “Chơi lại” từ WinScene LoseScene, bạn bắt đầu lại MainScene Các bước thực hiện:  Bắt đầu cách khởi chạy cảnh bạn cách nhấp đúp vào  Tiếp theo, mở cửa sổ Build Settings (File > Build Settings…) Hình 3.17 File > Build Setting 37  Nhấp vào nút Add Open Scenes (nằm phần bên phải cửa sổ) Bạn thấy SecondaryScene xuất danh sách Scenes in Build bạn trông giống sau: Hình 3.18 Thêm vào game  Mở MainScene từ cửa sổ Project, tới cửa sổ Hierarchy chọn Đối tượng GameManager GameObject: Hình 3.19 Mở GameManager  Sau cửa sổ Inspector, tới thành phần Game Flow Manager tìm tham số Win Scene Name thay đổi từ “WinScene” thành “SecondaryScene” 38 Hình 3.20 Đổi từ “WinScene” thành “SecondaryScene”  Bây bạn sẵn sàng để kiểm tra trò chơi Khởi chạy MainScene cách nhấn Play, sau chơi giành chiến thắng Khi bạn thắng, cảnh tải cảnh phụ 3.5 GIAO DIỆN GAME 3.5.1 Menu vào game Menu vào game có button chính:  Vào game: Bắt đầu vào game  Điều khiển: Hướng dẫn điều khiển nhân vật game  Thốt: Thốt khỏi game 39 Hình 3.21 Menu vào game Khi nhấn vào button Điều khiển: Hình 3.22 Hướng dẫn điều khiển game 3.5.2 Bắn Enemy game Người chơi bắn súng để tiêu diệt Enemy, Enemy có lượng máu định, có Enemy máu nhiều máu nên người chơi phải bắn liên tục để tiêu diệt chúng Bắn liên tiếp sát thương mạnh 40 Hình 3.23 Bắn hạ Enemy game Sau bắn hạ Enemy, có lượng máu cấp cứu nơi Enemy bị hạ: Hình 3.24 Máu nhận sau bắn hạ Enemy 41 Hình 3.25 Bắn hạ Enemy khác game 3.5.3 Tạm dừng/Tùy chọn game Nhấn phím Tab phím P để tạm dừng game, Menu tạm dừng có mục:     Tốc độ chuột: Cho phép chỉnh tốc độ chuột nhanh hay chậm Đổ bóng: Bật tắt đổ bóng game Bất khả chiến bại: Người chơi không bị máu bị Enemy bắn Tốc độ khung hình: Đếm số khung hình/giây game Khung hình lý tưởng để chơi game mượt từ 50 – 60 FPS  Hướng dẫn: Hướng dẫn điều khiển game  Screenshot: Chụp ảnh hình chơi game Hình 3.26 Tạm dừng/Tùy chọn game 42 3.5.4 Hoàn thành nhiệm vụ game Hình 3.27 Sau bắn hạ Enemy thứ Sau bắn hạ tất Enemy thứ nhất, người chơi chuyển qua thứ hai Hình 3.28 Sau bắn hạ Enemy thứ hai Sau bắn hạ tất Enemy thứ hai, người chơi hồn thành nhiệm vụ Menu hồn thành nhiệm vụ có button:  Chơi lại: Chơi lại game từ đầu  Menu: Trở menu đầu game  Thoát: Thoát khỏi game 43 Hình 3.29 Menu sau hồn thành nhiệm vụ 3.5.5 Khơng hồn thành nhiệm vụ Người chơi sau bị Enemy bắn hạ khơng hồn thành nhiệm vụ Menu khơng hồn thành nhiệm vụ có button:  Chơi lại: Chơi lại game từ đầu  Menu: Trở menu đầu game  Thoát: Thốt khỏi game Hình 3.30 Menu sau nhiệm vụ thất bại 44 CHƯƠNG KẾT LUẬN 4.1 KẾT QUẢ ĐẠT ĐƯỢC 4.1.1 Về kiến thức Hiểu cấu trúc, cách thức hoạt động, cách thức phát triển ứng dụng Unity Nâng cao kiến thức lập trình tiếng anh chuyên ngành thông qua tài liệu Unity Tiếng Anh Thiết kế phát triển nhân vật game nhứng phần mềm hỗ trợ Photoshop, 3DS MAX, Xây dựng chức máu, chơi, chế độ AI Unity, thông qua ngơn ngữ lập trình C# Visual Code Studio Sau hồn thành thành cơng game, khơng ngừng bổ sung cho kiến thức bản, cần thiết cho q trình làm việc sau Nhờ hiểu sâu ứng dụng kiến thức học vào thiết kế game ứng dụng thực tế Qua áp dụng lý thuyết vào thực tiễn, có vai trị định hoạt động nghề nghiệp sau trường 4.1.2 Về kỹ Hình thành kỹ lập trình ứng dụng thực tế phù hợp với yêu cầu đặt Có kỹ lựa chọn phương án lập trình để hệ thống hoạt động với u cầu đặt Ngồi cịn hình thành kỹ lựa chọn, tìm hiểu, phân tích tài liệu liên quan để từ bổ sung thêm kiến thức phục vụ cho trình học tập 4.1.3 Về thái độ Có thái độ học tập, làm việc nghiêm túc, độc lập theo hướng dẫn giáo viên, làm việc tập chung có trách nhiệm với cơng việc Có ý thức việc tìm hiểu, nghiên cứu tài liệu để thực đề tài, tự giác nghiên cứu để vận dụng kiến thức học vào giải vấn đề đề tài, qua thấy yêu cầu thực tế để có cố gắng, chuẩn bị kiến thức sau trường 4.2 ƯU ĐIỂM – NHƯỢC ĐIỂM 4.2.1 Ưu điểm Game cho khả phản hồi cao, chơi mượt mà 45 Dưới góc nhìn thứ nhất, “FPS FinalBattleground” mang lại cảm giác chơi vô chân thật Giao diện đơn giản, thân thiện, dễ sử dụng phù hợp với nhiều người 4.2.2 Nhược điểm Do kiến thức Unity hạn chế nên chức game cịn đơn giản Game chưa có nhiều nhân vật Sắp xếp nhân vật chơi chưa logic 4.3 HƯỚNG PHÁT TRIỂN Tăng thêm nhiều chơi để người chơi có thật nhiều điều khám phá Thêm vũ khí, nhân vật, nâng cấp Enemy lên level khó Cải thiện AI Enemy Thêm chức như: Điều chỉnh độ phân giải, tăng giảm âm lượng, Tối ưu hóa để game chạy tốt hơn, phần trình phát triển game, nói cách đơn giản quy trình để cải tiến tính hiệu hiệu game Vấn đề tối ưu hoá đặc biệt quan trọng trình phát triển game mobile 46 TÀI LIỆU THAM KHẢO Efraim Meulenberg, Game Development for iPhone/iPad Using Unity iPhone, VTC, 2010 Efraim Meulenberg, Game Development with Unity, VTC, 2010 Ryan Henson Creighton, Unity 3D Game Development by Example, PackT Publishing, 2010 Will Goldstone, Unity Game Development Essential, Packt Publishing, 2009 http://www.unityprefabs.com/wormgame­cartoony­series­tutorial.html http://www.3dbuzz.com/vbforum/content.php?176 https://learn.unity.com/project/fps-template https://viblo.asia/p/gioi-thieu-ve-unity-engine-game-engine-pho-biennhat-hien-nay-V3m5WBj8lO7 47

Ngày đăng: 10/12/2022, 09:06

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

Tài liệu liên quan