1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng game 2d bắn phi thuyền vũ trụ với unity

71 16 2

Đ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

Thông tin cơ bản

Tiêu đề Xây Dựng Game 2D Bắn Phi Thuyền Vũ Trụ Với Unity
Tác giả Dín Hiền Dũng, Nguyễn Hoàng Phúc
Người hướng dẫn GV Đinh Nguyễn Anh Dũng
Trường học Đại Học Quốc Gia Tp. Hồ Chí Minh
Chuyên ngành Công Nghệ Phần Mềm
Thể loại Đồ án
Năm xuất bản 2023
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 71
Dung lượng 3,75 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trên hệ máy PDP-1 14Hình 3.2 Code di chuyển cho background 16Hình 3.3 Lớp cơ sở GameMonoBehaviour 17 Hình 3.5 Cấu trúc của ShipController 19Hình 3.6 Cấu trúc chung của GameObject Ship 19

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA CÔNG NGHỆ PHẦN MỀM

ĐỒ ÁN 1 XÂY DỰNG GAME 2D BẮN PHI THUYỀN VŨ TRỤ

VỚI UNITY

GV HƯỚNG DẪN: ĐINH NGUYỄN ANH DŨNG

SV THỰC HIỆN:

Dín Hiền Dũng - 20521205 Nguyễn Hoàng Phúc - 20521768

TP HỒ CHÍ MINH, 2023

Trang 2

LỜI CẢM ƠN

Lời đầu tiên em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy ĐinhNguyễn Anh Dũng - giảng viên hướng dẫn Đồ án 1 đã hỗ trợ những thông tin cầnthiết và giải đáp những thắc mắc cho nhóm trong suốt quá trình thực hiện đề tài

Đồng thời nhóm em cũng muốn gửi lời cảm ơn đến các anh chị khóa trên,đặc biệt là những anh chị trong khoa đã chia sẻ những kinh nghiệm quý báu về mônhọc cũng như những kiến thức liên quan

Vì kiến thức của chúng em vẫn còn hạn hẹp nên không thể tránh khỏi nhữngthiếu sót trong quá trình thực hiện đồ án Vì vậy nhóm chúng em luôn mong đợinhận được những ý kiến đóng góp quý báu từ phía giảng viên để qua đó có thể rútkinh nghiệm, tự sửa chữa, hoàn thiện bản thân mình trên tinh thần nghiêm túc, tựgiác học hỏi Một lần nữa nhóm chúng em xin chân thành cảm ơn thầy

Thành phố Hồ Chí Minh, 05 tháng 07 năm 2023

Sinh viên

DÍN HIỀN DŨNGNGUYỄN HOÀNG PHÚC

Trang 3

MỤC LỤC

Chương 1 MỞ ĐẦU

1.1 Tổng quan đề tài

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

1.3 Mục tiêu

1.4 Phạm vi nghiên cứu

Chương 2 CƠ SỞ LÝ THUYẾT

2.1 Unity

2.2 Aseprite

2.3 C#

2.4 Microsoft Visual Studio

Chương 3 THIẾT KẾ VÀ PHÁT TRIỂN

3.1 Tổng quan

3.1.1 Tên game

3.1.2 Thể loại

3.2 Gameplay

3.2.1 Mục tiêu

3.2.2 Tiến trình

3.3 Thiết kế

3.3.1 Game manager

3.3.2 Background

3.3.3 Base Class

3.3.4 Ship

3.3.5 Ability

3.3.6 Spawner

Trang 4

3.3.7 Despawn

3.3.8 Bullet

3.3.9 Laser

3.3.10 Enemy

3.3.11 Item

3.3.12 WaveManager

3.3.13 LevelManager

3.3.14 User interface

Chương 4 THIẾT KẾ CLASS

4.1 Class Diagram

4.1.1 Ship Class Diagram

4.1.2 Enemy Class Diagram

4.1.3 Bullet Class Diagram

4.1.4 Level and Wave Class Diagram

4.1.5 Item Class Diagram

4.1.6 Ability Class Diagram

4.2 Danh sách class

4.2.1 Danh sách class thuộc ShipPlayer

4.2.2 Danh sách class thuộc Enemy

4.2.3 Danh sách class thuộc Bullet

4.2.4 Danh sách class thuộc Level and Wave

4.2.5 Danh sách class thuộc Item

4.2.6 Danh sách class thuộc Ability

Chương 5 USE CASE

5.1 Sơ đồ USE CASE

5.1.1 Player

Trang 5

5.1.2 Enemy

5.2 Danh sách tác nhân

5.3 Danh sách USE CASE

5.4 Mô tả chi tiết USE CASE

5.4.1 Trở về màn hình chính

5.4.2 Chọn phi thuyền

5.4.3 Chọn màn chơi

5.4.4 Xem thông tin nhà phát triển

5.4.5 Di chuyển của người chơi

5.4.6 Sử dụng kỹ năng

5.4.7 Gây sát thương

5.4.8 Nhận sát thương

5.4.9 Nhặt vật phẩm

5.4.10 Rơi vật phẩm

5.4.11 Di chuyển của Enemy

