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

Tiểu luận lập trình game 2D unity 9.5đ

46 6 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Cấu trúc

  • CHƯƠNG I. GIỚI THIỆU (11)
    • 1.1. Lý do chọn đề tài (11)
    • 1.2. Mục tiêu đề tài (11)
    • 1.3. Phương pháp nghiên cứu (11)
    • 1.4. Bố cục đề tài (11)
  • CHƯƠNG II. CƠ SỞ LÝ THUYẾT (12)
    • 2.1. Tổng quan về Game Engine (12)
    • 2.2. Tổng quan về Unity Engine (12)
      • 2.2.1. Giới thiệu Unity Engine (12)
      • 2.2.2. Các thành phần cơ bản trong Unity (13)
    • 2.3. Tổng quan về công cụ thiết kế hình ảnh game 2D Aseprite (14)
      • 2.3.1. Giới thiệu về Aseprite (14)
      • 2.3.2. Vì sao chọn Aseprite (14)
  • CHƯƠNG III. PHÂN TÍCH VÀ XÂY DỰNG SẢN PHẨM GAME (15)
    • 3.1. Tổng quan trò chơi (15)
      • 3.1.1. Giới thiệu trò chơi (15)
      • 3.1.2. Cốt truyện (15)
      • 3.1.3. Gameplay (15)
      • 3.1.4. Cơ chế của trò chơi (16)
      • 3.1.5. Điều khiển (17)
      • 3.1.6. Thế giới game (17)
      • 3.1.7. Nhân vật và kẻ địch (17)
      • 3.1.8. UI (18)
    • 3.2. Phân tích hệ thống game (19)
      • 3.2.1. Các tác nhân của hệ thống (19)
      • 3.2.2. Chức năng hệ thống (19)
      • 3.2.3. Biểu đồ use-case (20)
      • 3.2.4. Biểu đồ lớp (Class Diagram) (20)
      • 3.2.5. Biểu đồ hoạt động (Activity Diagram) (21)
      • 3.2.6. Biểu đồ trạng thái (State Diagram) (23)
    • 3.3. Xây dựng các phần thành của Game (24)
      • 3.3.1. Xây dựng nhân vật chính của Game (24)
      • 3.3.2. Xây dựng các kẻ địch trong game (25)
      • 3.3.3. Xây dựng màn chơi InsideHouse của Game (27)
      • 3.3.4. Xây dựng màn chơi TheJungle của Game (28)
      • 3.3.5. Xây dựng màn chơi BossMap của Game (29)
    • 3.4. Xây dựng giao diện sản phẩm Game (31)
      • 3.4.1. Xây dựng chức năng di chuyển của người chơi (31)
      • 3.4.2. Xây dựng chức năng điều khiển nhân vật tấn công (33)
      • 3.4.3. Xây dựng chức năng spawn kẻ địch (36)
      • 3.4.4. Xây dựng chức năng tấn công của kẻ địch (39)
      • 3.4.5. Hình ảnh túi đồ của người chơi (Inventory) (42)
      • 3.4.6. Hình ảnh các loại vật phẩm (42)
      • 3.4.7. Màn hình bắt đầu game (42)
      • 3.4.8. Màn hình kết thúc game (43)
  • CHƯƠNG IV. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (44)
    • 4.1. Kết luận (44)
    • 4.2. Hướng phát triển (44)
  • TÀI LIỆU THAM KHẢO (46)

Nội dung

Trong thế giới đầy sắc màu của lập trình game, Unity không chỉ là một công cụ; nó là một cánh cửa mở ra vô số khả năng sáng tạo. Khi nói đến việc phát triển game 2D, Unity trở thành người bạn đồng hành không thể thiếu, cung cấp một nền tảng mạnh mẽ để biến những ý tưởng tưởng chừng như không thể thành hiện thực. Tiểu luận này không chỉ là một hành trình qua các dòng mã, mà còn là một cuộc phiêu lưu qua các quy trình sáng tạo, từ việc hình thành ý tưởng ban đầu cho đến khi sản phẩm cuối cùng được hoàn thiện. Chúng ta sẽ khám phá cách Unity giúp chúng ta tạo ra các thế giới 2D sống động, những nhân vật đáng yêu, và những trải nghiệm game đầy thú vị. Với mục tiêu không chỉ giới thiệu về Unity như một công cụ lập trình, tiểu luận này còn mong muốn truyền cảm hứng cho những người đam mê lập trình game, những người sẵn sàng đặt bút xuống và bắt đầu hành trình sáng tạo của riêng mình. Hãy cùng nhau bắt đầu cuộc hành trình này, và xem nó sẽ đưa chúng ta đến đâu. Mặc dù chúng em đã cố gắng hoàn thành tiểu luận trong phạm vi và khả năng cho phép, nhưng chắc chắn sẽ không tránh khỏi những thiếu sót, kính mong sự cảm thông và nhận được phản hồi của quý thầy cô và các bạn.

