1. Trang chủ
  2. » Giáo Dục - Đào Tạo

báo cáo thực tập cơ sở tên đề tài tạo một game fps 3d cơ bản bằng unity

39 0 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

Thông tin cơ bản

Tiêu đề Tạo một game FPS 3D cơ bản bằng Unity
Tác giả Nguyên Giàng Linh
Người hướng dẫn Nguyên Hoàng Anh
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo cáo thực tập cơ sở
Định dạng
Số trang 39
Dung lượng 15,54 MB

Nội dung

Tiếp đó tạo các thao tác trong InPut Action trong folder Input để lưu cácthao tác của nhân vậtTiếp đó generate PlayerInput Script của InputAction.PlayerInput Script này sẽ nêu lại tên củ

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN 1

BÁO CÁO THỰC TẬP CƠ SỞ

Tên đê tài: Tào mot gàmê FPS 3D cơ bàn

bàng Unity

Giảng viên hướng dẫn: Nguyên Hoàng Anh Sinh viên thực hiện: Nguyên Giàng Linh

Mã sinh viên: B21DCCN483 Lớp: D21CQCN03-B

Trang 2

I Lý do chọn đề tài và đặt yêu cầu……… 3

1,Lý do chọn đề tài………3

2.Yêu cầu………3

II.Các giải đoạn phát triển game………6

Giai đoạn 1……… 6

Giai đoạn 2……….11

Giai đoạn 3……….26

Giai đoạn 4……….36

III.Những điểm chưa hoàn thiện của game……….39

IV.Các khó khăn khi hoàn thiện game……….39

Trang 3

I.Lý do chọn đề tài và đặt yêu cầu

Yêu cầu cho báo cáo:

Tổng quan về trò chơi FPS: Giới thiệu về thể loại game FPS, các đặcđiểm cơ bản và yếu tố quan trọng cần có trong một trò chơi FPS

2.1.Unity và công nghệ liên quan:

2.1.1.Unity Engine:

-Unity là một nền tảng phát triển trò chơi mạnh mẽ, được sử dụng rộngrãi trên toàn cầu

-Nó cung cấp một loạt các công cụ và tài nguyên để phát triển trò chơi

từ các công cụ dựng hình cho đến hệ thống lập trình và quản lý tàinguyên

-Unity hỗ trợ nhiều nền tảng, từ máy tính đến di động, console và thậmchí cả các thiết bị thực tế ảo (VR) và thực tế tăng cường (AR)

Trang 4

C# thường được ưa chuộng hơn do tính hiệu quả và tính chất mạnh mẽcủa nó

2.1.3.Tài nguyên trực tuyến:

-Unity Asset Store cung cấp một kho tàng lớn các tài nguyên miễn phí

và trả phí, bao gồm các mô hình 3D, texture, script, và các gói assetkhác giúp tăng tốc quá trình phát triển

-Cộng đồng Unity cũng là một nguồn tài nguyên lớn, với các diễn đàn,blog, và video hướng dẫn để hỗ trợ trong việc giải quyết các vấn đề kỹthuật và tạo ra các tính năng mới.Cụ thể e đã fix được bug vòng lặp củaanimation và lỗi taskbar của input system

-Enemies: Các đối thủ hoặc quái vật mà người chơi phải đối mặt

và tiêu diệt trong suốt trò chơi

-Game Over: Màn hình hiển thị khi người chơi thất bại rồi quay lạimenu

-Hệ thống điểm số: Điểm số được tính dựa trên việc tiêu diệt đốithủ và hoàn thành các mục tiêu

Trang 5

2.2.3.Môi trường:

Môi trường trong trò chơi FPS thường là các bản đồ 3D được thiết

kế với các vật cản, cấu trúc và địa hình đa dạng

Các môi trường có thể là các cấp độ khác nhau như một thànhphố bị tàn phá, một cơ sở quân sự hoặc một khu rừng bí ẩn

Trong game này bản đồ của e được import trên Unity Asset Store:

fps-game-assets-for-pc-mobile-industrial-set-v3-0-101429

https://assetstore.unity.com/packages/3d/environments/industrial/rpg-2.2.4 Nhân vật:

Người chơi: Một nhân vật được điều khiển bởi người chơi(Bean player)

Trang 6