Chương 6 TỔNG KẾT

6.1 Kết quả đạt được

6.2 Hạn chế

6.3 Hướng phát triển

DANH MỤC HÌNH

Hình 1.1 Một số game shoot ’em up phổ biến 3

Trang 6

Hình 2.1 Unity game engine 5Hình 2.2 Giao diện unity 6Hình 2.3 Sự khác biệt giữa phép chiếu perspective và phép chiếu orthographic 8

Hình 2.5 Hình 2.5 C# Logo 11Hình 2.6 Microsoft Visual Studio Logo 12Hình 3.1 Spacewar! Trên hệ máy PDP-1 14Hình 3.2 Code di chuyển cho background 16Hình 3.3 Lớp cơ sở GameMonoBehaviour 17

Hình 3.5 Cấu trúc của ShipController 19Hình 3.6 Cấu trúc chung của GameObject Ship 19Hình 3.7 Cấu trúc của Ability 20Hình 3.8 Cấu trúc Component Script của một Spawner 21Hình 3.9 Lớp Abstract Despawn 23Hình 3.10 Hàm CanDespawn được triển khai trong lớp DespawnByDistance 24Hình 3.11 Hàm CanDespawn được triển khai trong lớp DespawnByTime 24Hình 3.12 Bullet Shuriken 25Hình 3.13 Cấu trúc của lớp BullerController 26Hình 3.14 Cấu trúc của GameObject Bullet 26

Trang 7

Hình 3.24 Cấu trúc của LevelManager 34Hình 3.25 Màn hình chính 36Hình 3.26 Màn hình chọn phi thuyền 36Hình 3.27 Màn hình thông tin nhà phát 37Hình 3.28 Màn hình chọn màn chơi 37Hình 3.29 Màn hình GamePlay 38Hình 3.30 Màn hình tạm dừng 38Hình 3.31 Màn hình thua cuộc 39Hình 3.32 Màn hình thắng màn chơi 39Hình 4.1 Ship Class Diagram 40Hình 4.2 Enemy Class Diagram 41Hình 4.3 Bullet Class Diagram 42Hình 4.4 Level and Wave Class Diagram 43Hình 4.5 Item Class Diagram 44Hình 4.6 Ability Class Diagram 45Hình 5.1 Player Use Case Diagram 51Hình 5.2 Enemy Use Case Diagram 52

DANH MỤC BẢNG

Trang 8

Bảng 4.1 Bảng danh sách class thuộc ShipPlayer 46Bảng 4.2 Bảng danh sách class thuộc Enemy 47Bảng 4.3 Bảng danh sách class thuộc Bullet 48Bảng 4.4 Bảng danh sách class thuộc Level and Wave 49Bảng 4.5 Bảng danh sách class thuộc Item 49Bảng 4.6 Bảng danh sách class thuộc Ability 50Bảng 5.1 Bảng danh sách tác nhân 53Bảng 5.2 Bảng danh sách USE CASE 54Bảng 5.3 Bảng mô tả chi tiết use case trở về màn hình chính 54Bảng 5.4 Bảng mô tả chi tiết use case chọn phi thuyền 55Bảng 5.5 Bảng mô tả chi tiết use case chọn màn chơi 56Bảng 5.6 Bảng mô tả chi tiết use case xem thông tin nhà phát triển 56Bảng 5.7 Bảng mô tả chi tiết use case di chuyển của người chơi 57Bảng 5.8 Bảng mô tả chi tiết use case sử dụng kỹ năng 57Bảng 5.9 Bảng mô tả chi tiết use case gây sát thương 58Bảng 5.10 Bảng mô tả chi tiết use case nhận sát thương 59Bảng 5.11 Bảng mô tả chi tiết use case nhặt vật phẩm 60Bảng 5.12 Bảng mô tả chi tiết use case rơi vật phẩm 60Bảng 5.13 Bảng mô tả chi tiết use case di chuyển của Enemy 61

TÓM TẮT ĐỒ ÁN

Trang 9

Ngày nay, ngành công nghiệp trò chơi điện tử là một trong những ngành lớnnhất và phát triển nhanh nhất xung quanh, cung cấp việc làm cho nhiều người và cómột thị trường rất lớn Từ những năm 1950 cho đến nay, nhiều thể loại trò chơi điện

tử khác nhau đã được tạo ra phù hợp với thị hiếu của nhiều người khác nhau Trong

số đó, trò chơi Shoot 'em up chủ yếu bao gồm một người chơi cố gắng hoàn thànhtrò chơi trong khi tránh các chướng ngại vật khác nhau có thể bao gồm kẻ thù, vậtthể môi trường hoặc các loại đạn khác nhau Chúng em luôn quan tâm đến việc tựmình phát triển một thứ, điều đó đã dẫn chúng em cân nhắc thực hiện dự án này:một trò chơi điện tử 2D thuộc thể loại bắn súng, mà chúng em đã đặt tên là SpaceInvader UT2D

Đồ án này tập trung vào việc phát triển một trò chơi 2D bắn phi thuyền vũtrụ với giao diện người dùng hấp dẫn, hệ thống gameplay phong phú và đồ họa đẹpmắt Trò chơi này được phát triển trên nền tảng Unity, một công cụ phổ biến tronglĩnh vực phát triển trò chơi