GIỚI THIỆU

Lý do chọn đề tài

Nắm bắt được xu hướng phát triển tiềm năng của lập trình game cùng với niềm đam mê về game, nhóm em quyết định chọn đề tài “Thiết kế và lập trình game2D The Jungle: DarkLand sử dụng Aseprite và Unity” nhằm giúp chúng em tìm hiểu kỹ hơn về lập trình game nói chung.

Mục tiêu đề tài

Hệ thống game “The Jungle: DarkLand” sẽ là một tựa game 2D, RPG hành động theo góc nhìn top-down phát triển bởi Unity.

Yêu cầu đối với sản phẩm:

 Dung lượng game không quá lớn, tốc độ xử lý nhanh.

 Giao diện thân thiện người dùng.

 Tính toán dữ liệu game phải chính xác, không chấp nhận sai sót.

Phương pháp nghiên cứu

 Xây dựng hệ thống game theo mục tiêu đã đặt ra.

 Phân tích, thiết kế hệ thống sao cho phù hợp.

Bố cục đề tài

Phần còn lại của báo cáo Tiểu luận này được tổ chức như sau:

Chương 2 trình bày về cơ sở lý thuyết các công cụ để làm nên đề tài này.

Trong chương 3, chúng em sẽ trình những phân tích chi tiết để hoàn thiện đề tài này Phân tích những thành phần của game, gameplay, cơ chế game,… các chức năng chính của game Từ đó giúp cho việc phát triển và hoàn thiện đề tài sẽ không bị lệch hướng và dễ dàng hơn.

Chương 4 trình bày về sản phẩm cuối cùng của đề tài này, bên cạnh đó là vạch ra lộ trình phát triển tiếp theo để sản phẩm trở nên hoàn thiện hơn.

CƠ SỞ LÝ THUYẾT

Tổng quan về Game Engine

Game engine hay còn được gọi là Phần mềm game, là một phần mềm dùng để xây dựng và thiết kế một trò chơi điện tử (video game) Hình dung một cách đơn giản, game engine cung cấp cho các nhà làm game những nguyên liệu cơ bản để từ đó họ sẽ dễ dàng hơn trong việc phát triển game của mình

Một game engine thông thường bao gồm kết xuất đồ họa cho các hình ảnh2D hay 3D, công cụ vật lý, hoạt hình, trí tuệ nhân tạo cho những nhân vật trò chơi,phân luồng, tạo dòng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị, Từ 1 game engine có thể phát triển ra rất nhiều các game khác nhau Đây là giải pháp tiết kiệm nhiều thời gian và chi phí cho các nhà sản xuất.

Tổng quan về Unity Engine

Unity Engine là một game engine được phát triển bởi Unity Technologies. Đây là một công cụ phát triển game đa nền tảng Ra mắt lần đầu năm 2005 tại sự kiện Apple’s Worldwide Developer Conference bởi nhà sáng lập David Helgason, cho đến nay, Unity đã hoàn thiện hơn rất nhiều về nhiều mặt Năm 2014 Unity thắng giải “Best Engine” tại giải UK’s annual Develop Industry Exellence. Điểm mạnh của Unity:

 Hỗ trợ đa nền tảng: Unity có khả năng phát triển game trên nhiều hệ điều hành và thiết bị khác nhau.

 Dễ sử dụng: Unity cung cấp môi trường phát triển tích hợp, hỗ trợ cả lập trình viên không chuyên và studio chuyên nghiệp.

 Chức năng cốt lỗi đa dạng: Unity cung cấp công cụ cho đồ họa 2D và 3D, vật lý, âm thanh, trí tuệ nhân tạo, quản lí bộ nhớ và kết nối mạng.

2.2.2 Các thành phần cơ bản trong Unity

Asset: là tất cả những tài nguyên được sử dụng trong quá trình phát triển game, những tài nguyên bao gồm hình ảnh, âm thanh, mô hình 3D, hiệu ứng, chất liệu (material), script hay cả một project.

Scene: là khoản không gian làm việc của game developer nơi mà có thể sắp xếp và quản lí tất cả các đối tượng trong game Mỗi một scene có thể được xem là một cấp độ chơi hoặc một màn chơi riêng biệt.

Game Object: khi kéo một phần tử từ trong Asset vào trong Scene, chúng sẽ được xem là một Game Object Tất cả các Game Object đều có chứa ít nhất là Transform, lưu thông tin về vị trí, góc quay và tỉ lệ của Game Object.

Thành phần (Component) là những khối xây dựng cơ bản trong Unity, mỗi khối có chức năng cụ thể Chúng cho phép chúng ta tạo các Đối tượng trò chơi (Game Object) bằng cách thêm và kết hợp các thành phần này theo ý muốn Ví dụ: thành phần Biến đổi (Transform) điều khiển vị trí, xoay và tỷ lệ của đối tượng, trong khi thành phần Vật lý (Physics) xử lý các tương tác vật lý như va chạm.