Mỗi loại vũ khí có các đặc điểm và sức mạnh riêng, thích hợp cho cáctình huống chiến đấu khác nhau.

ở đây gồm 3 loại súng: akm, m416, pistol1977

II Các giai đoạn phát triển game

1.Giai đoạn 1

1.1 Tạo player và chức năng di chuyển trong Player

Player được tạo là 1 capsule gồm các component cơ bản như MeshRenderer và Capsule Colider

Trang 7

Tiếp đó tạo các thao tác trong InPut Action trong folder Input để lưu cácthao tác của nhân vật

Tiếp đó generate PlayerInput Script của InputAction

PlayerInput Script này sẽ nêu lại tên của các Action

Tiếp đó tạo Script Input Manager quản lý input đầu vào của game

Trang 8

Về cơ bản thì việc chuyển động của nhân vật sẽ diễn ra trong khônggian 2D

Nên trong FixedUpDate của Input manager sẽ nhập input từ bàn phímcủa người chơi và trả về là vector 2 với tọa độ lần lượt là input.x vàinput y qua đó biết được hướng của nhân vật di chuyển là hướng củavector MoveDirection Do trục y là hướng lên trong 3D map nênmoveDirection.z sẽ nhận giá trị input.y trong vector 2

Qua đó thực hiện điều khiển nhân vật qua Charracter Controller

Trang 9

Đến đây em đã hoàn thành tương đối thao tác di chuyển nhân vật bằngWASD

1.2.Tiếp đó đến thao tác nhảy của Player

Bước 1: check Player còn trên mặt đất không bằng biến boolisGrounded, biến gravity và biến jumpheight

Bước 2:Kiểm tra điều kiện và để tránh cho việc vector luôn hướngxuống với tốc độ tăng dần cta thực hiện vòng if để khi đang đứng trênđất playervelocity.y chỉ bẳng 2 thay vì tăng dần như PlayerV.y +=gravity*Time.deltaTime

Bước 3: Tạo hàm Jump để tính quãng đường tối đa và Khởi tạo Jumptrong Input action Playerinput và gọi nó trong Input Manager

Trang 10

Khởi tạo trong Input Manager

1.3 Thao tác nhìn xung quanh của nhân vật

Đơn giản thực hiện việc xoay góc nhìn camera (do là game gócnhìn thứ nhất nên player sẽ ở chung 1 tọa độ với camera, do đó xoaycamera chính là làm thay đổi góc nhìn của người chơi) Việc này sẽthực hiện xoay camera theo hướng trục x để nhìn ngang và trục y nhìnthẳng đứng( trục z là trục hướng di chuyển thẳng nên thao tác xoaykhông dùng tới trục này)

1.4.tương tác của người chơi

Về cơ bản bước này sử dụng rayCast từ người chơi vào khẩu súnghoặc băng đạn

Trang 12

Khởi tạo đạn và hướng bắn cho đạn và tạo lực đẩy cho viên đạn

Tiếp đó tạo 1 GameObject bulletSpawn chính là điểm bắt đầu củanhững viên đạn và cung cấp vận tốc đầu bằng biến bullet Velocity vàdưới tác dụng của trọng lực do rigitbody tác dụng lên prefab bullet viênđạn sẽ có quỹ đạo cong như trong thực tế(trước đó đã được kiểm thửbằng bulletTrail component cho phép hiện rõ viên đạn qua đó cho thấyquỹ đạo của viên đạn)

Tiếp đó là add thêm hiệu ứng khi đạn gặp vào 1 vật cản sẽ tạo ra lỗ đạn

Trang 13

Đầu tiên sẽ đưa hiệu ứng lỗ đạn vào PreFab và khi viên đạn bắn trúng 1đối tượng colision thì sẽ hiện hiệu ứng đó ra

2.2 Tạo vũ khí

Trang 14

ở đây e tạo 3 vũ khí lần lượt là AKM,M416 và pistol

Trong đối tượng khẩu súng chưa 1 empty GameObject là BulletSpawn

là nơi mà các Bullet được bắt đầu Spawn

Trong prefab ở screen tạo 1 prefab bullet với các thuộc tính của 1viênđạn như tốc độ ban đầu trọng lượng và ảnh hưởng của viên đạn bởitrọng lực sẽ được làm bằng cách thêm Component Rigitbody vào prefabBullet