Bằng cách tạo ra Space Invader UT2D, chúng em đã học được cách thiết kếtrò chơi điện tử và được phát triển Quá trình này bao gồm việc sử dụng các cáccông cụ thiết kế đồ họa Aseprite, cũng như công cụ Unity và ngôn ngữ lập trình C#

để kết hợp chúng thành một trò chơi hoạt động trơn tru Sử dụng các asset 2D miễnphí trên mạng cũng như một số được chúng em tự thiết kế bằng Aseprite, chúng đãthiết kế nhiều đối tượng đồ họa cho trò chơi này trong đó bao gồm các phi thuyềnkhông gian khác nhau, phi thuyền Boss phức tạp và đa dạng các vật thể như là cácvật phẩm và các loại đạn trong màn chơi

Phần cuối cùng của khóa luận là trình bày kết quả đã thực hiện lên cuốn báocáo, đưa ra kết luận và hướng phát triển cho hệ thống trong tương lai

Nội dung khóa luận được trình bày trong 6 chương:

- Chương 01: MỞ ĐẦU

Trình bày sơ bộ về thực trạng, nhu cầu thực tế Xác định mục tiêu và phạm vi đề tài

- Chương 02: CƠ SỞ LÝ THUYẾT

Trang 10

Giới thiệu, trình bày các kiến thức kỹ thuật, công nghệ mà nhóm sử dụng.

- Chương 03: THIẾT KẾ VÀ PHÁT TRIỂN

Trình bày, phân tích và thiết kế các thành phần cốt lõi của trò chơi

- Chương 04: THIẾT KẾ CLASS

Trình bày chi tiết mô hình các đối tượng được sử dụng trong trò chơi thông qua cácCLASS DIAGRAM

- Chương 5: USE CASE

Trình bày chi tiết nội dung thiết kế USE CASE trong trò môi

Trang 11

trung vào thể loại bắn súng góc nhìn từ trên xuống còn được gọi là shoot 'em up,

đây là một trong những thể loại trò chơi rất phổ biến hiện nay với lối chơi đơn giảnnhưng hứng thú, dựa theo nhu cầu giải trí của người chơi, nhóm chúng em quyếtđịnh chọn đề tài này

Hình 1.1 Một số game shoot ’em up phổ biến

Trang 12

1.3 Mục tiêu

Từ lúc nhỏ, chúng em đã dành vô số thời gian để chơi trò chơi điện tử.Theo thời gian, chúng em bắt đầu phân tích các trò chơi và đặt ra những câuhỏi: họ đã làm điều đó như thế nào?, em có thể tự làm được không? Dầndần, em từng bước phát triển được những trò chơi đơn giản và phát hiện rarằng lập trình game rất thú vị Và chúng em đã ấp ủ tạo ra được một trò chơihoàn chỉnh và phát hành trên cửa hàng ứng dụng

Do đó, mục tiêu chính của dự án này là thiết kế và phát triển hoàntoàn một trò chơi điện tử 2D thuộc thể loại bắn súng, mang tên SpaceShooter U2TD, đồng thời dành thời gian để học các nguyên tắc và công cụkhác nhau cần thiết để phát triển trò chơi Để có thể đạt được mục tiêu chínhnày, chúng em đã chia dự án thành một tập hợp của các mục tiêu khác nhau

mà từ đó các nhiệm vụ cụ thể được tạo ra sau đó Những chỉ tiêu này baogồm:

● Tìm hiểu tổng quan về kiến trúc của Unity và phương pháp xây dựngcác ứng dụng trong Unity

● Luyện tập khả năng phân tích, thiết kế cấu trúc của một ứng dụng tròchơi điện tử

● Ứng dụng toán học và vật lý để xây dựng logic cho trò chơi

● Đóng góp cho cộng động một trò chơi để giải trí sau những giờ họctập, lao động căng thẳng

1.4 Phạm vi nghiên cứu

1.4.1 Phạm vi môi trường:

Ứng dụng trò chơi điện tử chạy trên Android

1.4.2 Phạm vi chức năng:

● Cung cấp cho người chơi một trò chơi giải trí ngoại tuyến

● Hệ thống giao diện thân thiện, dễ sử dụng

● Hệ thống môi trường và đa dạng cấu trúc màn chơi

Trang 13

● H th ng tệ thống tương tác giúp người chơi di chuyển và điều khiển ống tương tác giúp người chơi di chuyển và điều khiển ương tác giúp người chơi di chuyển và điều khiển.ng tác giúp người chơi di chuyển và điều khiển.i ch i di chuy n và đi u khi n.ơng tác giúp người chơi di chuyển và điều khiển ển và điều khiển ều khiển ển và điều khiển.