Script: là một loại Component đặc biệt do lập trình viên tự định nghĩa nên.

Chức năng chính của Script là miêu tả những thứ mà người lập trình viên muốn cho Unity hiểu Cho phép lập trình viên tạo ra hành động và tủy chỉnh cho các đối tượng trong game.

Prefab: là một Game Object được lưu trữ lại để tái sử dụng Các Object được tạo ra từ Prefab sẽ giống hoàn toàn với bản gốc.

Tổng quan về công cụ thiết kế hình ảnh game 2D Aseprite

Aseprite là một phần mềm chuyên dụng được thiết kế để tạo và chỉnh sửa pixel art Được phát triển bởi David Capello, Aseprite nổi tiếng với giao diện người dùng thân thiện và các tính năng tối ưu cho việc tạo ra nghệ thuật pixel độc đáo và chất lượng.

Với giao diện người dùng đơn giản và trực quan, Aseprite là một công cụ lý tưởng cho các nghệ sĩ pixel art và nhà phát triển game Tính năng đa nền tảng của nó cũng đảm bảo rằng người dùng có thể sử dụng phần mềm trên nhiều hệ điều hành khác nhau

 Aseprite có giao diện thiết kế đồ họa thân thiện và dễ sử dụng.

 Cung cấp cho người thiết kế một bảng màu phong phú.

 Aseprite có một trình quản lý các layer dễ sử dụng để quản lý các đối tượng và tạo animation cho hình ảnh.

 Là một công cụ mãnh mẽ và linh hoạt với nhiều tính năng, công cụ hỗ trợ giúp tạo ra một bức ảnh pixel art độc đáo và ấn tượng.

PHÂN TÍCH VÀ XÂY DỰNG SẢN PHẨM GAME

Tổng quan trò chơi

 Game Identity / Mantra: “The Jungle: DarkLand” là tựa game phiêu lưu hành động 2D top-down nói về một con dơi đột biến truy tìm và tiêu diệt kẻ đang tàn phá khu rừng

 Design Pillars: Hành động, phiêu lưu, nhập vai

 Art style: “The Jungle: DarkLand” sẽ mang phong cách đồ họa pixel tối giản hóa, hình ảnh đơn giản nhưng chất lượng Game sẽ mang tông màu hơi nhạt nhòa, đem lại cho người chơi ấn tượng về một khu rừng cổ xưa không còn nhiều sức sống.

Không khí trò chơi nhẹ nhàng không quá u ám.

Khởi đầu trong một khu rừng đầy sức sống, mọi chuyện khủng khiếp bắt đầu khi dòng suối bị nhiễm chất thải phóng xạ Từ đây các sinh vật trong khu rừng bắt đầu biến đổi và trở nên hung tợn hơn, chúng tấn công lẫn nhau, tàn phá khu rừng.

Trong số đó, một con quái vật đã đột biến và trở thành thủ lĩnh của phần còn lại Nhân vật chính là chú dơi xanh là một ngoại lệ, đã đột biến và có ý thức như con người Nhận thấy được sự tàn phá khủng khiếp của tên trùm, dơi xanh đã quyết định truy tìm và tiêu diệt hắn để bảo vệ những sinh vật chưa bị đột biến cũng như đi tìm nguyên nhân khu rừng bị biến đổi.

 Quy tắc: Người chơi điều khiển chú dơi đột biến, đánh nhau với quái vật, thu thập chìa khóa mở đến màn chơi cuối cùng Nếu bị kẻ định đánh trúng người chơi sẽ mất máu, đến khi hết máu người chơi sẽ chết và hồi sinh lại tại nhà chính.

 Mục tiêu: Thu thập 6 chìa khóa sau đó tiêu diệt Boss cuối.

 Trải nghiệm người chơi: đồ họa, màu sắc, những màn combat tạo nên một trải nghiệm thú vị và hấp dẫn.

3.1.4 Cơ chế của trò chơi Hệ thống di chuyển:

 Ngưới chơi di chuyển theo 4 hướng cơ bản: trên, dưới, trái, phải.

 Ngoài ra có thể di chuyển theo hướng xéo: trên trái, trên phải, dưới trái, dưới phải.

 Người chơi có 1 kĩ năng lướt nhanh.

 Nhân vật chính sẽ có map nhà riêng để trồng cây giúp hồi máu.

 Cây sẽ gồm 2 loại: lúa và cà chua.

 Nhà của nhân vật chính chỉ có 4 vùng để trồng cây.

 Nhân vật chính có thể tấn công cận chiến và bắn xa.

 Mỗi đòn cận chiến trúng địch sẽ hồi 1 năng lượng cho bắn xa.

 Tối đa 4 năng lượng bắn xa.

 Sẽ có 6 chìa khóa được giấu trong map.

 Người chơi sẽ đi tìm gợi ý về chỗ giấu chìa khóa.

 Thu thập đủ 6 chìa khóa sẽ mở được cánh cổng cho màn đánh Boss cuối cùng.

