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 ..............................................4­6

ươ ớ ườ 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 ..........7­29

ầ ậ ử 2.2. Thành ph n v t lý và x  lý va ch m ạ ..........................................29­31

ử ệ ứ ể 2.3. X  lý Text, hi u  ng trong game và chuy n màn ch i ơ ............32­35

ộ ố ơ ở ữ ệ 2.4. M t s  c  s  d  li u trong game Unity ....................................36­40

ươ ớ Ch ng 3. Làm game v i Unity Engine ......................................................41

ớ ự ệ 3.1. Gi i thi u game đang th c hi n ệ .................................................41­43

ụ 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.

ư ụ ở ử ổ ọ Right­Click 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, Right­Click 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() get Game Component đ c ượ

ệ ạ ể đí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 achievements = new 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 achievements = new List(); 3 for (int j = 0; j < jsonNode["achievements"].Count; ++j) 4 { 5 achievements.Add(jsonNode["achievements"][j].AsInt); 6 }

ừ ­ 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().MovePosition(currentposition);

}

ể ầ ố 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/luu­tru­thong­tin­game­voi­playerprefs

http://share3dvn.blogspot.com/2011/12/unity­nang­cao­p5­database.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 ~