● H th ng k đ ch và tệ thống tương tác giúp người chơi di chuyển và điều khiển ống tương tác giúp người chơi di chuyển và điều khiển ẻ địch và tương tác gây sát thương của kẻ địch ịch và tương tác gây sát thương của kẻ địch ương tác giúp người chơi di chuyển và điều khiển.ng tác gây sát thương tác giúp người chơi di chuyển và điều khiển.ng c a k đ ch.ủa kẻ địch ẻ địch và tương tác gây sát thương của kẻ địch ịch và tương tác gây sát thương của kẻ địch

● H th ng đ h a pixel b t m t, h p d n.ệ thống tương tác giúp người chơi di chuyển và điều khiển ống tương tác giúp người chơi di chuyển và điều khiển ồ họa pixel bắt mắt, hấp dẫn ọa pixel bắt mắt, hấp dẫn ắt mắt, hấp dẫn ắt mắt, hấp dẫn ấp dẫn ẫn

Trang 14

Chương 2 CƠ SỞ LÝ THUYẾT

2.1 Unity

Unity là game engine hoàn toàn miễn phí mạnh mẽ với lượng công cụ đadạng, đáp ứng gần như đầy đủ nhu cầu phát triển hoàn chỉnh một tựa game của cácstudio indie Unity hiện nay còn hỗ trợ triển khai lên đến 27 nền tảng khác nhau,trong đó có cả nền tảng mục tiêu của nhóm là Android và iOS Đặc biệt, nhữngcông cụ xây dựng game 2D của Unity rất nổi trội khi so sánh với những engine khácnhư Unreal Ngoài ra, nguồn tài nguyên asset và plugin phong phú, bao gồm cảmiễn phí lẫn có phí, giúp nới rộng giới hạn sáng tạo

Hình 2.1 Unity game engine

Trang 15

Hình 2.2 Giao diện unityUnity [21] là một công cụ trò chơi (khung) được sử dụng để phát triển tròchơi đa nền tảng, được tạo bởi Unity Technologies Nó cung cấp một bộ công cụtiên tiến và API để giúp phát triển trò chơi dễ dàng hơn cho các nhà phát triển Cácngôn ngữ chính được sử dụng trong đó là C# và JavaScript Các thành phần Unityđược sử dụng trong dự án này được trình bày chi tiết như sau:

GameObject: Nó là một lớp cơ sở cho tất cả các đối tượng Unity có trong tròchơi

Component: Component là những thành phần có chức năng riêng biệt, đượcgán vào một hoặc nhiều Game Object Component bổ sung, cấu thành chức năngcho Game Object Từ đó, giúp chúng ta xây dựng lên những Game Object theo từngyêu cầu của game Mỗi script kế thừa từ lớp MonoBehaviour đều được coi là mộtcomponent

Resources: lớp này cho phép bạn tìm và truy cập Đối tượng bao gồm cảassets Trong trình chỉnh sửa, có thể sử dụng Resources.FindObjectsOfTypeAll đểđịnh vị nội dung và đối tượng Cảnh Có thể truy cập tất cả nội dung trong thư mục

có tên "Resources" ở bất kỳ đâu trong thư mục Assets thông qua các hàm

Trang 16

Resources.Load Nhiều thư mục "Resources" có thể tồn tại và khi tải các đối tượng,mỗi đối tượng sẽ được kiểm tra.

Prefab: Nó cho phép người dùng lưu trữ GameObject với tất cả các thànhphần kèm theo và thuộc tính của nó, đồng thời nó hoạt động giống như một khuônmẫu mà từ đó các đối tượng mới có thể được tạo ra với các thuộc tính có sẵn vàđược đặt vào cảnh trò chơi

Scene: Nó chứa các đối tượng của trò chơi, ví dụ mỗi cấp độ trong trò chơi làmột Scene

Camera: Nó được sử dụng để hiển thị nội dung của cảnh và có hai loại cácphép chiếu (xem Hình 2.3): orthographic and perspective Trong phép chiếuorthographic, các đối tượng không cần phải có chiều sâu và chúng có vẻ bằngphẳng phép chiếu này là được sử dụng nhiều nhất trong các trò chơi 2D Về phépchiếu perspective, nó cho thấy thế giới theo giống cách mà chúng ta nhìn thấy.Trong trường hợp này, các đối tượng có độ sâu cho chúng ta khả năng phân biệtchúng một cách dễ dàng và chính xác đánh giá khoảng cách từ người quan sát đếnđối tượng Loại hình chiếu này là phổ biến nhất thường được sử dụng trong các tròchơi 3D Ví dụ, cho hai đối tượng giống nhau kích thước nhưng ở các khoảng cáchkhác nhau từ người quan sát, trong phép chiếu perspective đối tượng gần nhất có vẻlớn hơn đối tượng khác, trong khi ở dạng orthographic hình chiếu chúng dường như

có cùng kích thước bất kể khoảng cách

Trang 17

Hình 2.3 Sự khác biệt giữa phép chiếu perspective và phép chiếu orthographic

Transform: Nó xác định vị trí, góc quay và tỷ lệ của từng đối tượng trongScene Lưu ý rằng mọi GameObject đều có thành phần Transform

RigidBody và RigidBody2D: Nó được gắn vào GameObject và đặt nó dưới