Hệ thống chuyển cảnh màn hình:

 Sẽ có 3 bản đồ chính: nhà của người chơi, khu vực rừng rậm, khu vực đánh Boss.

 Khi di chuyển qua mỗi bản đồ thì sẽ chuyển màn hình.

Hệ thống túi đồ của nhân vật:

 Túi đồ sẽ chứa tối đa 10 ô chứa.

 Mỗi ô chứa có thể chứa được tối đa 4 vật phẩm.

 Khi hết ô chứa sẽ không thể nhặt thêm vật phẩm.

 Các phím “W”, “A”, “S”, “D”: điều khiển di chuyển của nhân vật.

 Phím “Space”: thực hiện hành động né tránh.

 Chuột trái: tấn công cận chiến.

 Chuột phải: tấn công tầm xa.

 Phím “Tab”: mở túi đồ (inventory).

Người chơi sẽ khám phá một thế giới có phần nhạt nhòa nhưng không quá u ám.

Nhà của người chơi là nơi hồi sinh nếu nhân vật tử trận, không có kẻ thù và có các mảnh đất để người chơi có thể trồng cây.

 Khu vực giấu chìa khóa: khu vực này là một khu rừng giấu 6 chìa khóa tại những vị trí cố định, nơi đây sẽ xuất hiện những kẻ địch để gây tính thách thức cho người chơi vượt qua để đi tìm chìa khóa.

 Khu vực đánh Boss: đây là khu vực cuối cùng của game, khi người chơi tìm đủ 6 chìa khóa thì mới được đi đến khu vực này Tại đây người chơi sẽ đánh nhau với một con Boss và nếu thắng thì sẽ kết thúc game.

3.1.7 Nhân vật và kẻ địch

 Người chơi (nhân vật chính của game) có thể thực hiện các hành động sau:

Tấn công cận chiến, tấn công tầm xa, lướt để tránh đòn tấn công, di chuyển 4 hướng trên bản đồ Người chơi có 10 máu, khi bị tấn công sẽ mất 1 máu, khi hết máu sẽ cho người chơi spawn lại vị trí ban đầu và mất hết vật phẩm.

 Kẻ địch (quái vật) gồm 2 loại quái vật:

 Goblin: quái vật tấn công tầm gần, khi phát hiện người chơi ở một khoảng cách gần Goblin sẽ di chuyển lại và tấn công người chơi.

 Eagle: quái vật tấn công tầm xa, khi phát hiện người chơi ở khoảng cách xa Eagle sẽ bắn đạn về phía người chơi.

 Quái vật trùm cuối (Boss) gồm 1 kĩ năng đặc biệt: Kĩ năng kĩ năng bắn đạn với sát thương cực lớn, Boss sẽ rất mạnh khiến cho người chơi phải tấn công nhiều lần kết hợp né tránh mới có thể chiến thắng.

3.1.8 UI Màn hình bắt đầu game sẽ gồm các UI sau:

 Tên game: “The Jungle: DarkLand”.

 Nút chơi mới: khi bấm vào sẽ reset trò chơi và bắt đầu một màn chơi mới.

 Nút thoát game: khi bấm vào sẽ thoát trò chơi.

Màn hình chính của game gồm các UI sau:

 Thanh máu của người chơi nằm ở góc trái trên của màn hình: 10 stack đại diện cho số lần có thể bị tấn công của người chơi.

 Thanh năng lượng của người chơi nằm ở phía dưới thanh máu: 4 stack đại diện cho 4 lần bắn xa.

 Nút túi đồ của người chơi khi hiện lên sẽ nằm ở chính giữa màn hình.

 Khi người chơi bị tấn công chết thì sẽ hiển thị “YOU ARE DEAD”, Button

Phân tích hệ thống game

Bảng 3.1 Các tác nhân của hệ thống

STT Tác nhân Ý nghĩa, nhiệm vụ của Actor

1 Truy cập vào game, thực hiện các chức năng trong game như: điều khiển nhân vật, nhặt vật phẩm,…

Bảng 3.2 Các chức năng chính của game

STT Tên chức năng Mô tả

1 Điều khiển nhân vật di chuyển

Khi người chơi nhấn vào các nút “A W S D” hoặc các nút mũi tên hệ thống sẽ xác nhận input, sau đó sẽ thực hiện thay đổi tọa độ nhân vật chính.

2 Điều khiển nhân vật tấn công

Khi người chơi nhấn vào nút trái chuột, hệ thống sẽ nhận input và thực hiện hành động tấn công của nhân vật.