Trang 15

a) Kỹ thuật RayCasting

Raycast trong Unity, nói nôm na là bắn một tia từ một ví trí A(x1,y1, z1), theo một vector hướng (x2, y2, z2), trong một khoảng cách nhấtđịnh sẽ bắn trúng một Collider tại một điểm giao nhau là hit(x3, y3, z3)

Raycast có rất nhiều ứng dụng, ví dụ như tìm đích của viên đạn,xác định vật thể sắp va chạm khi rơi, …Nhưng đó là trong môi trườnggame, còn ở bài giới thiệu này, tôi sẽ giới thiệu cách dùng Raycast đểchọn đối tượng trong game bằng cách nhấp chuột (hay chạm vào mànhình chạm) khi chơi game

Trang 16

Đoạn mã trên sử dụng raycast để kiểm tra xem tia ray từ vị trí vàhướng của camera có va chạm với bất kỳ vật thể nào không, và nếu có,kiểm tra xem vật thể đó có phải là một “Interactable”(Tag củagameObject) hay không.

Trang 17

Tiếp đến là các hàm thao tác với vũ khi

Sau khi add Script vào weapon thì weapon sẽ hiện ra các thuộc tính

Trang 18

Đây chính là các thuộc tính mà mình đã khai báo ở trên sau đó addthêm âm thanh mỗi lần bắn qua 1 component quản lý âm thanh SoundManager(đây là 1 singleTon)

c)Thao tác nạp đạn

Các hàm nạp đạn

Hàm check xem nạp đạn đã hoàn thành thì thao tác trừ đạn

Các điều kiện để có thể reload và bắn nếu trong súng không còn đạn thì

sẽ không thể bắn được

Trang 19

Phần này sẽ cần tạo 1 gameobject và script để quản lý việc đổi vũ khí

Về đơn giản script này sẽ chứa list các vũ khí ở đây hiện tại có 2 vũ khí

Và gameObject activeWeapon sẽ check xem vũ khí nào đang đượcdùng

Trang 20

cách đổi vị trí của vũ khí trên tay và vũ khí đó sẽ ở vị trí của vũ khí đượcnhặt

d) Tạo hoạt ảnh cho súng và các UI cơ bản cần thiết

Điểm cốt yếu cho tính thực tế của 1 game Fps là nhờ các hiệu ứng củakhẩu súng

Hoạt ảnh tia lửa đầu nòng của 1 khẩu súng đơn giản chỉ là thêm hiệuứng nổ mỗi khi có đạn được bắn ra

Chỉ đơn giản là gọi đến gameObject muzzleEffect và play nó mỗi khichúng ta bắn

Hiệu ứng đầu nòng được tham khảo thử từ

73777

https://assetstore.unity.com/packages/vfx/particles/legacy-particle-pack-Bên cạnh đó, âm thanh cũng là thứ không thể thiếu của mỗi trò chơi Fps

để tạo sự sống động

Trong game này, em có làm những âm thanh như âm thanh reload băngđạn, âm thanh lúc không còn đạn, âm thanh lúc reload nhưng không cònđạn dự trữ

Về âm thanh mỗi lần bắn thì giống như hiệu ứng muzzleEffect.Mỗi lầnbắn vũ khí sẽ qua SoundManager đóng vai trò quản lý âm thanh của

Trang 21

Animation cho súng cũng là 1 yếu tố cần thiết của game.Đây là 1 sơ đồanimation cơ bản của 1 khẩu súng e tạo gồm các trigger để kích hoạtanimation và 1 biến bool isADS để chuyển súng về dạng aim

Trang 22

Tiếp đó, em bổ sung thêm UI để cho biết loại súng và loại đạn đangđược dùng

Đây là Ui cơ bản cho phép hiển thị súng dự phòng và súng đang sửdụng

Các tạo UI thì là tổ hợp của nhiều image và text-textmeshpro trong UnityViệc hiển thị các Ui ra trên màn hình sẽ do 1 GameObject ManagerHudManager quản lý

Trong script HudManager sẽ quản lý việc hiển thị ra các UI cơ bản trêne) Tạo băng đạn cho súng và thao tác nhặt đạn cho súng