sự kiểm soát của công cụ vật lý Unity, làm cho đối tượng có thể bị ảnh hưởng bởitrọng lực và được điều khiển bằng các lực khác nhau như trọng lực chẳng hạn Nócũng được sử dụng bởi các lớp Collider và Collider2D để phát hiện va chạm giữacác đối tượng khác nhau

Collider và Collider2D: Chúng được sử dụng để phát hiện va chạm giữa cácGameObject, có thành phần RigidBody hoặc Rigidbody2D được đính kèm đối với

nó Lưu ý rằng một GameObject có thể có nhiều máy va chạm được gắn vào nó chocác chức năng nâng cao

Script: Nó là một thành phần được sử dụng để kiểm soát logic trò chơi bằng

mã Script trong Unity có thể được viết bằng ngôn ngữ lập trình C# hoặc JavaScript

Texture: Đó là một hình ảnh bitmap, có thể ở các định dạng khác nhau,chẳng hạn như PNG, BMP hoặc JPG

Trang 18

Sprite: Là đối tượng đồ họa 2D tương đương với mô hình 3D trong môitrường 3D, nhưng đơn giản hơn vì Sprite chỉ là một Texture Một Sprite duy nhấtcũng có thể chứa các phần khác nhau của cùng một đối tượng có thể được lắp ráptrong Scene Unity và được sử dụng để làm các hoạt ảnh động cho nó.

SpriteRenderer: Mỗi Sprite cần một đối tượng SpriteRenderer để có thể kếtxuất nó trong một Scene SpriteRenderer cũng cung cấp một API đặc biệt để kiểmsoát Sprite, cho phép thay đổi màu sắc của nó và chia nó thành nhiều phần

Canvas: Nó là một đối tượng đại diện cho khu vực trong đó tất cả các phần

tử giao diện người dùng được đặt trong nó, chẳng hạn như menu trò chơi hoặcthông tin liên quan cho người chơi

LineRenderer: Nó được sử dụng để tạo và vẽ một đường nối giữa hai hoặcnhiều điểm trong không gian 2D hoặc 3D

Tag and Name: Để xác định GameObject trong tập lệnh, mỗi đối tượng cómột Tag and Name

PlayerPrefs: Đây là một lớp tĩnh vừa lưu trữ vừa truy cập các tùy chọn củangười chơi và dữ liệu giữa các phiên trò chơi Giá trị của chúng có thể được lưu vàomột trong ba loại: int, float và string Trong mã, chúng được truy xuất bằng cách sửdụng dictionaries

Trang 19

2.2 Aseprite

Hình 2.4 Logo AsepriteAseprite là một phần mềm đồ họa chuyên nghiệp được sử dụng để tạo vàchỉnh sửa đồ họa Pixel Art Được phát triển bởi David Capello, Aseprite cung cấpmột loạt các công cụ và tính năng được thiết kế đặc biệt để làm việc với hình ảnhpixel

Với Aseprite, bạn có thể tạo ra các hình ảnh pixel độc đáo và tạo ra hiệu ứngchuyển động cho game, hoạt hình và nhiều dự án sáng tạo khác Giao diện sử dụngđơn giản và trực quan của phần mềm này giúp bạn dễ dàng điều khiển các công cụ

và tạo ra nội dung pixel tuyệt đẹp

Một số tính năng chính của Aseprite bao gồm:

● Công cụ vẽ: Bạn có thể vẽ, tô màu và chỉnh sửa các hình ảnh pixeltheo ý muốn

● Công cụ animation: Aseprite hỗ trợ tạo và chỉnh sửa các khung hình

để tạo hiệu ứng chuyển động mượt mà

● Lớp và mask: Bạn có thể sử dụng các lớp và mask để tạo ra các hiệuứng phức tạp và dễ dàng chỉnh sửa các thành phần riêng lẻ của hìnhảnh

Trang 20

● Palette và dithering: Aseprite cung cấp các công cụ để làm việc vớibảng màu và áp dụng kỹ thuật dithering để tạo ra hiệu ứng gradient vàsắc nét.

● Export và import: Bạn có thể xuất và nhập các hình ảnh và animationvào nhiều định dạng file khác nhau, bao gồm GIF, PNG, và các địnhdạng hỗ trợ cho game và ứng dụng di động

● Aseprite đã trở thành công cụ phổ biến trong cộng đồng Pixel Art vàgame phát triển viên Nó cung cấp một nền tảng mạnh mẽ và linh hoạt

để tạo ra nội dung pixel đẹp mắt và chuyển động sống động

2.3 C#

Hình 2.5 Hình 2.5 C# LogoC# (hay C sharp) là một ngôn ngữ lập trình đơn giản, được phát triển bởi độingũ kỹ sư của Microsoft vào năm 2000 C# là ngôn ngữ lập trình hiện đại, hướngđối tượng và được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ vàJava

Trong các ứng dụng Windows truyền thống, mã nguồn chương trình đượcbiên dịch trực tiếp thành mã thực thi của hệ điều hành

Trong các ứng dụng sử dụng NET Framework, mã nguồn chương trình (C#,VB.NET) được biên dịch thành mã ngôn ngữ trung gian MSIL (Microsoft

Trang 21

intermediate language) Sau đó mã này được biên dịch bởi Common LanguageRuntime (CLR) để trở thành mã thực thi của hệ điều hành