3 Spawn kẻ địch Khi người chơi nhấn nút bắt đầu game, hệ thống sẽ chuyển sang màn hình chính của game, sau đó sẽ spawn quái tại cái vị trí đã được đặt trước.

Kẻ địch trong game sẽ tự động phát hiện người chơi Sau đó, dựa vào vị trí của mình, chúng sẽ tính toán hướng di chuyển tối ưu để tiếp cận người chơi Cuối cùng, kẻ địch sẽ thực hiện đòn tấn công sau một khoảng thời gian được xác định trước.

5 Túi đồ của người chơi

Người chơi sẽ có hệ thống túi đồ để nhặt vật phẩm cần thiết trong trò chơi, khi túi đầy sẽ không thể thêm vật phẩm nữa.

Hình 3.1 Biểu đồ Use-case

3.2.4 Biểu đồ lớp (Class Diagram)

3.2.5 Biểu đồ hoạt động (Activity Diagram)

Chức năng Điều khiển nhân vật di chuyển:

Hình 3.3 Activity diagram – Điều khiển nhân vật di chuyển

Chức năng Điều khiển nhân vật tấn công:

Hình 3.4 Activity diagram – Điều khiển nhân vật tấn công

Chức năng Spawn kẻ địch khi bắt đầu game:

Hình 3.5 Activity diagram – Spawn kẻ địch khi bắt đầu game

Chức năng nhặt vật phẩm khi người chơi chạm vào:

Hình 3.6 Activity diagram – Nhặt vật phẩm khi người chơi chạm vào

3.2.6 Biểu đồ trạng thái (State Diagram)

Chức năng điều khiển nhân vật di chuyển:

Hình 3.7 State diagram – Điều khiển nhân vật di chuyển

Chức năng điều khiển nhân vật tấn công:

Hình 3.8 State diagram – Điều khiển nhân vật tấn công

Chức năng Spawn kẻ địch:

Hình 3.9 State diagram – Spawn kẻ địch

Xây dựng các phần thành của Game

Nhân vật chính sẽ do người chơi điều khiển và có thể thực hiện các hành động như di chuyển, tấn công Nhân vật chính được tổ chức theo các lớp giúp dễ dàng quản lí các chức năng với nhau.

Hình 3.10 Hình ảnh nhân vật chính của game

Mỗi Object trong game sẽ chứa nhiều Object con tương ứng với các chức năng mà Object cha có Object cha sẽ chứa một class Controller để giữ liên kết đến các class trong Object con Các Object hoặc Class khác muốn truy cập vào Class con của Object này thì phải thông qua class Controller trong Object cha.

Hình 3.11 Cấu trúc tổ chức nhân vật chính

Các Inspector trong cấu trúc nhân vật chính ở trên, mỗi object con của Player sẽ chứa các component thực hiện chức năng riêng biệt

Hình 3.32 Các component trong cấu trúc nhân vật chính

Object “Model” sẽ chuyên quản lí những hình ảnh của nhân vật chính trong game, ở đây sẽ có script “Player Animation” để thực hiện những hoạt ảnh của nhân vật chính.

Object “Player Movement” chuyên xử lí những chuyển động của nhân vật chính như đứng yên, chạy, né tránh Script “PlayerMovement” sẽ thực hiện chức năng di chuyên khi người chơi nhập vào từ bàn phím.

Object “Player Attack” chuyên xử lí những sự kiện tấn công của nhân vật chính Script “LookAtMouse” sẽ luôn khiến cho nhân vật chính nhìn vào tọa độ chuột, “PlayerAttack” sẽ thực hiện sự kiện tấn công theo hướng tọa độ chuột đó.

Object “Player Damage Reciever” chuyên xử lí những sự kiện va chạm giữa nhân vật chính và các object trong game Script “PlayerDamageReceiver” sẽ xử lí nếu người chơi bị tấn công sẽ trừ máu của người chơi

3.3.2 Xây dựng các kẻ địch trong game

Kẻ địch sẽ có 2 loại, Goblin (chuyên đánh cận chiến) và Eagle (chuyên bắn từ xa) Kẻ địch sẽ có một Circle Collier 2D như một cảm biến để phát hiện người chơi Khi người chơi đi vào vùng tấn công thì kẻ địch sẽ đuổi theo và tấn công người chơi.

Kẻ địch sẽ có cấu trúc tổ chức giống nhau, chỉ khác nhau về chức năng trong script.

Hình 3.15 Cấu trúc tổ chức kẻ địch

Tương tự như cách tổ chức của nhân vật chính, Object “Model” chỉ chuyên quản lí những gì liên quan đến hình ảnh của kẻ địch, Object “Enemy Damage Receiver” chỉ chuyên xử lí những sự kiện va chạm của kẻ địch khi bị người chơi tấn công.