Trang 23

Trong game này e sẽ chỉ tạo 2 loại băng đạn của súng trường và súnglục mỗi băng đạn sẽ chứa 200 viên đạn và trong mỗi băng đạn sẽ chứascript AmmoBox để chứa thông tin và loại băng đạn

Trang 24

Và cũng giống như vũ khí khi nhặt việc nhặt băng đạn cũng dùng kỹthuật RayCasting để chỉ đến băng đạn và nhặt chúng Số lượng đạn mỗibăng sẽ được thêm vào tổng số đạn hiện có của súng

Tiếp đó sẽ chỉnh lại script Weapon và hàm ReloadCompleted để trừ đạnkhi nạp đạn

f) Tạo động tác Aim cho súng

Về đơn giản chỉ là thay đổi tọa độ của súng về hướng thẳng mắt vớingười nhìn Tiếp đó trong hàm Update của script Weapon.cs

Trang 25

Chúng ta thêm đoạn code sau để khi ấn giữ chuột trái để vào trạng thái aim và khi thả sẽ đưa sung về trạng thái bình thường

EnterADS và ExitADS là 2 hàm để kích hoạt animation aim và thoát animation

3.Giai đoạn 3: Tạo kẻ địch (Trong game là zombie)

Việc thiết kế địch sẽ được thiết kế bằng State Machine

3.1.Giới thiệu về State Machine

State Machine là một khái niệm quan trọng trong lập trình game và được

sử dụng rộng rãi trong Unity để quản lý hành vi của các đối tượng, đặcbiệt là các nhân vật hoặc các đơn vị AI State Machine giúp tổ chức mãnguồn một cách rõ ràng và dễ bảo trì bằng cách chia hành vi phức tạpthành các trạng thái đơn giản hơn

3.1.1.Khái niệm State Machine

State Machine (Máy trạng thái) là một mô hình toán học dùng để thiết kếcác hệ thống có hành vi phức tạp thông qua việc xác định các trạng thái

và chuyển đổi giữa chúng Một State Machine bao gồm:

Trang 26

-Sự kiện (Event): Những yếu tố kích hoạt sự chuyển đổi giữa cáctrạng thái.

3.1.2.State Machine trong Unity

Trong Unity, State Machine thường được sử dụng để quản lýhành vi của các nhân vật, đặc biệt là AI Có nhiều cách để triển khaiState Machine trong Unity, từ việc viết mã thủ công cho đến việc sửdụng các công cụ và thư viện có sẵn

Cách triển khai State Machine

Sử dụng Animator Controller: Unity cung cấp sẵn công cụAnimator Controller để tạo và quản lý các State Machine cho hoạt ảnh.Điều này rất hữu ích cho việc tạo các trạng thái hoạt ảnh khác nhau chonhân vật

Tạo Animator Controller: Tạo một Animator Controller trong Unity

và liên kết nó với nhân vật của bạn

Tạo các trạng thái (State): Thêm các trạng thái vào AnimatorController, mỗi trạng thái sẽ đại diện cho một hoạt ảnh hoặc hành vi củanhân vật

Thiết lập chuyển đổi (Transition): Định nghĩa các điều kiện đểchuyển từ trạng thái này sang trạng thái khác, ví dụ như khi một biến sốbool chuyển từ false sang true

3.2 Tạo Zombie bằng State Machine

Mô hình đầy đủ của animation Zombie và các trạng thái của zombie

Trang 27

Hai trạng thái mà không thể đưa và state Machine đó là trạng thái nhậndamage và trạng thái chết của zombie.Ở đây em tạo 2 trạng thái chếtkhác nhau để game đỡ bị nhàm chán

Đây là hàm xử lý và gọi animation khi zombie nhận damge và khizombie chết đồng thời cũng gọi âm thanh khi zombie nhận damge vàzombie chết

Hai trạng thái này cũng là 2 trạng thái được cơ bản của zombiecòn các trạng thái như di chuyển hoặc tấn công và đuổi theo player sẽ làcác trạng thái được làm trong state

Tuy nhiên ở đây sẽ có 1 vấn đề là zombie sẽ không ước lượngđược không gian mà mình có thể di chuyển trên map nên chúng ta sẽphải làm AI cho Zombie để cho biết không gian và zombie có thể dichuyển.Và trong Unity có 1 Registry hỗ trợ cho việc này đó làNavmeshAgent