C# với sự hỗ trợ mạnh mẽ của NET Framework giúp cho việc tạo một ứngdụng Windows Forms hay WPF (Windows Presentation Foundation), phát triểngame, ứng dụng Web, ứng dụng Mobile trở nên rất dễ dàng

2.4 Microsoft Visual Studio

Hình 2.6 Microsoft Visual Studio LogoMicrosoft Visual Studio là một môi trường phát triển tích hợp (IDE) từMicrosoft Microsoft Visual Studio còn được gọi là "Trình soạn thảo mã nhiềungười sử dụng nhất thế giới ", được dùng để lập trình C++ và C# là chính Nó được

sử dụng để phát triển chương trình máy tính cho Microsoft Windows, cũng như cáctrang web, các ứng dụng web và các dịch vụ web Visual Studio sử dụng nền tảngphát triển phần mềm của Microsoft như Windows API, Windows Forms, WindowsPresentation Foundation, Windows Store và Microsoft Silverlight Nó có thể sảnxuất cả hai ngôn ngữ máy và mã số quản lý

Visual Studio hỗ trợ nhiều ngôn ngữ lập trình khác nhau và cho phép trìnhbiên tập mã và gỡ lỗi để hỗ trợ (mức độ khác nhau) hầu như mọi ngôn ngữ lập trình.Các ngôn ngữ tích hợp gồm có C,[4] C++ và C++/CLI (thông qua Visual C++),

Trang 22

VB.NET (thông qua Visual Basic.NET), C# (thông qua Visual C#) và F# (như củaVisual Studio 2010[5]) Hỗ trợ cho các ngôn ngữ khác như J++/J#, Python và Rubythông qua dịch vụ cài đặt riêng rẽ Nó cũng hỗ trợ XML/XSLT, HTML/XHTML,JavaScript và CSS.

Microsoft cung cấp phiên bản "Express" (đối với phiên bản Visual Studio

2013 trở về trước) và "Community" (đối với bản Visual Studio 2015 trở về sau) làphiên bản miễn phí của Visual Studio

Trang 23

Chương 3 THIẾT KẾ VÀ PHÁT TRIỂN

3.1 Tổng quan

3.1.1 Tên game

Space Invader UT2

3.1.2 Thể loại

Shoot 'Em Up, còn được gọi là shmup, là một thể loại trò chơi điện tử trong

đó nhân vật do người chơi điều khiển tham gia vào trận chiến chống lại kẻ địch,đồng thời phải tránh tất cả các cuộc tấn công sẽ sắp diễn ra có thể bao gồm các loạiđường đạn của kẻ địch, chướng ngại vật trên bản đồ và bản thân kẻ địch

Hình 3.1 Spacewar! Trên hệ máy PDP-1Nguồn gốc của thể loại bắn súng có thể bắt nguồn từ một trong những tròchơi máy tính sớm nhất từng được tạo ra, Spacewar! (xem Hình 3.1) Được pháttriển trên máy tính phòng thí nghiệm tại Khuôn viên của Viện Công nghệMassachusetts (MIT) vào năm 1961, trò chơi đang chạy trên máy tính PDP-1 của

Trang 24

DEC Nó bao gồm hai người chơi điều khiển phi thuyền vũ trụ và cố gắng tiêu diệtmột chiếc khác bằng cách bắn đạn và để tránh bị hút bởi trường hấp dẫn của mặttrời.

3.2 Gameplay

3.2.1 Mục tiêu

Tiêu diệt toàn bộ kẻ địch xuất hiện trên màn hình bằng cách điều khiển phithuyền (trượt màn hình), có thể kích hoạt các kỹ năng có sẵn (không trong thời gianhồi chiêu)

● LoadStartUp: khởi động màn dạo đầu khi vào Level

● CheckOnLoseLevel: kiểm tra trạng thái khi người chơi thua

● CheckOnWinLevel: kiểm tra trạng thái khi người chơi thắng

● LevelWin: thực hiện luồng khi người chơi thắng

● LevelLose: thực hiện luồng khi người chơi thua

Hầu hết các tập lệnh đều cần GameController cho các chức năng khác nhau

Vì vì lý do đó, GameController phải là một đối tượng Singleton và được khởi tạovào thời điểm bắt đầu Level và tồn tại xuyên xuống quá trình người chơi hànhđộng

Trang 25

3.3.2 Background

Background là một đối tượng đóng vai trò là nơi chứa phần nền, nó đượcthiết kế để luôn hiển thị hoạt ảnh di chuyển xuống với tốc độ xác định và lặp lại liêntục từ nó giúp tạo hiệu trông như ShipPlayer đang di chuyển

Trò chơi được thực hiện theo cách mà Camera luôn đứng yên và mọi thứđang thực sự chuyển động là hậu cảnh

Hình 3.2 Code di chuyển cho background

3.3.3 Base Class