Tuy nhiên kẻ địch sẽ có các chức năng khác người chơi Object “Enemy Detect Collision” đóng vai trò như một cảm biến để phát hiện người chơi, trong đó sẽ có script EnemyDetectCollision so sánh Tag “Player” để nhận diện người chơi:

Hình 3.16 Inspector các component trong Object “Enemy Detect Collision”

Sau khi đã phát hiện người chơi, kẻ địch sẽ tấn công, cơ chế tấn công của kẻ địch sẽ dựa trên một khoản thời gian nhất định, sau 2.5 giây kẻ địch sẽ tấn công một lần, kẻ địch sẽ nhìn về phía người chơi nhờ script “LookAtPlayer” rồi mới thực hiện bắn đạn về phía người chơi:

Hình 3.17 Các component thực hiện tấn công kẻ địch

3.3.3 Xây dựng màn chơi InsideHouse của Game

Các Sprite sử dụng để xây dựng các màn chơi được thiết kế lại từ itch.io sao cho phù hợp với trò chơi Nguồn: PIPOYA FREE RPG TILESET 32x32 Pixel.

Sau khi bắt đầu game, hệ thống sẽ đưa người chơi đến màn chơi InsideHouse, tại nơi đây sẽ có một hướng dẫn mục tiêu của game là thu thập các chìa khóa sau đó tiêu diệt trùm cuối

Trong màn chơi InsideHouse, sẽ có một Object “Notice UI” đã bị disable,khi người chơi chạm vào BoxCollider2D của Object “Notice” thì “Notice UI” sẽ được enable trở lại với hướng dẫn mục tiêu của trò chơi:

Hình 3.19 Cấu trúc của các Object trong màn chơi InsideHouse

Nhờ vào script “DisplayNotice” trong object “Notice”, hệ thống sẽ hiển thị UI gợi ý cho người chơi về mục tiêu của game sau khi người chơi chạm vào BoxCollider2D:

Hình 3.20 Các component trong Object “Notice”

Object “TheJungle” sẽ chứa một BoxCollider2D để khi người chơi chạm vào thì sẽ chuyên sang màn chơi tiếp theo Script “LoadNextScene” sẽ thực hiện chuyển mản hình sang Scene tiếp theo của trò chơi:

Hình 3.21 Các component trong Object “TheJungle”

3.3.4 Xây dựng màn chơi TheJungle của Game

Sau khi kết thúc màn chơi “InsideHouse”, người chơi sẽ chuyển đến màn chơi “TheJungle” Màn chơi này sẽ giấu các chìa khóa khắp nơi trên bản đồ, tìm đủ6 chìa khóa mới có thế chuyển qua màn chơi cuối cùng Nơi đây sẽ có các Enemy đã được giới thiệu xuất hiện ngẫu nhiên để gây khó khăn cho người chơi

Xây dựng giao diện sản phẩm Game

3.4.1 Xây dựng chức năng di chuyển của người chơi Để điều khiển nhân vật di chuyển, người chơi cần nhấn vào các nút “A, W, S, D” Cần một class InputManager để quản lí các dữ liệu mà người chơi nhập vào:

Biến chứa dữ liệu di chuyển theo chiều ngang (inputHorizontal), theo chiều dọc (inputVertical).

Các biến public sẽ lấy dữ liệu của biến protected trong class InputManager.

Class khác truy cập để lấy dữ liệu input từ class này sẽ phải lấy từ biến public chứ không lấy dữ liệu trực tiếp Hàm GetInputMove() sẽ nhận dữ liệu người chơi nhập vào và gán cho các biến đã khai báo:

Hình 3.29 Code lấy sự kiện nhấn nút di chuyển của người chơi

Trong Class PlayerMovement chỉ chuyên sử lí các sự kiện di chuyển của người chơi:

Hàm GetInput() sẽ lấy dữ liệu từ Class InputManager thông qua Singleton pattern và gán cho các biến đã khai báo.

Hàm Moving() sẽ nhận các dữ liệu và thực hiện thay đổi tọa độ object cha của class này bằng cách xác định vector hướng di chuyển và tốc độ di chuyển để xử lí theo input đã nhập của người chơi.

Hình 3.31 Code xử lý cơ chế di chuyển của người chơi

3.4.2 Xây dựng chức năng điều khiển nhân vật tấn công

Trong class InputManager đã giới thiệu ở trên, thực hiện lấy dữ liệu khi người chơi nhấp nút trái chuột, dữ liệu này sẽ cho phép người chơi tấn công cận chiến:

Hình 3.32 Code lấy sự kiện click chuột trái

Thực hiện lấy dữ liệu tọa độ chuột hiện tại, chuyển đổi tọa độ chuột theo hệ quy chiếu màn hình sang hệ quy chiếu thế giới game, dữ liệu này sẽ xác định hướng tấn công của người chơi:

