Tài liệu hướng dẫn làm quen với Unity.Unity là một công cụ phát triển game được phát triển bởi độ ngũ kĩ thuật Unity.Unity hỗ trợ xuất bản nhiều platforms từ stand alone cho PC và Mac, mobile như iOS và Android, console như PS3, XBOX360, Wii đến các phiên bản chạy trực tiếp trên web nhờ Unity Web Player.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN II
NIÊN KHÓA: 2012 - 2017
Đề tài:
PHÁT TRIỂN GAME ĐA NỀN TẢNG TRÊN UNITY
Môn: Nhập môn công nghệ phần mềm Giáo viên hướng dẫn: TS Võ Xuân Thể Tên sinh viên: Lê Văn Ninh
Mã sinh viên: N12DCCN032 Lớp: D12CQCN01-N
Tháng 10/2014
Trang 2Mục lục
1 GIỚI THIỆU: 3
2 CÀI ĐẶT: 3
3 ĐẶC ĐIỂM VƯỢT BẬC CỦA UNITY: 3
3.1 Hỗ trợ kéo thả: 3
3.2 Hỗ trợ chế độ xem màn hình thật của game: 4
3.3 Hỗ trợ chế độ chơi thử: 5
3.4 Hỗ trợ các yếu tố Vật lí: 5
3.5 Hỗ trợ xây dựng game trên nhiều nền tảng: 6
3.6 Sử dụng nhiều ngôn ngữ để lập trình: 7
4 CÁC KHÁI NIỆM CƠ BẢN TRONG UNITY: 7
4.1 Game Object: 7
4.2 Component: 7
4.3 Sprite: 7
4.4 Animation: 8
4.5 Key Frame: 8
4.6 Prefab: 8
4.7 Sound: 9
4.8 Script: 10
4.9 Scene: 11
4.10 Assets: 12
4.11 Camera: 12
5 CÁC VÙNG CHỨC NĂNG TRONG UNITY: 13
5.1 Hierarchy: 13
5.2 Scence: 13
5.3 Game : 13
5.4 Inspector: 13
5.5 Project: 13
5.6 Console: 13
6 TẠO DỰ ÁN VÀ CẤU HÌNH DỰ ÁN: 14
Trang 36.2 Cấu hình dự án game 2D: 15
6.2.1 Điều chỉnh góc chiếu của camera: 15
6.2.2 Tạo thư mục: 16
7 TẠO CÁC ĐỐI TƯỢNG CƠ BẢN: 17
7.1 Game Object: 17
7.1.1 Empty Object: 17
7.1.2 Parent Object và Child Object: 18
7.2 Tag: 19
7.3 Sprite: 21
8 ANIMATION: 26
8.1 Các kĩ thuật toán Animation: 26
8.1.1 Kỹ thuật key frame: 26
8.1.2 Kỹ thuật bộ xương: 27
8.2 Tạo animation theo kỹ thuật Key Frame: 28
9 SCRIPT: 32
9.1 Cách tạo Script: 32
9.2 Một số xử lý cơ bản: 36
10 THÀNH PHẦN VẬT LÝ: 36
11 THÀNH PHẦN XỬ LÝ VA CHẠM: 38
12 TEXT: 40
13 CHUYỂN ĐỔI MÀN CHƠI: 43
14 BUILD GAME: 46
15 TÀI LIỆU THAM KHẢO: 49
Trang 41 GIỚI THIỆU:
Unity là một công cụ phát triển game được phát triển bởi độ ngũ kĩ thuật Unity Unity hỗ trợ xuất bản nhiều platforms từ stand alone cho PC và Mac, mobile như iOS và Android, console như PS3, XBOX360, Wii đến các phiên bản chạy trực tiếp trên web nhờ Unity Web Player
2 CÀI ĐẶT:
Unity phiên bản mới nhất tính đến thời điểm 19/10/2014 là bản 4.5.1 , được phát hành dưới dạng 2 phiên bản :
- Unity miễn phí có thể tải trực tiếp từ trang http://unity3d.com/unity/download
- Unity Pro : bản thương mại, có giá 1500 USD
Ảnh 2.1: Trang chủ của Unity
3 ĐẶC ĐIỂM VƯỢT BẬC CỦA UNITY:
Trang 5Ảnh 3.1.1: Khả năng kéo thả trong Unity
3.2 Hỗ trợ chế độ xem màn hình thật của game:
Unity hỗ trợ chúng ta vùng nhìn có tên là Game, vùng này giúp ta nhìn trước những đối tượng sẽ được bố trí như thế nào trên màn hình thật sự của thiết bị Điều này thật
sự hữu ích khi ta không cần phải tưởng tưởng hay kiểm thử giao diện trên thiết bị thật
Ảnh 3.1.2: Vùng xem trước game
Trang 6Unity xây dựng sẵn các thuộc tính Vật lí như trọng lực, lực kéo, lực ma sát, gia tốc
để chúng ta thêm vào các đối tượng
Ví dụ: Như trong ảnh ta thấy khi thuộc tính Gravity Scale = 1, tức là vật sẽ chịu tác động của trọng lực với gia tốc trọng trường g = 1 Khi đó, ở chế độ chơi game, ta sẽ thấy vật bị rơi
Trang 7Ảnh 3.1.4: Minh họa tác nhân trọng lực được hỗ trợ trong Unity
3.5 Hỗ trợ xây dựng game trên nhiều nền tảng:
Unity hỗ trợ xuất bản nhiều nền tảng như : trên máy tình thì có PC và Mac, mobile như iOS và Android, console như PS3, XBOX360, Wii đến các phiên bản chạy trực tiếp trên website
Điều này giúp tiết kiệm công sức khi ta không phải tạo nhiều dự án khác nhau để đáp ứng cho từng nền tảng
Ảnh 3.1.5: Các nền tảng mà Unity hỗ trợ
Trang 83.6 Sử dụng nhiều ngôn ngữ để lập trình:
Unity hỗ trợ 3 ngôn ngữ để lập trình là C Sharp , Java Script và Boo C Sharp thích hợp cho những nhà lập trình ứng dụng khi mới làm quen với Unity, còn Java Script thích hợp cho những ai đã từng học qua lập trình web Boo là ngôn ngữ được phát triển bởi chính Unity
4 CÁC KHÁI NIỆM CƠ BẢN TRONG UNITY:
Trang 9Key Frame hay Frame là một trạng thái của một animation
Ảnh 4.3: Key Frame trong thiết kế Animation
4.6 Prefab:
Prefab 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
Trang 10Có thể hiểu đơn giản hơn,Prefab là một đối tượng được tạo ra để xem như mẫu, khi tạo nhiều đối tượng giống nhau, thay vì phải làm lại từ đầu, ta dùng mẫu này để khởi tạo đối tượng giống nhau này
Ví dụ: Trong game Flappy Bird, hỉnh nền của đất và bầu trời sẽ liên tục lặp lại.Các đối tượng này đều có xử lý giống nhau, nên ta chỉ việc tạo ra một đối tượng ban đầu
và chọn làm Prefab, các vật còn lại sẽ sử dụng Prefab đã tạo
Ảnh 4.4: Sử dụng Prefab cho đối tượng BG và Ground
4.7 Sound:
Âm thanh trong game Trong Unity có hỗ trợ hầu hết các định dạng âm thanh hiện nay
Trang 11Ảnh 4.5: Minh họa 1 file âm thanh trong Unity
Trang 12Ảnh 4.6: Một File C# Script trong Unity
4.9 Scene:
Scene được hiểu là một cảnh trong game Scene dùng để quản lý tất cả các đối tượng trong một màn chơi của game
Trang 13Ảnh 4.7: Hình thức lưu trữ của Unity đối với Scene
Trang 145 CÁC VÙNG CHỨC NĂNG TRONG UNITY:
Trang 156 TẠO DỰ ÁN VÀ CẤU HÌNH DỰ ÁN:
6.1 Tạo Project (dự án) mới:
Mở Unity lên, ta sẽ gặp một bảng có chức năng open project (mở dự án đã có) hoặc Creat New Project (Tạo dự án mới)
Project Location : Nơi lưu trữ dự án
Setup defaults for: Thiết lập thiết lập dự án là 2D game hay 3D game
Ảnh 6.1: Cửa sổ tạo dự án
Lưu ý: Chúng ta cũng có thể tạo project mới sau khi đang ở trong giao diện lập trình
của Unity bằng cách: từ thanh menu chọn File New Project
Trang 16Ảnh 6.2: Tạo dự án mới bằng thao tác File New Project
6.2 Cấu hình dự án game 2D:
6.2.1 Điều chỉnh góc chiếu của camera:
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ị màn hình 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 (Ảnh 6.3)
Trong đó, thuộc tính Projection quy định dạng phép chiếu Thuộc tính Projection
có 2 giá trị là Perspective (phép chiếu phối cảnh) và Orthographic (phép chiếu
vuông góc) Để làm game 2D, ta chọn dạng Orthographic cho thuộc tính Projection
Trang 17Ảnh 6.3: Điều chỉnh phép chiếu dạng chiếu vuông góc
6.2.2 Tạo thư mục:
Để quản lí dự án được dễ dàng hơn, ta cần tạo các thư mục để phân loại các tập tin
Để tạo thư mục, ta nhấn chuột phải vào vùng Project, chọn Creat Folder
Tạ cần tạo các thư mục sau:
Sprites : chứa các hình ảnh, bao gồm các đuôi định dạng như *.jpg *.jpeg, *.png Animations: chứa các tập tin chuyển động, *.anim
Scenes: chứa các cảnh game *.unity
Sounds: chứa các tập tin âm thanh , *.mp3, *.wav
Scripts: chứa các mã lệnh điều khiển, nếu viết bằng C# thì có phần mở rộng *.cs
Trang 18Ảnh 6.4: Tạo thư mục trong Unity
7 TẠO CÁC ĐỐI TƯỢNG CƠ BẢN:
7.1 Game Object:
7.1.1 Empty Object:
Empty Object có nghĩa là một đối tượng mới hoàn toàn, chưa thiết lập bất kì thuộc tính nào
Để tạo Empty Object, trên thanh menu ta chọn GameObject Create Empty
Ta có thể đổi tên, sao chép hay xoá các đối tượng bằng cách nhấn chuột phải vào đối
tượng trên thanh Hierarchy
Trang 19Ảnh 7.1: Nhấn chuột phải vào đối tượng để chỉnh sửa đối tượng
7.1.2 Parent Object và Child Object:
Parent Object (Đối tượng cha) : 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 (Đối tượng con): 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
Trang 20Ảnh 7.2: Đối tượng cha và đối tượng con trong Unity
7.2 Tag:
Tag (thẻ) là một thuộc tính của của một Game Object được sử dụng mục đích xác định và phân biệt các đối tượng với nhau
Một thẻ tag có thể dùng cho nhiều Game Object
Mặc định các đối tượng là thẻ Untagged
Để thêm tag mới cho Game Object, ta chọn đối tượng bên vùng Hierarchy (vùng
phân cấp), sau đó nhìn sang vùng Inspector ở bên phải, sau đó ấn vào Tag Add Tag
Trang 21Ảnh 7.3: Thêm tag mới
Sau đó, ta chỉ việc viết tên tag mới mà ta muốn tạo
Ảnh 7.4: Viết tên tag mới vào khung
Trang 22Để thêm vào hình ảnh vào dự án, ta chỉ việc kéo thả hình ảnh vào vùng của thẻ Project
Ảnh 7.5: Kéo thả ảnh từ ngoài vào trong dự án để sao chép ảnh
Trang 23Mặc định khi thêm hình ảnh vào, hình ảnh sẽ thuộc tính là Texture Để có thể dùng trong dự án, ta cần đổi thuộc tính ảnh về dạng Sprite Nhấp chọn hình ảnh, quan sát bên vùng Inspector, sẽ có thuộc tính : Texture Type, ta chỉnh về dạng Sprite
Ảnh 7.6: Điều chỉnh ảnh từ Texture sang Sprite
Sau chỉnh Texture type, ta thấy vùng Inspector sẽ thêm một số thuộc tính, trong đó
có Sprite Mode, bao gồm 2 giá trị : Single và Multible tương ứng với chế độ Single
Sprite hay Multible Sprite
Trang 24Ảnh 7.7: Thuộc tính Sprite Mode có 2 giá trị là Single hoặc Multiple
Ứng với Multible Sprite, do đây là tập hợp của nhiều hình ảnh nên ta cần phân chia chúng thành các ảnh nhỏ Để thực hiện, ta ấn vào nút Sprite Editor
Trang 25Ảnh 7.8: Điều chỉnh ảnh sang Mutiple và tiến hành cắt ảnh
Khi đó, một cửa sổ mới sẽ hiện lên Để thực hiện tạo các ảnh nhỏ, ta ấn Slice
Ở thuộc tính Type: ta có 2 loại Automatic (máy tính tự cắt ảnh) và Grid (cắt ảnh
theo các ô vuông mà ta định kích thước trước)
Ở đây ta chọn Automatic vì các hình ảnh con của ta sắp xếp lung tung, nên chọn chế
độ này là tốt nhất Sau đó ta ấn Slice Apply
Trang 26Ảnh 7.9: Các bước để cắt ảnh
Sau khi hoàn thành, từ ảnh gốc ban đầu, ta có được những ảnh nhỏ
Trang 278 ANIMATION:
Animation là một hình ảnh động mô tả một đối tượng nào đó trong game
8.1 Các kĩ thuật toán Animation:
8.1.1 Kỹ thuật key frame:
Đối với kỹ thuật key frame, người ta sử dụng một hình ảnh cho một key frame của hành động
Với kĩ thuật này, một animation có thể hiểu là một loạt các hình ảnh liên tiếp được phát nhanh để mắt cảm thấy vật như đang chuyển động
Trang 28Ảnh 8.1: Kĩ thuật tạo animation từ 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
8.1.2 Kỹ thuật bộ xương:
Đố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
Trang 298.2 Tạo animation theo kỹ thuật Key Frame:
Bước 1: Mở cửa sổ Animation bằng cách: ấn vào menu Window Animation
Ảnh 8.3: Mở cửa sổ Animation
Bước 2: Ta cần tạo một Game Object Để thực hiện, ta kéo sprite và thả vào vùng Scene
Trang 30Ảnh 8.4: Tạo một đối tượng bằng cách kéo thả
Bước 3: Chọn đối tượng và chuyển qua cửa sổ Animation Ấn vào vùng kí hiệu ở
ảnh dưới và chọn “Create New Clip”
Trang 31Ảnh 8.5: Tạo animation mới
Chọn nơi lưu trữ, đặt tên và lưu lại animation cần tạo
Ảnh 8.6: Lưu trữ animation
Trang 32Thêm thuộc tính Sprite cho animation bằng cách chọn Add Curve Sprite
Renderer Sprite
Ảnh 8.7: Thêm thuộc tính Sprite
Khung kịch bản sẽ hiện ra, ta tiến hành kéo thả các hình ảnh cần trong animation vào các mốc thời gian
Lưu ý: Ta có thuộc tính Sample là số khung hình trong 1 giây
Trang 33Ảnh 8.8: Kéo thả từng ảnh vào từng key frame
9 SCRIPT:
9.1 Cách tạo 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 (Trong bài hướng dẫn này, chúng ta sẽ sử dụng C#)
Để tạo Script, ta nhấn chuột phải vào vùng Project và chọn Creat C# Script
Trang 34Ảnh 9.1: Tạo Script mới
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 thêm Script vào đối tượng bằng cách kéo thả Script ở vùng Project vào đối tượng ở vùng Hierarchy
Trang 35Ảnh 9.2: Kéo thả để thêm Script vào đối tượng
Để gõ mã lệnh cho file Script, ta nhấp đúp chuột vào file Script, khi đó, cộng cụ lập trình tích hợp sẵn là Mono Develop sẽ được chạy
Lưu ý: Tên file script cần trùng với tên class
Trang 36Ảnh9.3: Tên class cần trùng với tên tập tin
Mới bắt đầu chúng ta cần quan tâm đến một số hàm cơ bản sau:
+ 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ỷ
Trang 379.2 Một số xử lý cơ bản:
Truy cập vào đối tượng game hiện tại: this.gameObject
Thay đổi vị trí, tỉ lệ, quay đối tượng: 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)
Kiểm tra xem một key được bấm, được giữ, được thả ra hay không:
Input.GetKeyDown(keyCode), GetKey(keyCode), GetKeyUp(keyCode)
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.GetComponentComponentName>() get Game Component được
đính kèm trong gameObject hiện tại có thể là: Animator, Transform
10 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 cần thêm,
sau đó trên thanh menu chọn Component Physics 2D Rigidbody 2D
Trang 38Ảnh 10.1: Thêm thành phần vật lí vào đối tượng
Ta sẽ thấy ở cửa sổ Inspector khi chọn đối tượng cần thêm sẽ có một Component nữa là Rigidbody 2D như sau:
Trang 39Ảnh 10.2: Component vật lí đã được thêm vào đối tượng
- 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
- 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ý
11 THÀNH PHẦN XỬ LÝ VA CHẠM:
Để phân biệt giữa hình ảnh nền và hình ảnh dùng cho nhân vật, Unity đưa ra một khái niệm là Collider (thành phần xử lí va chạm) Collider sẽ được dùng để bắt các
sự kiện tương tác giữa các nhân vật
Ở Hierarchy, chọn đối tượng cần thêm, trên thanh menu chọn Component Physics 2D Circle Collider 2D