Ụ
Ụ
M C L C
L i m đ u ờ ở ầ .....................................................................................................2
ươ ớ ệ Ch ng 1. Gi i thi u chung .........................................................................3
ớ ệ ề 1.1. Gi i thi u v Unity ......................................................................3
ủ 1.2. Tính năng c a Unity ......................................................................3
ơ ả ệ 1.3. Các khái ni m c b n trong Unity ..............................................46
ươ ớ ườ Ch ng 2. Làm quen v i môi tr ng Unity ...............................................7
ở ạ ố ượ ể ơ ả 2.1. Tìm hi u và kh i t o các đ i t ng c b n trong Unit ..........729
ầ ậ ử 2.2. Thành ph n v t lý và x lý va ch m ạ ..........................................2931
ử ệ ứ ể 2.3. X lý Text, hi u ng trong game và chuy n màn ch i ơ ............3235
ộ ố ơ ở ữ ệ 2.4. M t s c s d li u trong game Unity ....................................3640
ươ ớ Ch ng 3. Làm game v i Unity Engine ......................................................41
ớ ự ệ 3.1. Gi i thi u game đang th c hi n ệ .................................................4143
ụ 3.2. M c tiêu đ tài ề ..............................................................................44
ệ 3.3. Tài li u tham kh o ả ........................................................................44
ế K t Lu n ậ .........................................................................................................45
~ 1 ~
ờ ở ầ L i m đ u
ệ ể Ngày nay, Công ngh thông tin đang là nghành đ ượ ầ ư c đ u t phát tri n
ể ấ ệ ở ấ ấ ư ạ ắ ộ r ng rãi nh t, ta có th th y máy tính, laptop xu t hi n ơ kh p n i nh t i
ệ ườ ệ ỉ doanh nghi p, công ty, nhà tr ng. Công ngh thông tin không ch giúp ta hoàn
ứ ứ ệ ể thành công vi c 1 cách nhanh chóng, chính xác mà còn là th có th đáp ng nhu
ả ọ ườ ệ ệ ộ ỏ ầ c u gi i trí cho m i ng i sau m t ngày làm vi c m t m i.
ể ử ụ ỉ ớ ể ể ộ Ch v i m t cái laptop hay 1 cái máy tính đ bàn ta có th s d ng đ xem
ổ ủ ạ ơ ơ ữ ự phim, nghe nh c và ch i game. H n n a s bùng n c a CNTT cũng kéo theo
ủ ữ ế ệ ể ạ ấ nh ng chi c PC, laptop, đi n tho i có c u hình kh ng giúp chúng ta có th làm
ệ ặ ọ ệ ế m i vi c trên 1 chi c máy tính. Đ c bi t
ẽ ự ệ ể ề ậ ậ ộ Chính vì v y, n i dung lu n văn mà em s th c hi n là tìm hi u v Game
ề ả ự ớ và cách xây d ng game đa n n t ng v i Unity Engine.
~ 2 ~
ươ ớ ệ Ch ng 1. Gi i thi u chung
ớ ệ ề 1.1. Gi i thi u v Unity.
ộ ườ ẽ ỗ ợ ể ợ Unity3D là m t môi tr ạ ng phát tri n tích h p, m nh m , h tr thao tác kéo
ỳ ế ự ệ ả th , tu bi n giao di n nhanh chóng, tr c quan.
ợ ẵ ư ệ ụ ử ấ ạ ậ ồ Cung c p các công c x lý đ ho , tích h p s n th vi n v t lý, tính toán va
ạ ch m...
ỗ ợ ể ả H tr phát tri n c game 2D và 3D.
ề ả ỗ ợ ư ụ ề H tr nhi u n n t ng thông d ng nh OSX, Linux, Window, Web, iOS,
Window Phone 8, Android, PS3, BB…
ồ ộ ườ ớ C ng đ ng ng ỗ ợ ộ i dùng, h tr r ng l n.
ể ạ ượ ả ễ Có phiên b n mi n phí có th ch y đ c trên Window và Mac OSX
ủ 1.2. Tính năng c a Unity.
Unity3D h
ướ ớ ườ ử ụ ệ ư ả ng t i ng ệ i s d ng chuyên nghi p và c nghi p d , nên
ễ ể ử ụ ằ ặ ớ ữ ậ khá d đ s d ng. V i ngôn ng l p trình b ng C#, JavaScript ho c
BOO.
Ngày nay r t nhi u nhà phát tri n game l a ch n Unity3D đ phát tri n
ự ể ể ể ề ấ ọ
ẽ ệ ụ ự ạ ề ả ỗ ợ ủ ả ở b i kh năng h tr đa n n t ng và s m nh m ti n d ng c a Unity3D.
ạ ẽ ề ế ả ấ ớ ề ử ầ Đ n v i Unity, các b n s không c n ph i băng khoăn v các v n đ x
ạ ứ ạ ệ ấ ả ề ễ ở ồ lý, các khái ni m đ ho ph c t p... t t c đ u tr nên d dàng và nhanh
ớ chóng v i Unity .
~ 3 ~
ơ ả ệ 1.3. Các khái ni m c b n trong Unity
1.3.1. GameObject
ộ ố ượ ụ ể ể ậ ọ ộ M t đ i t ng c th trong game g i là m t game object, có th là nhân v t,
ồ ậ đ v t nào đó.
ử ụ ộ ố ườ Ví d : cây c i, xe c , nhà c a, ng i...
1.3.2. Component
ầ ấ ạ ư ề ẽ ả ộ M t GameObject s có nhi u thành ph n c u t o nên nó nh là hình nh
ầ ử ậ ạ ợ ộ (sprite render), t p h p các hành đ ng (animator), thành ph n x lý va ch m
ề ể ậ ầ (collision), tính toán v t lý (physical), mã đi u khi n (script), các thành ph n
ứ ư ậ ủ ỗ ọ ộ khác... m i th nh v y g i là m t component c a GameObject.
1.3.3. Sprite
ầ ủ ủ ể ả ả ặ ộ ộ Là m t hình nh 2D c a m t game object có th là hình nh đ y đ , ho c có
ộ ộ ể ậ th là m t b ph n nào đó.
1.3.4. Animation
~ 4 ~
ụ ủ ự ề ả ậ ộ ộ ổ ự Là t p m t hình nh đ ng d a trên s thay đ i liên t c c a nhi u sprite khác
nhau.
1.3.5. Key Frame
ộ ạ ể ượ ạ ủ ộ Key Frame hay Frame là m t tr ng thái c a m t animation. Có th đ c t o
ừ ề nên t 1 sprite hay nhi u sprite khác nhau.
1.3.6. Prefabs
ể ử ụ ệ ộ ạ ố ượ ố Là m t khái ni m trong Unity, dùng đ s d ng l i các đ i t ng gi ng nhau
ở ạ ạ ỉ ầ ỉ ệ ế ạ ị có trong game mà ch c n kh i t o l ị i các giá tr v trí, t l bi n d ng và góc
ừ ố ượ ầ quay t môt đ i t ng ban đ u.
ố ượ ụ ử ề ồ ố Ví d : Các đ i t ng là đ ng tiên trong game Mario đ u có x lý gi ng nhau,
ỉ ệ ạ ộ ố ượ ề ầ ồ ạ ẽ ử ụ nên ta ch vi c t o ra m t đ i t ng ban đ u, các đ ng ti n còn l i s s d ng
ề ặ ạ ạ ộ prefabs. Ho c khi ta lát g ch cho m t cái n n nhà, các viên g ch cũng đ ượ ử c s
ụ d ng là prefabs.
1.3.7. Sounds
Âm thanh trong game.
1.3.8. Script
ở ạ ử ứ ể ậ ạ ố ồ Script là t p tin ch a các đo n mã ngu n, dùng đ kh i t o và x lý các đ i
ượ t ng trong game.
ữ ậ ể ậ ể Trong Unity có th dung ngôn ng l p trình C#, Java Script, BOO đ l p trình
Script.
~ 5 ~
ỗ ợ ẵ ể ậ ề ầ Unity có h tr s n ph n m m MonoDeveloper dùng đ l p trình.
1.3.9. Scenes
ấ ả ố ượ ơ ủ ộ ả Qu n lý t t c các đ i t ng trong m t màn ch i c a game.
Ả ọ nh minh h a scene game
1.3.10. Assets
ồ ấ ả ữ ụ ụ ự ư Bao g m t t c nh ng gì ph c v cho d án game nh sprite, animation, sound,
script, scenes…
1.3.11. Camera
~ 6 ~
ặ ộ ệ ể ầ ị Là m t game object đ c bi t trong scene, dùng đ xác đ nh t m nhìn, quan sát
ố ượ các đ i t ng khác trong game.
1.3.12. Transform
ỏ ộ ố ổ ị ụ ế ế Là 3 phép bi n đ i t nh ti n, quay theo các tr c, và phóng to thu nh m t đ i
t ngượ
ươ ớ ườ Ch ng 2. Làm quen v i môi tr ng Unity
ở ạ ố ượ ể ơ ả 2.1. Tìm hi u và kh i t o các đ i t ng c b n trong Unity
Ả ọ ố ủ nh minh h a b trí c a Unity
ố ầ 2.1.1. Các thành ph n và b trí
a. Scene
~ 7 ~
ỏ ố ầ Ph n màu đ s 1.
ố ượ ể ầ ầ ị ự ộ Ph n này ph n hi n th các đ i t ể ng trong scenes m t cách tr c quan, có th
ố ượ ọ ố ượ ả ỏ ự l a ch n các đ i t ng, kéo th , phóng to, thu nh , xoay các đ i t ng ...
ể ầ ế ậ ố ư ể ộ ố ị Ph n này có đ thi t l p m t s thông s nh hi n th ánh sáng, âm anh, cách
nhìn 2D hay 3D .
b. Game
ỏ ố ầ Ph n màu đ s 1
ầ ướ ị ừ ạ Ph n này cho phép ta xem tr ể c hi n th t scene ra game, bên c nh tab scene.
c. Inspector
ầ ố Ph n s 2 màu vàng
ố ủ ủ ể ầ ộ ị Ph n này hi n th các component c a m t Game Object và các thông s c a các
component.
d. Project
ầ ố Ph n s 3 màu xanh lá cây
ị ư ụ ứ ấ ả ủ ự ể ầ Ph n này hi n th th m c Assets, ch a t t c các tài nguyên c a d án game.
Ở ầ ể ể ạ ầ ị ph n này, bên c nh tab khác, có ph n Console đ hi n th các log trong quá
trình debug.
e. Hierarchy
ầ Ph n đóng khung màu tím
ả ầ ấ ả ố ượ ể ọ ự ổ Ph n này qu n lý t t c các đ i t ng trong scenes, có th ch n l a, đ i tên,
ố ượ xoá các đ i t ỏ ng ra kh i game.
f. Top bar
~ 8 ~
ầ Ph n đóng khung màu đà
ụ ứ ầ Ph n này ch a các nút chuyên d ng:
ỳ ọ ố ộ ộ + B n nút bên trái: (1) tu ch n cho phép dùng chu t kéo toàn b scenes, phóng
ỏ ự ố ượ ọ ộ to, thu nh , l a ch n các đ i t ng trong scenes... (2) cho phép dùng chu t di
ố ượ ể ố ượ ộ chuy n các đ i t ng trong scenes, (3) cho phép dùng chu t quay các đ i t ng
ộ ỏ (4) cho phép dùng chu t phóng to, thu nh các đ i t ố ượ ng
ở ữ ừ ạ ạ + Ba nút gi a: (1) cho phép ch y demo game, (2) cho phép d ng game t ộ i m t
ạ ừ frame nào đó, (3) cho phép ch y t ng frame.
ỳ ọ ể ả ị + Hai drop list bên ph i: (1) cho phép tu ch n hi n th các layer, (2) cho phép
ư ọ ố ườ ế ậ ch n và l u các b trí do ng i dùng thi t l p.
ử ổ ủ ư Ngoài ra còn có các c a s khác c a Unity, nh Sprite Editor, Animation,
ể ự ỳ ế ộ ố ụ ạ Animator, Console... và các b n có th t tu bi n cho mình m t b c c sao cho
ệ ấ ậ ớ thu n ti n v i mình nh t...
ớ ự ạ ấ 2.1.2. T o và c u hình v i d án 2D
ậ B t Unity lên, vào menu File/New Project
~ 9 ~
Ả ọ nh minh h a
ế ạ ấ ọ ả Ch n lo i project là 2D sau đó gõ tên project xong nh n Create Project. K t qu
ư nh sau:
~ 10 ~
ả ọ nh minh h a
ở ộ ố ượ ạ ự Sau khi t o d án xong, ẽ Hierarchy s có m t đ i t ng là Main Camera.
ề ể ể ầ ỉ ị Chúng ta c n đi u ch nh ki u hi n th Scene là 2D
Ở ử ổ ọ Ở ử ổ ẽ ể ị c a s Hierarchy ch n Main Camera. c a s Inspector s hi n th các
ẽ ọ ạ ố ủ ế ị thông s c a camera, ta s ch n l i giá tr Projection hay phép chi u là phép
ố ả ế ế chi u vuông góc thay cho phép chi u ph i c nh
~ 11 ~
ọ ế Ch n phép chi u vuông góc
ế ở ử ổ ư ụ ể ứ ấ ả ẽ ạ ẵ Ti p theo, c a s Project, ta s t o s n các th m c đ ch a t t c các tài
ử ụ ầ ượ nguyên có s d ng trong game sau này l n l t là: Animations, Prefabs, Scripts,
Sprites, Sounds, Scenes.
ư ụ ở ử ổ ọ RightClick vào th m c Assets ọ c a s Project, ta ch n Create, ch n Folder.
~ 12 ~
ả ư ế K t qu nh hình sau:
ố ượ ơ ả ở ạ 2.1.3. Kh i t o các đ i t ng c b n
a. GameObject
a1. Empty Object
~ 13 ~
Ở ọ ọ menu ta ch n GameObject, ch n Create Empty.
ả ở ặ ộ ầ Ho c click chu t ph i ph n Hierarchy => Create Empty
ể ổ ố ượ ử ổ Ta có th đ i tên, sao chép hay xoá các đ i t ng thông qua c a s này.
ộ ố ượ ỉ ứ ớ ạ ả ấ ơ Empty game object là m t đ i t ng đ n gi n nh t, khi m i t o ra, ch ch a
ứ ấ ỳ ộ ố ế ẽ ổ các thông s bi n đ i (transform) ngoài ra nó s không ch a b t k m t
component nào c .ả
ặ ể ố ượ ể ạ ớ Chúng ta có th thêm các component ho c đ nhóm các đ i t ng khác l i v i
ặ ử ụ ụ ộ nhau thành m t nhóm, ho c s d ng các empty object cho các m c đích khác ...
~ 14 ~
a2. Parent object và Child object
ộ ố ượ ố ượ ứ ề ớ Parent object : là m t đ i t ng ch a các đ i t ắ ng con khác, g n li n v i nhau.
ộ ố ượ ộ ố ượ ằ ề ớ Child object: là m t đ i t ng n m trong m t đ i t ắ ng khác, g n li n v i
nhau.
ể ạ ố ượ ả ộ ố ượ ỉ ệ ẵ Đ t o các đ i t ng parent và child, ta ch vi c kéo th m t đ i t ng có s n
ố ượ ử ổ ố ượ ổ vào trong đ i t ng đã có trong c a s Hierarchy. Khi thay đ i các đ i t ng
ố ượ ộ ỉ con thì ch có tác đ ng trên đ i t ng con đó.
ổ ố ượ ố ượ ẽ ổ Khi thay đ i đ i t ng cha thì các đ i t ng con s thay đ i theo.
ố ượ ố ượ Đ i t ng Girl có các đ i t ng con là Bag, Hat
a3. Tag
ủ ủ ử ụ ộ ộ ộ ộ ụ Tag là m t thu c tính c a c a m t game object. Ta s d ng thu c tính này m c
ị ệ ố ượ ự ệ ử ớ đích xác đ nh và phân bi t các đ i t ấ ể ng v i nhau, khi x lý s ki n hay b t k
ầ ề ấ v n đ gì c n.
Tag
~ 15 ~
Thêm tag m iớ
Danh sách tag
b. Sprite
ạ Có 2 lo i sprite là Single sprite và Multiple sprite.
Single sprite
~ 16 ~
Multiple sprite
b1. Single sprite
Ở ử ổ ọ c a s Project, ch n th m c ư ụ Assets, RightClick vào th m c ư ụ Sprites,
ế ả ộ ch nọ Import New Assets, sau đó tìm đ n m t hình nh nào đó.
Ở ử ổ ọ c a s Inspector, ch n Texture Type là Sprite, Sprite Model là single, sau đó
ấ nh n Apply.
~ 17 ~
b2. Multiple sprite
ế ươ ự ộ ậ ứ ề ả ọ Ti n hành t ng t ế , Import New Assets, ch n đ n m t t p tin nh ch a nhi u
ư ở ụ ở ử ổ ọ Sprite nh ví d trên, sau đó c a s Inspector ch n Texture Type là Sprite,
ấ Sprite Model là Multiple. Xong nh n Apply.
~ 18 ~
ể ế ầ ộ ị ị Ti p theo ta c n xác đ nh các vùng bao, đ xác đ nh các sprite con thu c Multiple
ừ ằ ở ả ọ sprite v a import vào đó b ng cách b ng Inspector ch n Sprite Editor.
Ở ử ổ ể ặ ị ọ ọ ố c a s Sprite Editor, ta ch n Slice, sau đó đ m c đ nh các thông s , ch n nút
ẽ ự ộ ấ ỏ ị Slice, Unity s t đ ng xác đ nh vùng bao nh nh t cho các sprite cho chúng ta.
ể ự ặ ộ ể Ho c chúng ta có th t ị dùng chu t đ xác đ nh các vùng bao này.
~ 19 ~
ấ ở ử ổ ụ ể Sau đó nh n nút Apply c a s Sprite Editor đ áp d ng.
ạ ạ ậ ằ V y là ta đã t o xong hai lo i sprite b ng Unity.
b3. Thêm Sprite render cho Empty GameObject
ố ượ ạ ộ ọ ở ặ T o m t Empty GameObject, đ t tên là Ground. Sau đó ch n đ i t ng này,
ử ổ c a s Inspector ta ch n ọ Add Component sau đó ch nọ Rendering, ch nọ Sprite
Render.
ế ở ụ ở ử ổ ể ể ọ Ti p theo, m c Sprite Render ị c a s Inspector, ta ch n Sprite đ hi n th
(Nút khoan tròn đ )ỏ
~ 20 ~
c. Animation
ả ộ ộ ộ M t animation là m t hình nh đ ng mô t ả ộ ố ượ m t đ i t ng nào đó trong game.
ụ ể ế ạ ậ ộ ộ Ví d : có th là m t chi c xe đang ch y, hay m t nhân v t đang đi....
ề ể ộ ộ ộ ộ ồ M t animation trong Unity có th bao g m nhi u hành đ ng, m t hành đ ng nh ư
ọ ộ ậ v y g i là m t clip.
ứ ụ ể ậ ả ộ ộ Ví d : m t nhân v t có th có các hành đ ng đi, đ ng, nh y....
ậ ể ạ ả ậ ỹ ỹ ỹ Có hai k thu t đ t o animation (c 2D và 3D): đó là k thu t key frame và k
ậ thu t skeletal hay spine.
~ 21 ~
ỹ ậ ạ c1. K thu t t o animation
ậ ạ ỹ *K thu t t o key frame
ố ớ ỹ ườ ử ụ ộ ộ ậ Đ i v i k thu t key frame, ng i ta s d ng m t sprite cho m t key frame
ộ ủ c a hành đ ng.
ỗ M i sprite là 1 key frame
ẽ ẽ ộ ể ạ ể ộ ạ ể ổ ờ Đ t o ra chuy n đ ng, ta s v m t key frame t ầ i th i đi m đ u và thay đ i
ầ ự ẽ ượ ộ tu n t các key frame sau, chúng ta s có đ c m t animation.
ươ ấ ể ạ ư ể ả ơ ộ ạ ố Đây là ph ng pháp đ n gi n nh t đ t o chuy n đ ng, nh ng l ề i t n kém v
ả ố ề ể ề ớ ộ ộ b nh , vì ta ph i t n nhi u sprite cho nhi u chuy n đ ng khác nhau.
ộ ươ ỹ *K thu t ậ skeletal hay spine hay b x ng
~ 22 ~
ố ớ ỹ ậ ườ ố ượ ỗ Đ i v i k thu t này, ng i ta chia đ i t ề ng ra thành nhi u sprite, m i
ậ ủ ố ượ ộ ộ ư ố ươ ủ ộ ươ sprite là m t b ph n c a đ i t ng (gi ng nh 1 khúc x ng c a b x ng).
ể ạ ộ ớ ề ị ẽ ớ ộ ổ ủ Đ t o ra m t key frame m i, ta s thay đ i các sprite v v trí, đ l n, xoay c a
ế ợ ể ế ầ ộ các sprite thành ph n có liên quan đ n chuy n đ ng. Sau đó k t h p các key
ạ ớ ư ỹ ể ạ ậ frame l i v i nhau nh k thu t key frame đ t o thành các animation.
ấ ạ ể ộ ở ả ướ Chúng ta có th xem các sprite c u t o nên m t key frame nh d i.
ẻ ố ư ờ ơ ạ ấ ả ặ ệ ệ ế Cách này có v t n th i gian h n, nh ng l i r t là hi u qu , đ c bi t là ti t
ượ ề ộ ệ ki m đ ớ c nhi u b nh .
ộ ề ể ậ c3. Đi u khi n các hành đ ng nhân v t – Animator
Ở ầ ủ ể ộ ộ ạ ph n trên chúng ta đã tìm hi u cách t o các clip hay các hành đ ng c a m t
ư ậ ẽ ộ ớ ộ animation. V i m t animation nh v y ta s có m t Controller.
ẽ ể ể ầ ạ ữ ạ ằ ộ ễ Ph n này s bi u di n cách chuy n qua l i gi a các hành đ ng b ng máy tr ng
thái.
~ 23 ~
Ở ử ổ ố ượ ọ ọ ọ c a s Hierarchy ch n đ i t ng MainCharacter, ch n Menu, ch n Window,
ử ổ ư ệ ẽ ấ ọ ch n Animator, c a s Animator s xu t hi n nh sau:
~ 24 ~
ỗ ươ ứ ộ Danh sách các state, m i state t ớ ng ng v i m t clip
ể ả ộ ọ ế ậ ặ ị Click chu t ph i vào state Idle, ch n Set Default đ thi t l p state m c đ nh cho
ố ượ đ i t ng.
ộ ế ư ạ ọ ỗ ớ Ch n Make Transition, sau đó đ a chu t đ n tr ng thái đích. V i m i transition
ậ ừ ạ ệ ạ ằ ể ể ừ ạ v a t o, có nghĩa r ng nhân v t t tr ng thái hi n t ổ ự i có th chuy n đ i tr c
ế ế ạ ả ượ ọ ti p qua tr ng thái đích. K t qu thu đ ạ c ta g i là máy tr ng thái hay s đ ơ ồ
ể ổ ạ chuy n đ i tr ng thái.
~ 25 ~
ố ượ ượ ặ ị ẽ ượ ạ ế ậ Khi đ i t ng đ c load lên, tr ng thái m c đ nh s đ c thi ậ t l p, v y lúc nào
ẽ ạ ự ể ẽ ạ ố thì s chuy n qua tr ng thái khác ?? Chúng ta s t o thêm các tham s , và d a
ể ạ ố ổ ị ể vào giá tr các tham s này đ chuy n đ i các tr ng thái.
ố ể ể ề ẽ ạ ể Ta s t o ra 3 tham s ki u bool là isJump, isIdle, isRunning đ đi u khi n.
~ 26 ~
ế ậ ề ệ ộ ọ ể Đ thi t l p đi u ki n cho m t transition, ta click ch n transition đó (transition
ượ ể ọ ở ử ổ ụ ộ đ c ch n chuy n qua màu xanh), c a s Inspector, m c thu c tính
ệ ẽ ế ậ ố ể ị ủ ị ề Conditions (đi u ki n) ta s thi t l p giá tr c a các tham s , đ xác đ nh lúc nào
ể ạ thì chuy n tr ng thái.
~ 27 ~
Ở ọ đây, chúng ta ch n isRunning = true.
ệ ề ể ườ ụ ề ể ợ ộ Ta có th thêm các đi u ki n khác (tr ổ ng h p chuy n đ i ph thu c nhi u
ừ ể ỏ ớ ặ ấ ấ ộ ề ệ ệ ề ấ ằ ộ đi u ki n) b ng cách nh n d u c ng ho c d u tr đ b b t m t đi u ki n.
ậ ạ ỗ ố ị ậ ẽ V y m i khi ta set giá tr tham s isRunning = true, tr ng thái nhân v t s
ể ươ ự ế ậ chuy n sang Running. T ng t ta thi t l p isIdle, isJump cho các transition
khác.
ố ở ử ổ ọ ở ử ổ ụ Cu i cùng, c a s Hierarchy, ta ch n MainCharacter, c a s Inspector, m c
ỏ ọ Animator, ta b ch n Apply Root Motion.
~ 28 ~
ế ế ố ượ ự ộ Đ n đây, chúng ta đã bi t cách xây d ng m t animation cho các đ i t ng trong
ể ạ ố ượ ề game và đi u khi n qua l i các đ i t ng đó.
d. Prefab
ộ ố ượ ủ ạ ầ ế ả Prefab cho ta t o ra các b n sao nhanh c a m t đ i t ng mà không c n thi t
ở ạ ủ ộ ố ượ ị ừ ậ ạ l p l i các giá tr kh i t o c a m t đ i t ị ngnào đó ngoài tr các giá tr
ỉ ệ ị transform (v trí, t l , quay).
ộ ố ượ ể ạ ộ ả ố ượ Đ t o m t Prefab cho m t đ i t ỉ ầ ng nàođó, ta ch c n kéo th đ i t ng đó ở
ư ụ ư ế ạ ố ớ ử ổ ử ổ c a s Hierarchy xu ng th m c Prefab (n u ch a có thì t o m i) trong c a s
ố ử ụ ỉ ệ ủ ở Project c a chúng ta. Sau này mu n s d ng ta ch vi c kéo các Prefab này tr
ạ ử ổ l i c a s Scene.
~ 29 ~
ố ượ Prefab cho đ i t ng Ground
ờ ộ ườ ẽ ả ạ ặ ạ ị ẳ Bây gi ta s kéo th Prefabs này t o thành m t đ ng th ng, và đ t l i v trí
ở ị ườ ư ẳ ố ượ đ i t ng MainCharacter ằ v trí n m trên đ ẽ ng th ng này nh hình v .
ề ể ạ e. Script và đi u khi n máy tr ng thái
e1. Script
ộ ậ ứ ề ể ộ Script là m t t p tin (cũng là Game Component) ch a các mã đi u khi n cho m t
ượ ế ằ ặ ố ượ đ i t ng nào đó trong game, đ c vi t b ng C# hay Javascript ho c BOO.
~ 30 ~
ể ạ ả ở ư ụ ộ Đ t o script ta click chu t ph i th m c Scripts/Create/C# Script.
ộ ề ố ượ ầ ạ ỗ ớ ị ự ỉ V i m i script t o ra, ta c n ch đ nh script này thu c v đ i t ng nào. Ta th c
ệ ằ hi n b ng cách:
ố ượ ọ ở ử ổ ở ử ổ ọ Ch n đ i t ng MainCharacter c a s Hierarchy, c a s Inspector ch n
ở Add Component/Scripts/Main Character Behaviour.cs danh sách. Sau khi add:
~ 31 ~
ể ở ẽ ấ ư Kích đúp đ m file script ta s th y nh sau:
~ 32 ~
ượ ọ ở ạ ố ượ ầ ướ ầ + Start(): Đ c g i 1 l n đ u tiên sau khi kh i t o đ i t ng, tr c khi vào
Update.
ượ ọ ỗ ụ + Update(): Đ c g i liên t c sau m i frame, sau Start.
ượ ọ ụ ộ ườ + OnWillRenderObject(): Đ c g i liên t c sau m t frame sau Update. Th ng
ụ ế ẽ thì ta s ít đ ng đ n hàm này.
ượ ọ ố ượ + OnDestroy(): Đ c g i khi đ i t ỷ ị ng b hu .
ể ồ Bi u đ :
ẽ ượ ể ộ ộ Ta có th khai báo các thu c tính trong file script, các thu c tính này s đ c
ể ị ở ử ổ hi n th c a s Inspector
~ 33 ~
ố ớ ể ấ ộ ỏ ọ Đ i v i thu c tính là GameObject chúng ta có th nh n vào nút đ , sau đó ch n
ố ượ ở ả ệ prefabs cho đ i t ng ớ b ng m i hi n ra.
ộ ố ử ơ ả e2. M t s x lý c b n
ố ượ ậ ệ ạ Truy c p vào đ i t ng game hi n t i thông qua this.gameObject
ỉ ệ ố ượ ổ ị Thay đ i v trí, t l , quay đ i t ng thông qua
gameObject.transform(.position, .scale, .rotate)
ỷ ộ ố ượ ể Đ hu m t đ i t ng game Destroy(GameObject) (*)
ể ạ ự ộ Đ t o m t prefab trong quá trình th c thi game: Instantiate(gameObject,
Vector3, Quaternion)
ể Input.GetKeyDown(keyCode), GetKey(keyCode), GetKeyUp(keyCode) ki m tra
ượ ấ ượ ả ộ xem m t key đ c b m, đ c gi ữ ượ , đ c th ra hay không ?
ị ố ự ả ề ế ả ự Input.GetAxis ("Horizontal") tr v giá tr s th c trong kho ng 1..1 n u có s
ệ ặ ượ ấ ki n các key right ho c left đ c b m (key ngang).
ị ố ự ả ề ế ả ự Input.GetAxis ("Vertical") tr v giá tr s th c trong kho ng 1..1 n u có s
ệ ặ ượ ấ ki n các key up ho c down đ ọ c b m (key d c).
ử ộ OnMouseDown, OnMouseUp, OnMouseDrag các hàm x lý chu t.
gameObject.GetComponent
ệ ạ ể đính kèm trong gameObject hi n t i có th là: Animator, Transform ...
~ 34 ~
ầ ậ ử ạ 2.2. Thành ph n v t lý và x lý va ch m
ầ ậ 2.2.1. Thêm thành ph n v t lý
ỗ ợ ề ậ ư ụ ự ự ầ ậ ọ Thành ph n v t lý h tr các thao tác v v t lý nh : tác d ng l c, tr ng l c
ấ trái đ t, ma sát...
ư ể ầ ậ ở ố ượ ọ Đ thêm thành ph n v t lý ta làm nh sau: Hierarchy, ch n đ i t ng
ố ượ ầ MainCharacter (đ i t ng c n thêm) / Menu /Component / Physics 2D /
Rigidbody 2D.
ẽ ấ ở ử ổ ố ượ ọ ẽ ộ Ta s th y c a s Inspector khi ch n đ i t ng MainCharacter s thêm m t
ư ữ Component n a là Rigidbody 2D nh sau:
ị ầ ư ộ ố M t s giá tr c n l u ý sau:
ố ượ Mass: là kh i l ng c a đ i t ủ ố ượ ng
ủ ậ ố ớ ệ ố ể ộ Linear Drag: H s ma sát c a v t đ i v i chuy n đ ng kéo.
ủ ậ ố ớ ệ ố ể ộ Angular Drag: H s ma sát c a v t đ i v i chuy n đ ng quay
ư ệ ố ỉ ự ả ậ ố ưở Gravity scale: gi ng nh h s G trong v t lý (~ 9.81), ch s nh h ủ ự ng c a l c
ể ặ ứ ấ ả ưở ở ự ấ hút trái đ t. Ta có th đ t = 0, t c là không nh h ng b i l c hút trái đ t.
~ 35 ~
ỏ ố ượ ạ ỏ ụ ậ ườ ử ụ ớ Is Kinematic: lo i b tác d ng v t lý ra kh i đ i t ng, th ng s d ng v i các
ư ườ ố ượ đ i t ng nh t ề ng, n n ...
ố ượ ằ ổ ộ ươ Fixed Angle: Đ i t ố ị ng luôn n m m t góc c đ nh. Không thay đ i khi t ng
ậ tác v t lý.
ươ rigidbody2D.AddForce(Vector2 force, ForceMode2D mode): ph ứ ng th c tác
ộ ự ố ượ ụ d ng m t l c vào đ i t ng.
ẽ ấ ể ầ ậ ố ấ Sau khi thêm thành ph n v t lý vào, nh n nút play đ xem demo, ta s th y đ i
ượ ố t ng s t ẽ ừ ừ ơ t r i xu ng (do Gravity scale > 0).
ươ ự ố ượ ẽ ầ ậ ặ ộ T ng t , ta s thêm thành ph n v t lý cho đ i t ng Ground, và đ t thu c tính
ề ể cho nó là Is Kinematic đ làm n n.
ầ ử ạ 2.2.2. Thành ph n x lý va ch m
ố ượ ọ ố ượ ầ Ở * Hierarchy, ch n đ i t ng MainCharacter (đ i t ng c n thêm) / Menu
ể /Component / Physics 2D / Circle Collider 2D ( ta cũng có th chon Collider
khác ).
ố ượ ế ọ ộ ể ạ ị ỉ Thu c tính: Is Trigger: n u ch n thì đ i t ng ch dùng đ xác đ nh va ch m mà
ưở ậ ở ả không nh h ộ ng b i tác đ ng v t lý.
ươ ườ ử ụ ườ *3 ph ứ ng th c th ng x d ng trong tr ợ ng h p này:
~ 36 ~
ươ ẽ ặ ậ void FixedUpdate():> Các tính toán, t ng tác v t lý, chúng ta s đ t trong
ụ ư hàm này, ví d nh AddForce, etc.
void OnCollisionEnter2D(Collision2D other):
ượ ọ ố ượ > Hàm này đ c g i khi có hai đ i t ạ ng va ch m nhau.
void OnTriggerEnter2D(Collider2D other)
ượ ọ ố ượ ạ > Hàm này đ c g i khi có hai đ i t ng va ch m nhau, trong đó có 1 ho c c ặ ả
ố ượ hai đ i t ng là Trigger.
ử ệ ứ ể 2.3. X lý Text, hi u ng trong game và ơ chuy n màn ch i
ử ụ 2.3.1. S d ng Text
ọ Trên thanh Menu ch n GameObject/ UI / Text.
ủ ư ộ Thu c tính c a Text nh hình sau:
~ 37 ~
ử ụ 2.3.2. S d ng Particle System
ậ ạ ệ ứ ữ ộ ổ ỹ Particle System là m t trong nh ng k thu t t o ra các hi u ng cháy n hay
ươ ượ ử ụ ấ ườ ạ s ng, khói... đ c s d ng r t th ể ng xuyên trong game. Các b n có th
ể ề ể ạ google đ tìm hi u thêm v Particle system và cách t o Particle System.
T oạ Particle System ta ch nọ GameObject/ Particle System.
ặ ị ệ ứ ẵ Hi u ng m c đ nh có s n trong Unity:
~ 38 ~
ộ ố ủ ộ M t s thu c tính c a Particle System:
ơ ể ổ 2.3.3. Chuy n đ i màn ch i
ề ả ẽ ề ặ ấ ộ ộ ơ Trong m t game s có nhi u màn ch i, ho c nhi u c nh game, l y m t ví
ố ượ ặ ế ẽ ế ơ ố ả ụ ơ d đ n gi n khi đ i t ng r i xu ng (ho c h t máu hay gì đó) thì game s k t
ệ ẳ ạ thúc và hi n ra màn hình thông báo là Game Over ch ng h n.
ệ ạ ầ ư Đ u tiên ta l u scene hi n t i :
~ 39 ~
ể ả Đ qu n lý các scene ta vào File/ Build Settings
ộ ử ổ ớ ệ ọ M t c a s m i hi n ra, ta ch n Add Current.
~ 40 ~
ắ ử ổ ớ ạ ạ ư ạ ớ ế ệ ộ ớ T t c a s m i hi n ra, ti p theo các b n t o m i m t Scenes, l u l i v i tên là
GameOver
~ 41 ~
ạ ớ ạ Save l i và vào File/ Build Setting add Currenst scene m i t o là GameOver vào.
ử ổ ơ ể Code x lý chuy n đ i màn ch i:
ươ ứ ể ể ể ử ụ Ta có th s d ng 2 ph ng th c sau đ chuy n scene sau :
~ 42 ~
public static void LoadLevel(int index);
public static void LoadLevel(string name);
Ví d :ụ
Application.LoadLevel(1);
Application.LoadLevel(“GameOver”).
ệ ạ ớ ể ử ụ ả *V i phiên b n Unity hi n t i ta có th s d ng SceneManager.LoadScene thay
ế th cho Application.LoadLevel.
ộ ố ơ ở ữ ệ 2.4. M t s c s d li u trong game Unity
2.4.1. PlayerPrefs
ượ ỗ ợ ể ậ ộ ớ PlayerPrefs là m t l p tĩnh (static class) đ c Unity h tr đ l p trình viên có
ể ư ữ ấ ở ữ ầ th l u tr và truy xu t thông tin ơ nh ng l n ch i khác nhau ở ạ key/value. d ng
ụ ư ữ Ví d : L u tr thông tin:
1. PlayerPrefs.SetString("username", "PhamNgocPhuoc");
2. PlayerPrefs.SetString("password", "stdio1235");
3. PlayerPrefs.SetInt("level", 10);
ử ụ ể ấ ữ ệ Đ truy xu t các d li u trên ta s d ng:
1. String _userName = PlayerPrefs.GetString("username");
2. String _password = PlayerPrefs.GetString ("password");
3. Int _level = PlayerPrefs.GetInt("level");
ộ ố ươ ứ ỗ ợ M t s ph ng th c h tr
ấ ả ị Xóa t t c các key và giá tr đã đ ượ c DeleteAll
ữ ư l u tr . ụ ể ộ DeleteKey Xóa m t key c th .
~ 43 ~
ả ề ị ươ ứ ớ Tr v giá tr float t ng ng v i GetFloat
ế ả ề i. ươ ứ ị ớ ồ ạ key n u key t n t Tr v giá tr int t ng ng v i key GetInt i.
ươ ứ ớ ế ồ ạ n u key t n t ị ả ề Tr v giá tr string t ng ng v i GetString i.
ồ ạ ế HasKey
ế key n u key t n t ả ề ồ ạ Tr v true n u key t n t i. ỉ ữ ấ ả ữ ệ ượ ư c ch nh t c d li u đ L u tr t Save
ộ ị ữ ố s a xu ng đĩa. ớ ư L u giá tr float theo key vào b nh SetFloat
ộ ị chính. ớ ư L u giá tr int theo key vào b nh SetInt
ị chính. ộ ư L u giá tr string theo key vào b SetString ớ nh chính.
ứ ộ ả ậ ấ M c đ b o m t : Th p.
2.4.2. SimpleJSON
ố ớ ứ ạ ữ ệ ự ầ ữ Đ i v i nh ng d li u có tính ph c t p cao thì SimpleJSON chính là s c n
ế ể thi ế t đ thay th PlayerPrefs.
ệ ệ ễ ậ ở SimpleJSON làm cho vi c parse và build JSON tr nên thu n ti n và d dàng
ỗ ợ ề ề ạ ị ơ h n, h tr nhi u JSONTypes khác nhau và nhi u lo i giá tr khác nhau(boolean,
int, float, string…).
ữ ệ ừ ẵ Parse d li u t JSON có s n:
~ 44 ~
1 var jsonNode = JSONNode.Parse("{\"achievements\": [1, 2, 3]}");
2 List
3 for (int j = 0; j < jsonNode["achievements"].Count; ++j)
4 {
5 achievements.Add(jsonNode["achievements"][j].AsInt);
6 }
ữ ệ ừ ượ Parse d li u t JSON string đã đ c base64:
var jsonNode = JSONNode.LoadFromBase64("{\"achievements\": [1, 2, 3]}"); 2 List
ừ Build JSON t string data:
var jsonObj = new JSONClass(); 1
2
for (int i = 0; i < achievements.Count; ++i) 3
4 {
5
jsonObj["achievements"][i].AsInt = (int)achievements[i]; 6
7
8 }
9 string ret = jsonObj.SaveToBase64();
~ 45 ~
ứ ộ ả ậ M c đ b o m t : khá cao.
ữ ướ ạ ư 2.4.3. L u tr d i d ng file
ể ử ụ ề ể ượ ỹ Chúng ta xài C# đ , s d ng các k năng v thao tác file là có th làm đ c
ề đi u này.
ộ ổ ứ ả M t cách t ạ ch c file ngày nay hay dùng là d ng XML, nó làm tăng kh năng
ấ ỳ ữ ệ ể ế ấ ạ ợ ị đ nh d ng d li u, r t phù h p cho game. Cách này ko th thi u trong b t k trò
game nào.
ượ ề ổ ứ ữ ệ ả ấ ủ ể ằ Nh c đi m c a nó là khó nh n v t th c d li u, truy xu t và b o trì data
ố ượ kh i l ớ ng l n.
ử ụ 2.4.4. S d ng SQLite
ể ặ ễ ệ ợ ớ Vi c tích h p SQLite vô cùng d dàng, ta có th đ t database này đi kèm v i
ấ ữ ệ ữ ữ ệ ư ặ ể project game hay đ t nó trên server đ truy xu t d li u và l u tr d li u.
ữ ệ ộ ớ ụ ử ớ ớ Ư ể u đi m: X lý v i các d li u v i game có đ l n trung bình, vài ch c M
ầ ợ ớ ế ệ data. Thích h p v i các game trên iOS và Android yêu c u ti ộ ớ t ki m đ l n vì nó
ấ ữ ệ ử ụ ồ ộ ữ ủ ễ không đ s . Truy xu t d li u s d ng ngông ng SQL c a Microsoft nên d
dàng v c.ọ
ượ ể ượ ở ộ ề ầ ậ ả Nh c đi m: Tính năng đang đ c phát tri n và c n m r ng thêm, b o m t
ư ượ ư ch a đ c cao nh SQL server.
ư ữ ằ 2.4.5. L u tr b ng MySQL
ụ ứ ệ ề ả ị Đây là h qu n tr CSDL quan h , đ ệ ượ ượ ứ c đ c ng d ng khá nhi u trong ng
ớ ụ d ng đi kèm v i nó là PHP và Java.
~ 46 ~
Ư ể ố ộ ữ ệ ử ủ ộ ợ ớ u đi m c a nó là t c đ nhanh và linh đ ng trong x lý d li u. Phù h p v i
ứ ữ ệ ể ậ ế ử các game server client, nó là server ch a d li u đ các client truy c p đ n x
ườ ể ằ ạ ớ lý. Thông th ng xài webservice b ng PHP đ thao tác v i CSDL lo i này. Phù
ầ ữ ệ ớ ạ ớ ợ h p v i game online d ng webgame, hay các game c n d li u l n.
ượ ư ể ể ể ậ ợ Nh c đi m: Không th tích h p trong client nh SQLite, v y nên ko th xài
ạ ớ game offline v i lo i này.
ư ữ ữ ệ ớ 2.4.6. L u tr d li u v i SQLserver
ố ượ ệ ệ ả ị ứ ữ Đây là h qu n tr CSDL quan h và đ i t ạ ng. Nó có s c m nh ngôn ng SQL
ả ố ộ ử ữ ệ ả ả ậ và đ m b o t c đ x lý d li u cao, an toàn và b o m t cao.
ữ ệ ớ Ư ể ễ ả ấ ố u đi m: D li u l n và an toàn, d b o trì và nâng c p database (gi ng
ầ ữ ệ ớ ợ ớ ườ MySQL). Phù h p v i các game c n d li u l n và an toàn cao. Thông th ng
ệ ố ữ ệ ầ ừ ử ậ ậ do server truy c p và x lý d li u. H th ng server này nh n các yêu c u t
ề ạ ả ử ệ ế ớ phía client và truy n l i client k t qu x lý. Vi c thao tác v i SQLserver khá d ễ
ệ ề ườ ề ệ dàng v công ngh , thông th ng ta dùng .Net đ làm vi c này.
ượ ể ợ ỉ ượ Nh c đi m: Ch thích h p các game online, không xài đ c cho game offline.
ươ ớ Ch ng 3. Làm game v i Unity Engine
ớ ự ệ ệ 3.1. Gi i thi u game đang th c hi n
ộ 3.1.1. N i dung Game:
ớ ậ ể ạ ể ế ề ấ Đi u khi n máy bay chi n đ u v i v t th l ( UFO )
3.1.2. Cách ch i:ơ
ử ụ ươ ứ ể ể ả S d ng các phím A,D,W,S t ng ng đ di chuy n sang trái, ph i, lên trên,
ướ ố xu ng d i.
ể ắ ạ Phím Space đ b n đ n.
~ 47 ~
ỗ ị ớ ị ệ ạ ẽ ậ ượ ể ờ V i m i đ ch b tiêu di t b n s nh n đ c 100 đi m, game có tính th i gian
ấ ẽ ượ ế ế ơ ờ ư ể ơ ch i sau khi k t thúc trò ch i th i gian chi n đ u s đ c tính nh đi m th ưở ng
ể ớ v i 1s = 1 đi m.
ạ ượ ố ể ạ ẽ ượ ể ớ Khi đ t đ ấ ị c s đi m nh t đ nh b n s đ c chuy n sang màn đánh v i Boss,
ệ ể ưở ẽ ượ ờ sau khi tiêu di t boss đi m th ng ( th i gian ) s đ ớ ố c nhân đôi cùng v i s
ể ệ ặ ị ể đi m tiêu di t m c đ nh là 1000 đi m.
ộ ố ề ả 3.1.3. M t s hình nh v game:
ở ộ *Màn kh i đ ng
ồ + G m 4 nút:
ế ơ ể New game : chuy n đ n màn ch i 1.
ể ể ế ạ ả ố LeaderBoard: click vào nút này ta có th xem b ng x p h ng đi m s
ườ ng ơ i ch i.
Game Info: Thông tin v game, h
ề ướ ẫ ơ ng d n cách ch i.
~ 48 ~
Exit: Thoát kh i trò ch i.
ỏ ơ
ử + Code x lý khi click button:
Chuy n màn ch i:
ể ơ
ụ Ví d : Application.LoadLevel(“ingame01”) hay Application.LoadLevel(1);
ệ ạ ủ ế ả ớ => V i phiên b n hi n t i c a Unity (5.4) khuy n khích dùng
SceneManager.LoadScene(string name) or SceneManager.LoadScene (int index),
ể ử ụ ư ệ ả và đ s d ng ta ph i khai báo th vi n : using UnityEngine.SceneManagement;
Thoát game: Application.Quit();
*Màn 1:
~ 49 ~
ử ể ề + Code x lý đi u khi n game:
Di chuy n Player v i 4 phím A, D, W, S ( trái, ph i, trên, d
ể ả ớ ướ ắ i ) và b n
ớ ạ đ n v i phím space ( phím cách ):
ư ở ầ ươ ụ ứ *Chú thích: Nh đã nói ph n trên các ph ng th c áp d ng:
ấ ữ ể ự Input.GetKey: Nh n và gi đ th c thi.
ỉ ầ ấ Input.GetKeyDown: Ch c n nh n nút.
ấ ồ ả Input.GetKeyUp: Nh n r i th .
Đi u khi n AI t
ề ể ự ộ ượ ở ạ ắ đ ng đ c kh i t o, bay và b n:
ở ạ Kh i t o:
~ 50 ~
(cid:0) InvokeRepeating( string name, float timebegin, float timedelay):
ề ầ ắ ầ ự ớ ờ ờ Th c thi nhi u l n 1 hàm v i th i gian b t đ u ( timebegin ) và th i
ể ự ế ầ ố gian trì hoãn đ th c thi ti p ( timedelay ), tham s name là tên hàm c n
ự th c thi.
(cid:0) Instantiate( GameObject object, Vector3 position, Quaternion
rotation):
ố ượ ạ ớ ị ị ỉ ả Hàm t o b n sao 1 đ i t ố ng v i v trí và xoay ch đ nh theo tham s .
ố ượ ầ ạ ả Object: đ i t ng c n t o clone ( b n sao).
ở ạ ầ ị Position: v trí c n kh i t o.
Rotation: góc xoay.
(cid:0) AI di chuy n và t o đ n: ể
ạ ạ
~ 51 ~
Transform.Translate( Vector3 transition): di chuy n 1 đ i t
ố ượ ể ng theo
ướ ố ộ ế h ng nào đó, bi n speed * Time.deltaTime chính là t c đ di
ự ể ằ ờ chuy n trên th i gian th c tính b ng giây.
ặ Destroy(this.gameObject) ho c Destroy(gameObject): h y đ i t ủ ố ượ ng
ề ệ ớ ắ g n script này v i 1 đi u ki n nào đó .
Hàm Instantiate
ở ủ ạ ạ ị ể ạ ả trên đ t o b n sao c a đ n t i v trí và góc xoay
ủ ị c a đ ch (AI).
Chú ý: Nh ng đ i t
ố ượ ữ ầ ạ ả ạ ả ố ng c n t o b n sao ph i t o Prefabs cho đ i
ượ ườ ố ượ ề ầ ệ ấ t ng đó, th ữ ng là nh ng đ i t ng xu t hi n nhi u l n trong
game.
Đ AI b n đ n v phía ng
ể ề ắ ạ ườ ơ ầ ử ố ộ ướ i ch i c n x lý t c đ và h ạ ng đ n:
~ 52 ~
GameObject player = GameObjec.Find(“Player”): tìm ki m đ i
ế ố
Direction = player.transform.position – transform.position: bi n ế
ượ ể ế ớ t ng v i tên Player và gán nó cho bi n player đ thao tác.
ể ậ ị ướ ừ ị ẽ direction ki u Vector3 s nh n giá tr là 1 vector h ng t v trí AI
ườ ế đ n ng ơ i ch i.
Ở ệ ắ ẽ ự ạ ướ trên hàm Update() s th c thi vi c b n đ n theo h ng vector
ố ộ ớ ớ ờ direction v i speed*Time.deltaTime ( t c đ nhân v i th i gian
th c).ự
Time.deltaTime : tr v th i gian game b t đ u đ n khi k t thúc
ả ề ờ ắ ầ ế ế
ả ề ơ ự ố ờ ị frame cu i cùng, tr v đ n v là giây theo th i gian th c.
ị ờ ạ ị ể Đ nh d ng hi n th th i gian:
~ 53 ~
ả ề ủ ể ị SceneManager.GetActiveScene().buildIndex: tr v giá tr index ki u int c a
ệ ạ scene hi n t i.
*Màn Boss:
Khi chuy n t
ể ừ ố ượ ẽ ị ủ ộ 1 scene sang m t scene khác đ i t ng s b h y, vì th đ ế ể
ố ượ ể ế chuy n các đ i t ầ ng c n thi t sang màn boss này ta dùng hàm:
~ 54 ~
DontDestroyOnLoad(gameObject);
Ở ử ệ ả ầ ữ màn boss này có 1 x lý khá khó n a mà em c n tham kh o đó là vi c
void Update () {
Vector3 currentposition = Vector3.Lerp(upposition.position,
downposition.position,Mathf.Cos(Time.time/Traveltime*Mathf.PI*2) * -.5f+.5f);
GetComponent
}
ể ầ ố boss di chuy n lên xu ng tu n hoàn:
Vector3.Lerp(): hàm cho phép ta di chuy n gi a 2 đi m.
ữ ể ể
Đo n code trên ta c n kh i t o 2 đ i t
ở ạ ố ượ ầ ạ ng là Upposition và downposition
ớ ạ ể ể làm đi m gi i h n di chuy n trên d ướ ủ ố ượ i c a đ i t ng.
Ta có th tăng ho c gi m t c đ di chuy n qua tham s Traveltime,
ố ộ ể ể ả ặ ố
ố ượ ớ ể ậ traveltime càng l n đ i t ng di chuy n càng ch m.
*Màn thua:
~ 55 ~
Sau khi ch s thanh HP c a ng
ỉ ố ủ ườ ơ ẽ i ch i = 0 thì sau vài giây s
ể chuy n qua màn này.
Đi m chính trong scene này là vi c l u tên, tính t ng đi m c a
ệ ư ủ ể ể ổ
ườ ơ ớ ế ạ ng i ch i v i nút Save scores. Vì PlayerPrefs có h n ch trong
ệ ư ữ ệ ẽ ư ữ ướ ữ ữ vi c l u tr và load d li u gi a các màn nên ta s l u tr d i
ạ d ng File.
~ 56 ~
(cid:0) ạ ớ T o 1 class tĩnh SaveLoadinfo v i 2 hàm Save() và Load() , 1 List
ứ ườ ể ơ ố tĩnh ch a thông tin ng i ch i ( tên, đi m s ).
(cid:0) V i vi c thêm t ệ
ớ ừ ậ ể khóa static( tĩnh) giúp cho l p trình viên có th
ủ ế ấ ừ truy xu t các bi n và hàm c a class này t 1 class khác.
(cid:0) Hàm Save(): Kh i t o và ghi d li u vào file.
ữ ệ ở ạ
(cid:0) Hàm Load(): Ki m tra xem file có t n t
ồ ạ ể ế ữ i ko, n u có thì load d
ư ế ệ ạ li u ra và gán cho 1 bi n nào đó, đo n code trên ta l u vào1 list lên
ầ ị khi load c n gán giá tr cho list đó.
(cid:0) ố ượ ớ ủ ườ L p scoreinfo là 1 đ i t ứ ng c a list ch a thông tin ng ư ơ i ch i nh :
ố ể tên, đi m s .
ế ắ *Màn khi chi n th ng:
~ 57 ~
ử ươ ự ư ệ ứ ư ớ ỉ Cách x lý t ng t ệ ử nh màn thua ch thêm hi u ng nh pháo hoa v i vi c s
ụ d ng Particle system.
ạ ả ế *B ng x p h ng:
~ 58 ~
ề ơ ở ữ ệ ữ ử ầ ọ ữ Nh ng x lý quan tr ng trong ph n này là v c s d li u, cách load d
ệ ừ ế ả ạ ườ ể ơ li u t file ra b ng, x p h ng ng ố i ch i theo đi m s .
ể ả ướ ế ầ ữ ệ ọ ữ ệ Đ show d li u ra b ng thì tr c h t c n có d li u, ta g i hàm Load()
ủ c a class SaveLoadinfo:
SaveLoadinfo.Load().
X p h ng ng
ế ạ ườ ể ơ ố i ch i theo đi m s :
ữ ệ ư ứ ự ễ ế ắ Vì d li u l u vào là 1 list nên ta có hàm Sort() d dàng s p x p th t các
ệ ề ố ượ đ i t ng trong list theo 1 đi u ki n nào đó.
ỉ ượ ố ượ ự Hàm Sort() ch đ ệ c th c hi n khi đ i t ng là class scoreinfo thêm
ị ứ ị ầ ẽ ớ ượ IComparable, hàm này s so sánh giá tr đ u tiên v i giá tr th 2 đ c thêm vào
ơ ẽ ượ ế ớ ị ướ và giá tr nào l n h n s đ c x p lên tr c.
~ 59 ~
ụ ề 3.2. M c tiêu đ tài .
ắ ượ ộ ố ử ử ụ ơ ả ượ ạ ắ Đã n m b t đ c m t s x lý c b n trong Unity và s d ng đ c 2 lo i
ữ ạ ư l u tr database trong bài là: PlayerPrefs và d ng file.
ụ M c tiêu :
ế ử ụ ể ề ạ ơ + Bi t s d ng nhi u lo i database h n đ làm game trên Unity, nâng cao
ệ ứ ử ả x lý các hi u ng trong game : âm thanh, hình nh…
ể ạ ề ể + Có th làm nhi u th lo i game 2D, 3D trên Unity.
ệ ả 3.3. Tài li u tham kh o
ộ ố ả * M t s link tham kh o :
http://unity3d.com/learn/tutorials
http://docs.unity3d.com/ScriptReference/
~ 60 ~
http://www.stdio.vn/articles/read/317/luutruthongtingamevoiplayerprefs
http://share3dvn.blogspot.com/2011/12/unitynangcaop5database.html
~ 61 ~
ế
ậ
K t Lu n
ớ ự ể ế ế ớ ầ ả Cùng v i s phát tri n kinh t ộ ủ , xã h i c a th gi i đó là nhu c u gi i trí
ủ ườ ầ ộ ả ơ ngày càng cao c a con ng ữ i. M t trong nh ng nhu c u gi i trí đó là ch i game,
ứ ộ ả ọ ứ ẳ ả ổ ỗ m t hình th c gi ữ i trí dành cho m i l a tu i nh ng lúc r nh r i hay căng th ng
vì công vi c. ệ
ữ ậ ườ ứ ể ớ Là 1 l p trình viên hay nh ng ng i có h ng thú v i game nên tìm hi u
ấ ướ ề ẽ ố và làm ra 1 game mà mình mong mu n, đi u này s giúp cho đ t n c ngày
ề ế ư ườ ể càng phát tri n v kinh t và t ủ duy c a con ng i.
~ 62 ~