Tất cả các lớp trong Script đều được kế thừa từ một lớp chung có tên làGameMonoBehaviour nhằm hạn chế lặp lại code, lớp này có tác dụng tạo một đốitượng kế thừa hàm LoadComponent, hàm này được gọi trong Awake và Reset để tảicác Component tương ứng của GameObject vào các có trong lớp được kế thừa

Trang 27

Hình 3.3 Lớp cơ sở GameMonoBehaviour

3.3.4 Ship

Hình 3.4 Ảnh Ship_1Đối tượng Ship (xem Hình 3.4), là đối tượng được điều khiển bởi ngườichơi Có thể thực hiện các hành động như là bắn đạn và laser, di chuyển vào trongkhông gian camera, nhặt các vật phẩm, sử dụng kỹ năng, chịu sát thương Nó là mộtGameObject được xây dựng từ nhiều GameObject khác nhau, mỗi GameObject sẽ

có một hoặc nhiều Component Script để xử lý tương ứng

● Model: dùng để hiển thị hình ảnh của Ship và các hiệu ứng di chuyểncũng như hiệu ứng bắn đạn

● Movement: Quản lý điều khiển di chuyển của đối tượng Ship

● Shooting: Quản lý việc tấn của Ship Mỗi Ship sẽ có loại đạn tươngứng

● Level: Quản lý cấp độ của Ship, đây là cấp độ của Ship trong mànchơi, cấp càng cao thì hỏa lực của Ship càng mạnh, nhiều đường đạnhơn

● Looter: Quản lý việc nhặt vật phẩm khi Ship chạm vào vật phẩm trênmàn hình

Trang 28

● DamageReceiver: Quản lý việc nhận sát thương Tính toán để trừ máucủa phi thuyền khi trúng đạn hoặc chạm phải kẻ địch.

● Ability: Quản lý kỹ năng của Ship Ship sẽ có hai kỹ năng là Shield vàPowerUp

Tất cả các Component Script của các GameObject trên được quản lý bởiShipController, đây là lớp phụ trách chứa các liên kết để làm trung gian cho cácComponent Script của Ship, khi một Component Script tương tác với ComponentScript khác thì phải thông qua ShipController

Hình 3.5 Cấu trúc của ShipController

Trang 29

Hình 3.6 Cấu trúc chung của GameObject Ship

3.3.5 Ability

Lớp Ability là lớp cơ sở đại diện cho kỹ kỹ năng mà đối tượng nào mang nó

có thể thực hiện, đại diện ở đây là ShipPlayer, quản lý việc kích hoạt khả năng củaShipPlayer bao gồm AbilityController, mỗi Ability sẽ có hiệu ứng và trạng tháikhác nhau, thông tin của Ability đều được lưu trữ trong thư mục Resource

Hình 3.7 Cấu trúc của AbilityCác ShipPlayer được xây dựng bao gồm:

● HealAbility: Kích hoạt qua việc nhặt vật phẩm, hiệu ứng sẽ hồi máungười chơi

Trang 30

● ShieldAbility: Kích hoạt qua kỹ năng và nhặt vật phẩm, hiệu ứng tạokhiên triệt tiêu đạn của Enemy

● PowerUpAbility: Kích hoạt qua kỹ năng, hiệu ứng tăng một lượng lớntốc độ bắn của ShipPlayer

● Missile: Kích hoạt qua việc nhặt vật phẩm, hiệu ứng bắn một loạt lênlửa theo dõi Enemy

3.3.6 Spawner

Đối tượng Spawner chứa Component Script Spawner là một Base Class dùng

để quản lý việc khởi tạo các đối tượng nhiều và liên tục trên Scene

Spawner là một lớp áp dụng mẫu thiết kế theo kiểu Holder và Object Pool.Object Pool được sử dụng để quản lý bộ nhớ đệm lưu trữ các đối tượng Object poolthông thường hoạt động theo kiểu : tự tạo đối tượng mới nếu mình chưa có sẵn hoặc

sử dụng đối tượng có sẵn trong pool

Dùng 3 attribute là Prefabs, Pool Object và Holder

● Prefabs: chứa các đối tượng mà sẽ được khởi tạo trong tương lai

● Pool Objects: chứa các đối tượng bị hủy

● Holder: Quản lý các đối tượng được khởi tạo và chưa bị hủy

Hình 3.8 Cấu trúc Component Script của một Spawner

Trang 31

Các lớp kế từ lớp Spawner này bao gồm:

● BulletSpawner: Quản lý việc khởi tạo Bullet

● ItemDropSpawner: Quản lý việc khởi tạo Item

● EnemySpawner: Quản lý việc khởi tạo Enemy

● FXSpawner: Quản lý việc khởi tạo FX (hiệu ứng va chạm, hiệu ứngnổ, )

● EnemyFormationSpawner: Quản lý việc khởi tạo EnemyFormation,đội hình Enemy

Trang 32

Hình 3.9 Lớp Abstract DespawnCác lớp kế thừa của lớp này bao gồm lớp DespawnByDistance vàDespawnByTime:

● DespawnByDistance: Quản lý việc hủy đối tượng theo khoảng cách từđối tượng này tới đối tượng mục tiêu được chọn

Trang 33