Class LookAtTarget sẽ phụ trách việc xác định hướng đến mục tiêu, lấy tọa độ chuột trên màn hình để hệ thống hiểu được hướng tấn công của người chơi.

Hàm AimTarget() sẽ tính một Vector từ mục tiêu đến vị trí của Object được gắn class LookAtTarget Sau đó tính toán góc độ của Vector đó với góc độ hiện tại, chuyển Radian sang Độ, sau đó xoay Object một góc với dữ liệu vừa được tính:

Hình 3.34 Code xử lý cơ chế xoay vật thể đến hướng truyền vào

Class LookAtMouse sẽ kế thừa từ class LookAtTarget, sau đó sẽ lấy dữ liệu tọa độ chuột từ class InputManager và truyền vào hàm AimTarget():

Hình 3.35 Code xử lý cơ chế định hướng đến chuột

Trong Class PlayerAttack, khai báo các biến cần sử dụng để thực hiện tấn công Đặc biệt là hitBox (phạm vi tấn công của người chơi):

Lấy dữ liệu từ class InputManager thông qua Singleton và xử lí thao tác tấn công:

Hình 3.37 Code cơ chế tấn công của người chơi

Kiểm tra nếu đã nhận được dữ liệu từ class InputManager và thời gian delay đòn đánh đã hết thì sẽ được phép tấn công (nghĩa là chỉ được tấn công tiếp sau 1 khoảng delay).

Sau khi đủ điều kiện, hành động tấn công sẽ được khởi tạo bằng cách kích hoạt hitbox Khi bắt đầu tấn công, thời gian tấn công và độ trễ tấn công sẽ được thiết lập lại Nếu quá trình tấn công đang diễn ra nhưng thời gian cho phép tấn công đã kết thúc, hành động tấn công sẽ bị dừng lại.

Hình 3.38 Các hàm xử lý tấn công của người chơi

3.4.3 Xây dựng chức năng spawn kẻ địch

Cấu trục một Enemy Spawner:

Trong class Spawner chuyên sử lí sự kiện tạo ra các Object trong game, biến holder sẽ giữ các Object đang được active trong game để Hierarchy gọn hơn.

Spawner sẽ chứa một danh sách prefabs chứa các Object mẫu, ngoài ra còn có một danh sách poolObjs để chứa các Object sau khi được tạo ra và tái sử dụng:

Hình 3.40 Code khai báo các danh sách để lưu prefab

Hình 3.41 Inspector trong object Enemy Spawner

Thực hiện nạp các Prefab là Object con của Object Prefab vào danh sách prefabs, sau nó ẩn chúng đi, khi nào cần sử dụng sẽ hiện trở lại:

Hình 3.42 Code xử lý nạp prefab vào danh sách

Tạo ra hàm SpawnPrefab(), hàm này truyền vào tên, vị trí, góc quay prefab cần spawn Sau đó lấy tên của prefab đó để kiểm tra, nếu không có prefab nào trùng tên thì sẽ thông báo không có và trả về null Nếu tìm được prefab trùng tên với tham số truyền vào thì sẽ gọi hàm SpawnPrefab(Tranfrom prefab, Vector3 spawnPos, Quaternion spawnRot).

Hàm SpawnPrefab() thứ hai tìm prefab trong poolObjs, thay đổi vị trí và góc xoay của prefab khi sinh thành, sau đó đưa prefab vào làm con của Holder.

Hình 3.43 Code xử lý cơ chế tạo ra prefab

Hàm GetObjectFromPool() sẽ duyệt qua danh sách poolObjs để tìm prefab cần spawn để hàm SpawnPrefab() ở trên nhận prefab đó, nếu trong danh sách không có prefab cần spawn hệ thống sẽ tạo mới prefab đó:

Hình 3.44 Hàm tìm kẻ địch trong danh sách và hàm tìm kẻ địch bằng tên

Như vậy đã xây dựng xong hệ thống Spawn Object, có thể sử dụng hệ thống Spawn này cho tất cả các loại Object trong game mà chỉ cần kế thừa từ class này. Đối với class Enemy Spawner, kế thừa từ class Spawner và khai báoSingleton pattern để khi nào cần spawn kẻ địch thì những class khác có thể dễ dàng truy cập Enemy Spawner:

Hình 3.45 Code xử lý cơ chế tạo ra kẻ địch

Tuy nhiên để Spawn kẻ địch tại những vị trí ngẫu nhiên thì cần phải có Class EnemySpawnAtPoint Class này sẽ liên kết tới SpawnerController để lấy các hàm cần thiết trong những class khác. Đầu tiên sẽ lấy số lượng các điểm đã được đặt trước trong game để tính toán cần spawn bao nhiêu kẻ địch Sau đó sẽ gọi hàm SpawnPrefab trong class Spawner và truyền vào những tham số đã được chuẩn bị.