Trang 28

Tiếp đó cấu hình lại bản đồ và khoanh vũng những vùng zombie

có thể đi qua Những vùng màu xanh là nơi zombie có thể đi qua

Tới đây,quá trình chuẩn bị thiết kế zombie theo mô hình statemachine đã được hoàn thành

3,2.1.Idle State

Là trạng thái mà zombie sẽ đứng im và thực hiện animation cử độngđứng im

Trang 29

Animation cho trạng thái Idle

Trang 30

Animation cho trạng thái Patrolling3.2.3.Trạng thái ChaseState

Đơn giản trạng thái này khiến zombie luôn hướng về phía người chơi và

sẽ chuyển trạng thái thành tấn công nếu người chơi ở trong phạm vi tấn công và khi đã quá phạm vi đuổi thì quay lại Patrolling state

Trang 31

Animation cho trạng thái Chasing State3.2.4.Attacking State

Attacking State quản lý việc tấn công của người chơi, Nếu đã quá phạm

vi tấn công thì sẽ chuyển về trạng thái Chasing Ở đây zombie sẽ luôn tì

vị trí hướng của player để chuyển hướng tấn công

Trang 32

Animation cho trạng thái Attack3.2.5.Animation nhận damage, chết và damage của zombie

Về animation nhận damage và chết sẽ được tạo vào gọi qua Trigger trong animation của game khi zombie nhận damage hoặc chết

Trang 33

Phần damage của zombie sẽ được khai báo trong script của zombie là zombie.cs tuy nhiên damage của zombie sẽ gây lên người chơi khi và chỉ khi tay zombie đánh trúng người chơi nên để ý chi tiết này rất quan trọng

Trang 34

Trong Prefab zombie sẽ tao 1 sphare ở bàn tay zombie và script

zombieHand sẽ đóng vai trò kiểm tra sự va chạm với Player và trừ máu với mỗi lần va chạm

Cuối cùng là thêm một số âm thanh và hiệu ứng có liên quan đến

Trang 35

Đơn giản sau khi chạy game sẽ Spawn ra số lượng zombie và chia theonhiều đợt tấn công Player

Giai đoạn 4 : Làm Ui cho Player và Scene cho game

4.1.Player Heathbar

Làm thanh máu cho Player (cơ bản là tạo từ image).Dưới đây là hàm khiPlayer nhận damage và sẽ trừ theo lượng máu tương ứng của nhân vật với thanh Hp(game sẽ không có cơ chế tự hồi máu và vật phẩm hồi máu)

Trang 36

4.2.Player Death

Khi Hp nhân vật tụt về 0 thì sẽ khiến nhân vật chế và quay camera về góc độ khiến nhân vật như đã ngã xuống và lưu điểm bằng playerPref

Trang 37

4.3 Tạo các Scene mới để hoàn thiện game

Trang 38

Scene DirectionTới đây đa phần đã xong được 1 con game FPS với các chức năng cơ bản

III.Những điểm chưa hoàn thiện của game

1.Còn quá nhiều góc bug trên map

Trang 39

Player có thể đứng trên mái nhà mà không bị zombie chạm tới

2.Chức năng nạp đạn chưa thực sự được tối ưu

3.Chuyển động của zombie còn quá cứng nhắc

4.Nhân vật có thể nhặt súng từ khoảng cách xa

IV.Các khó khăn khi hoàn thiện game

Khó khăn 1: Lần đầu tiên làm game 3D em đã gặp nhiều khó khắn tronglúc xử lý va chạm và vật lý của không gian 3 chiều

Khó khăn 2: vị trí của sung lúc chuyển trạng thái hay bị lỗi khiến em giánđoạn quá trì làm game

Khó khăn 3: Việc thiết kế các State đòi hỏi mội khoảng thời gian khá dài

để nắm vững kiến thức và thiết kế của các state

Khó khan 4: việc link các UI với các biến còn rất nhiều trở ngại vì vấn đềscale và gõ nhầm dòng lệnh khiến cái prefab bị spawn ra liên tục khiến

em phải xóa phần UI của player và code lại từ đầu

Ngày đăng: 22/08/2024, 14:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w