Hình 3.10 Hàm CanDespawn được triển khai trong lớp DespawnByDistance

● DespawnByTime: Quản lý việc hủy đối tượng theo thời gian

Hình 3.11 Hàm CanDespawn được triển khai trong lớp DespawnByTime

Trang 34

3.3.8 Bullet

Hình 3.12 Bullet ShurikenĐối tượng Bullet (xem Hình 3.12), là đối tượng được tạo ra bởi đối tượngBulletSpawner Là nguồn gây sát thương chính của ShipPlayer cũng như Enemy

Nó là một GameObject được xây dựng từ nhiều GameObject khác nhau, mỗiGameObject sẽ có một hoặc nhiều Component Script để xử lý tương ứng

● Model: dùng để hiển thị hình ảnh của Bullet và các hiệu ứng dichuyển

● BulletFly: Quản lý điều khiển hướng di chuyển của Bullet

● Despawn: Quản lý việc hủy của Bullet

● DamageSender: Quản lý việc gây sát thương của Bullet

● BulletImpact: Quản lý việc xác định va chạm và truyền sát thương củaBullet sang cho đối tượng có chứa Component DamageReceiver.Tất cả các Component Script của các GameObject trên được quản lý bởiBulletController, đây là lớp phụ trách chứa các liên kết để làm trung gian cho cácComponent Script của Bullet, khi một Component Script tương tác với ComponentScript khác thì phải thông qua BulletController

Trang 35

Hình 3.13 Cấu trúc của lớp BullerController

Hình 3.14 Cấu trúc của GameObject BulletMột số các loại đạn đặt biệt sẽ có được thêm các GameObject với cácComponent Script tương ứng, bao gồm:

● BulletBouncy: Kế thừa từ class Bounceable Loại đạn này sẽ bị phản

xạ theo một góc bằng với góc tới khi va chạm vào hai bên màn hình

● BulletMissile: Loại đạn này sẽ tự động xác định Enemy và truy đuổi

● BulletDisperse: Loại đạn này sẽ tự động đột ngột chuyển hướng khi

di chuyển một khoảng thời gian

● BulletSeparate: Loại đạn này sẽ tự động tách ra theo số lượng tùychọn khi di chuyển một khoảng thời gian

Ngày đăng: 04/09/2023, 20:42

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Aseprite: https://www.aseprite.org/ Link
[3] Visual Studio: https://visualstudio.microsoft.com/Tài liệu hướng dẫn ngôn ngữ lập trình Link
[4] C# Doc: https://learn.microsoft.com/en-us/dotnet/csharp/ Link
[5] UnityDoc: https://docs.unity3d.com/Manual/index.htmlTài liệu và code mẫu tham khảo trong quá trình xây dựng hệ thống và logic trò chơi Link
[6] UnityForum: https://forum.unity.com/ Link
[7] SaiChannel: https://www.youtube.com/@SaiGame/featured[8]stackoverflow:https://stackoverflow.com/ Link

HÌNH ẢNH LIÊN QUAN

Hình 1.1 Một số game shoot ’em up phổ biến - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 1.1 Một số game shoot ’em up phổ biến (Trang 11)
Hình 2.1 Unity game engine - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 2.1 Unity game engine (Trang 14)
Hình 2.2 Giao diện unity - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 2.2 Giao diện unity (Trang 15)
Hình 2.3 Sự khác biệt giữa phép chiếu perspective và phép chiếu orthographic - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 2.3 Sự khác biệt giữa phép chiếu perspective và phép chiếu orthographic (Trang 17)
Hình 2.6 Microsoft Visual Studio Logo - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 2.6 Microsoft Visual Studio Logo (Trang 21)
Hình 3.1 Spacewar! Trên hệ máy PDP-1 - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.1 Spacewar! Trên hệ máy PDP-1 (Trang 23)
Hình 3.2 Code di chuyển cho background - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.2 Code di chuyển cho background (Trang 25)
Hình 3.5 Cấu trúc của ShipController - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.5 Cấu trúc của ShipController (Trang 28)
Hình 3.7 Cấu trúc của Ability Các ShipPlayer được xây dựng bao gồm: - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.7 Cấu trúc của Ability Các ShipPlayer được xây dựng bao gồm: (Trang 29)
Hình 3.8 Cấu trúc Component Script của một Spawner - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.8 Cấu trúc Component Script của một Spawner (Trang 30)
Hình 3.9 Lớp Abstract Despawn - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.9 Lớp Abstract Despawn (Trang 32)
Hình 3.11 Hàm CanDespawn được triển khai trong lớp DespawnByTime - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.11 Hàm CanDespawn được triển khai trong lớp DespawnByTime (Trang 33)
Hình 3.14 Cấu trúc của GameObject Bullet - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.14 Cấu trúc của GameObject Bullet (Trang 35)
Hình 3.15 Laser - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.15 Laser (Trang 36)
Hình 3.20 Boss Battlecruiser - Xây dựng game 2d bắn phi thuyền vũ trụ với unity
Hình 3.20 Boss Battlecruiser (Trang 39)

🧩 Sản phẩm bạn có thể quan tâm

w