Hình 3.46 Code xử lý cơ chế kẻ địch xuất hiện ngẫu nhiên tại các điểm

3.4.4 Xây dựng chức năng tấn công của kẻ địch

Cấu trúc một kẻ địch (Eagle):

Hình 3.48 Inspector trong object Eagle Detect Collison

Ngày đăng: 16/07/2024, 14:33

HÌNH ẢNH LIÊN QUAN

Hình 2.1. Logo Aseprite - Tiểu luận lập trình game 2D unity 9.5đ
Hình 2.1. Logo Aseprite (Trang 14)
Hình 3.1. Biểu đồ Use-case - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.1. Biểu đồ Use-case (Trang 20)
Hình 3.2. Class Diagram - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.2. Class Diagram (Trang 20)
Hình 3.4. Activity diagram – Điều khiển nhân vật tấn công - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.4. Activity diagram – Điều khiển nhân vật tấn công (Trang 21)
Hình 3.5. Activity diagram – Spawn kẻ địch khi bắt đầu game - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.5. Activity diagram – Spawn kẻ địch khi bắt đầu game (Trang 22)
Hình 3.6. Activity diagram – Nhặt vật phẩm khi người chơi chạm vào - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.6. Activity diagram – Nhặt vật phẩm khi người chơi chạm vào (Trang 22)
Hình 3.7. State diagram – Điều khiển nhân vật di chuyển - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.7. State diagram – Điều khiển nhân vật di chuyển (Trang 23)
Hình 3.32. Các component trong cấu trúc nhân vật chính - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.32. Các component trong cấu trúc nhân vật chính (Trang 25)
Hình 3.13. Kẻ địch Goblin - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.13. Kẻ địch Goblin (Trang 26)
Hình 3.17. Các component thực hiện tấn công kẻ địch - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.17. Các component thực hiện tấn công kẻ địch (Trang 27)
Hình 3.18. Màn chơi InsideHouse - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.18. Màn chơi InsideHouse (Trang 27)
Hình 3.20. Các component trong Object “Notice” - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.20. Các component trong Object “Notice” (Trang 28)
Hình 3.19. Cấu trúc của các Object trong màn chơi InsideHouse - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.19. Cấu trúc của các Object trong màn chơi InsideHouse (Trang 28)
Hình 3.22. Màn chơi Jungle - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.22. Màn chơi Jungle (Trang 29)
Hình 3.25. Màn chơi BossMap - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.25. Màn chơi BossMap (Trang 30)
Hình 3.26. Cấu trúc Boss - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.26. Cấu trúc Boss (Trang 31)
Hình 3.34. Code xử lý cơ chế xoay vật thể đến hướng truyền vào - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.34. Code xử lý cơ chế xoay vật thể đến hướng truyền vào (Trang 34)
Hình 3.36. Player Attack - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.36. Player Attack (Trang 35)
Hình 3.37. Code cơ chế tấn công của người chơi - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.37. Code cơ chế tấn công của người chơi (Trang 35)
Hình 3.38. Các hàm xử lý tấn công của người chơi - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.38. Các hàm xử lý tấn công của người chơi (Trang 36)
Hình 3.41. Inspector trong object Enemy Spawner - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.41. Inspector trong object Enemy Spawner (Trang 37)
Hình 3.44. Hàm tìm kẻ địch trong danh sách và hàm tìm kẻ địch bằng tên - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.44. Hàm tìm kẻ địch trong danh sách và hàm tìm kẻ địch bằng tên (Trang 38)
Hình 3.46. Code xử lý cơ chế kẻ địch xuất hiện ngẫu nhiên tại các điểm - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.46. Code xử lý cơ chế kẻ địch xuất hiện ngẫu nhiên tại các điểm (Trang 39)
Hình 3.48.  Inspector trong object Eagle Detect Collison - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.48. Inspector trong object Eagle Detect Collison (Trang 40)
Hình 3.51. Inspector trong Game Object “Eagle Shooting” - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.51. Inspector trong Game Object “Eagle Shooting” (Trang 41)
Hình 3.50. Code xử lý cơ chế ghi đè giá trị của class con - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.50. Code xử lý cơ chế ghi đè giá trị của class con (Trang 41)
Hình 3.53. Code xử lý cơ chế bắn đạn của kẻ địch Eagle - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.53. Code xử lý cơ chế bắn đạn của kẻ địch Eagle (Trang 42)
Hình 3.56. Giao diện khi vừa vào game - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.56. Giao diện khi vừa vào game (Trang 43)
Hình 3.57. Code xử lý cơ chế bắt đầu game - Tiểu luận lập trình game 2D unity 9.5đ
Hình 3.57. Code xử lý cơ chế bắt đầu game (Trang 43)

TỪ KHÓA LIÊN QUAN

w