Khách thể và đối tượng nghiên cứu Người dùng sử dụng các thiết bị điện thoại thông minh Phần mềm Unity3D Quy trình phát triển trò chơi di động 3.. Mục đích nghiên cứu Mục đích của
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM – ĐẠI HỌC ĐÀ NẴNG
KHOA TIN HỌC
BÁO CÁO
ĐỒ ÁN TỐT NGHIỆP
TÊN ĐỀ TÀI
SỬ DỤNG THUẬT TOÁN A* ĐỂ XÂY DỰNG TRÒ CHƠI
TOWER DEFENSE BẰNG UNITY
Giảng viên hướng dẫn: TS Nguyễn Đình Lầu
MSSV: 312022131130 Lớp sinh hoạt: 13CNTT
ĐÀ NẴNG, 04/2017
Trang 2LỜI CẢM ƠN Lời đầu tiên, em xin chân thành cảm ơn quý thầy cô trong khoa Tin học cũng như các quý thầy cô đang giảng dạy và công tác tại trường Đại học Sư Phạm - Đại học Đà Nẵng đã truyền đạt những kiến thức quý báu cho chúng
em trong những năm học vừa qua
Đặt biệt, em xin chân thành cảm ơn thầy TS Nguyễn Đình Lầu và các thầy cô giáo của Khoa Tin học, Trường Đại học Sư Phạm Đà Nẵng xin cảm
ơn quý thầy cô đã tận tình dạy bảo, giúp đỡ em trong suốt thời gian em thực hiện đề tài
Và cho em được gửi lời cảm ơn đến Công Ty Gameloft chi nhánh Đà Nẵng,Công Ty Asian Tech đã tạo điều kiện cho em được tham gia thực tập tại đơn vị cũng như cung cấp tất cả các cơ sở vật chất và trang thiết bị có thể cho em trong thời gian vừa qua Xin cảm ơn các anh chị trong công ty, đặc biệt là anh Đinh Bá Trí (Công ty GameLoft), anh Trương Văn Hoàn và anh Giang Hải Anh (Công ty Asian Tech) đã tận tình hướng dẫn giúp đỡ em trong suốt thời gian chúng em tham gia thực tập
Xin trân trọng cảm ơn!
Đà Nẵng, ngày 20 tháng 04 năm 2017
Sinh viên thực hiện
Nguyễn Văn Huấn
Trang 3LỜI CAM ĐOAN
Em xin cam đoan:
1 Những nội dung trong báo cáo này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của TS Nguyễn Đình Lầu và các anh chị trong Công ty Asian Tech
2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, em xin chịu hoàn toàn trách nhiệm
Sinh viên thực hiện
Nguyễn Văn Huấn
Trang 4NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
Đà Nẵng, ngày tháng năm 2017
Cán bộ hướng dẫn
Trang 5NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN
Đà Nẵng, ngày tháng năm 2017
Hội đồng phản biện
Trang 6MỤC LỤC
LỜI CẢM ƠN 2
LỜI CAM ĐOAN 3
DANH MỤC HÌNH ẢNH 8
DANH MỤC BẢNG 9
MỞ ĐẦU 10
1 Lý do chọn đề tài 10
2 Khách thể và đối tượng nghiên cứu 10
3 Giới hạn và phạm vi nghiên cứu 10
4 Mục đích nghiên cứu 11
5 Nhiệm vụ nghiên cứu 11
6 Phương pháp nghiên cứu 11
7 Bố cục đề tài 11
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 12
1.1 Game và các thành phần cơ bản 12
1.2 Sử dụng cơ bản cho Unity 14
1.2.1 Giao diện cơ bản của Unity 14
1.2.2 Các đối tượng cơ bản 16
1.3 Hệ thống đồ họa 17
1.4 Hệ thống vật lý 18
1.4.1 Rigidbody2D 18
1.4.2 Collider2D 20
1.4.3 Joint2D 20
1.4.4 Constant Force 2D 20
1.4.5 Effectors 2D 20
1.4.6 2D Raycaster 21
1.4.7 Physic Material 2D 21
1.5 Lập trình 22
1.6 Giao diện người dùng 23
1.6.1 Canvas 23
1.6.2 Layout 24
1.6.3 Các đối tượng UI cơ bản Unity cung cấp 25
1.7 Thủ thuật tối ưu và xuất bản trò chơi lên Android 26
1.7.1 Hình ảnh 26
1.7.2 Âm thanh 26
1.7.3 Mã 27
Trang 71.7.4 Xuất bản trên nền tảng Android 27
1.8 Thuật toán tìm đường A* 28
1.8.1 Giới thiệu về thuật toán: 28
1.8.2 Ý tưởng trực quan : 28
1.8.3 Các thành phần của thuật toán : 28
1.8.4 Mô tả thuật toán : 29
CHƯƠNG 2 : PHÂN TÍCH THIẾT KẾ 38
2.1 Mục tiêu đề tài : 38
2.2 Yêu cầu chức năng : 38
2.3 Yêu cầu phi chức năng : 38
2.4 Phân tích thiết kế hệ thống : 38
2.4.1 Ý tưởng của trò chơi : 38
2.4.2 Thể loại trò chơi : 38
2.4.3 Đối tượng người chơi : 38
2.4.4 Lối chơi cơ bản : 38
2.4.5 Phong cách đồ họa và âm thanh : 39
2.4.6 Gameplay 39
2.4.7 Cơ chế của trò chơi : 39
2.5 Sơ đồ ca sử dụng của trò chơi (Usecase diagram) : 45
2.6 Sơ đồ lớp : 46
2.7 Sơ đồ tuần tự 48
CHƯƠNG 3 : TRIỂN KHAI VÀ KẾT QUẢ ĐẠT ĐƯỢC 48
3.1 Môi trường triển khai : 48
3.2 Sản phẩm đạt được : 49
3.2.1 Màn hình trò chơi : 49
3.2.2 Màn hình trò chơi khi quái vật xuất hiện : 49
3.2.3 Màn hình thua cuộc : 50
KẾT LUẬN VÀ KIẾN NGHỊ 50
1 Ưu điểm : 50
2 Hạn chế : 51
3 Hướng phát triển : 51
TÀI LIỆU THAM KHẢO 52
Trang 8DANH MỤC HÌNH ẢNH
Hình 1 Logo của Unity 14
Hình 2 Giao diện chính của Unity 15
Hình 3 Giao diện của một Scene 16
Hình 4 Một số GameObject 16
Hình 5 Các component của Camera 17
Hình 6 Component Rigidbody2D 18
Hình 7 Một Capsule Collider 2D 20
Hình 8 Minh họa sử dụng Joint2D 20
Hình 9 Component Constant Force 2D 20
Hình 10 Angry Birds - một tựa game sử dụng mô phỏng vật lý 2D 21
Hình 11 Vòng đời cơ bản của một GameObject 22
Hình 12 Một UI đơn giản trong Unity 23
Hình 13 Các thông số của một Layout 24
Hình 14 Component Text 25
Hình 15 Component Image 25
Hình 16 Theo thứ tự: Button, Toggle, Slider, ScrollBar, Dropdown và InputField 25
Hình 17 Một spritesheet chưa hình động một nhân vật 26
Hình 18 Giao diệp export ra Android 27
Hình 19 Thuật toán A* (H1) 29
Hình 20 Thuật toán A* (H2) 30
Hình 21 Thuật toán A* (H3) 31
Hình 22 Thuật toán A* (H4) 33
Hình 23 Thuật toán A* (H5) 34
Hình 24 Thuật toán A* (H6) 35
Hình 25 Thuật toán A* (H7) 36
Hình 26 Vòng đời một màn chơi 39
Hình 27 Vị trí biểu tượng xây tháp pháo 40
Hình 28 Chuẩn bị xây dựng tháp pháo 41
Hình 29 Hệ thống tiền tệ của trò chơi 41
Hình 30 Hệ thống lượt quái vật của trò chơi 42
Hình 31 Sơ đồ ca sử dụng của trò chơi 45
Hình 32 Sơ đồ lớp Tower, Monster và các lớp thừa kế 46
Hình 33 Sơ đồ lớp Debuff và các lớp thừa kế 47
Hình 34 Sơ đồ tuần tự 48
Hình 35 Màn hình trò chơi 49
Hình 36 Màn hình trò chơi khi quái vật xuất hiện 49
Hình 37 Màn hình thua trò chơi 50
Trang 9DANH MỤC BẢNG
Bảng 1 Danh sách quái vật 43 Bảng 2 Danh sách tháp pháo 44
Trang 10MỞ ĐẦU
1 Lý do chọn đề tài
Ngày nay, các thiết bị di động thông minh ngày càng phổ biến, ai ai cũng có cho riêng mình một điện thoại thông minh bên cạnh Hàng ngày mọi người sử dụng điện thoại thông minh để liên lạc, làm việc và đặc biệt là giải trí Theo thống kê của thì hàng ngày cửa hàng Play Store của Google có hơn 1300 lượt tải ứng dụng, thống kê trong năm 2015 thì loại hình ứng dụng được tải nhiều nhất trên trên các cửa hàng trực tuyến là game với các số liệu là 22% ở Appstore, 21% ở CHPlay và 60% ở AmazonStore Điều đó cho thấy ngành công nghiệp game trên thiết bị di động đang ngày càng phát triển và trong tương lại sẽ là một ngành công nghiệp đi đầu
Trước đây, việc phát triển trò chơi điện tử đòi hỏi nhiều công sức và qua rất nhiều giai đoạn phức tạp cũng như vốn đầu tư lớn Nhưng các chi phí đó đang ngày càng nhỏ lại, hoàng loạt các công cụ làm game được miễn phí trên thị trường, giúp bất cứ ai có niềm đam mê làm game có thể bắt đầu thực hiện dễ dàng
2 Khách thể và đối tượng nghiên cứu
Người dùng sử dụng các thiết bị điện thoại thông minh
Phần mềm Unity3D
Quy trình phát triển trò chơi di động
3 Giới hạn và phạm vi nghiên cứu
Tất cả người dùng sử dụng điện thoại thông minh, máy tính bảng
Các trò chơi di động tương đương
Các tài liệu về phát triển trò chơi trên di động
Các tài liệu về Unity
Trang 114 Mục đích nghiên cứu
Mục đích của đề tài nhằm nghiên cứu quy trình phát triển một trò chơi trên di động bằng công nghệ Unity3D, nắm được một game trên di động bao gồm những thành phần nào và quy trình hoạt động của một game trên di động là như thế nào và đồng thời mục tiêu lớn nhất là làm được một game với phong cách
“phòng thủ công trình” chạy trên hệ điều hành Android
5 Nhiệm vụ nghiên cứu
Nắm được quy trình phát triển một trò chơi trên di động bằng Unity
Nắm được cách hoạt động và các thành phần cùa một trò chơi trên di động
Hoàn thiện được một trò chơi hoàn chỉnh chạy trên hệ điều hành Android
6 Phương pháp nghiên cứu
Phương pháp nghiên cứu tài liệu
Phương pháp khảo sát
Phương pháp phân tích số liệu
7 Bố cục đề tài
MỞ ĐẦU
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ
CHƯƠNG 3: GIỚI THIỆU TRÒ CHƠI, PHÂN TÍCH CÁC THÀNH PHẦN CỦA TRÒ CHƠI
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trang 12CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Game và các thành phần cơ bản
Game là một dạng trò chơi điện tử liên quan đến tính tương tác với một giao diện người sử dụng để tạo ra một phản hồi hình ảnh trên một thiết bị hiển thị
Game engine là một thành phần cơ bản không thể thiếu trong quá trình hoàn thành một tựa game Game engine là một khung phần mềm (software framework) chuyên dụng để phát triển game trên các nền tảng khác nhau Đứng vai trò giữa nền tảng ứng dụng và các mã logic và tài nguyên để xây dựng nên thế giới game phức tạp Thông thường, một game engine hoàn chỉnh phải đảm bảo các phương thức, tác vụ để xây dựng nên một môi trường đồ họa 2D hoặc 3D Ngày nay, các game engine nổi tiếng đều có thể tích hợp cả 2 môi trường này vào một engine
Bằng việc sử dụng đặc dụng cho lập trình game, các game engine sẽ mang nhiều thành phần hữu dụng khi làm game mà các framework ứng dụng khác thường không chú trọng tới Như thay vì có các đối tượng xây dựng nên các cửa sổ, thanh sổ, menu, game engine được tối ưu hóa để hiển thị các giao diện pop-up trên môi trường đồ họa cập nhật liên tục hay xử lý âm thanh sao cho giống thật nhất trong không gian 3D Sau đây là danh sách các thành phần
cơ bản thường gặp ở các phần mềm game:
Bộ xử lý đầu vào: phần mềm game đặc thú khác biệt so với các phần mềm máy tính khác ở tính yêu cầu người chơi tương tác cao, liên tục với trò chơi Và trong nhiều trò chơi, khả năng xử lý tình huống nhanh nhạy của người chơi chính là chìa khóa để đạt được mục tiêu của trò chơi đó
Vì vậy việc đảm bảo các thao tác của người chơi được nhận chính xác và
xử lý nhanh nhất luôn là một yếu tố cơ bản bắt buộc đối với game engine Các xử lý đầu vào này có thể là từ nhiều thiết bị khác nhau như phím, chuột, bàn điều khiển game, tay cầm điều khiển,v.v nhưng mô hình
Trang 13chung đều được mapping với các chức năng trong game sao cho hợp lý
và đồng bộ giữa các nền tảng
Đồ họa: đồ họa chính là điểm hấp dẫn người chơi ngay khi nhìn vào một tựa game Dù trò chơi được định hình phong cách đồ họa 2D hay 3D phức tạp thì việc xử lý đồ họa là cuộc việc đòi hỏi xảy ra thường xuyên
và cập nhật liên tục từng mili giây trong quá trình ứng dụng game khởi chạy Bộ xử lý đồ họa chịu trách nhiệm render các thành phần đồ họa đồng thời tiết kiệm tài nguyên máy tính nhất có thể để đảm bảo một trải nghiệm tốt nhất cho người chơi
Âm thanh: bên cạnh đồ họa đẹp thì âm thanh hấp dẫn chính là điều tạo nên cảm xúc cho người chơi Bộ xử lý âm thanh đảm nhận tái tạo những
âm thanh chính xác, đặc biệt là ở môi trường 3D Bằng các kỹ thuật xử lý
âm thanh, như tăng giảm âm lượng xa gần, hòa âm, nhiễu âm… và chất lượng các bài nhạc nền, hiệu ứng tốt có thể làm cho người chơi như đang hòa vào thế giới thật
Bộ xử lý mạng: rất nhiều trò chơi ngày nay có tính năng đa người chơi, tức là nhiều người chơi có thể kết nối với nhau và tận hưởng trò chơi cùng lúc Bộ xử mạng đóng vai trò quan trọng kết nối người chơi với server và đảm bảo trải nghiệm cho mọi người chơi trên hệ thống là như nhau Giảm thiểu độ trễ, tiết kiệm dữ liệu, đồng bộ hóa dữ liệu giữa các client là những công việc chính mà bộ xử lý mạng đảm nhận trong một game engine
Mô phỏng vật lý: vật lý luôn là yếu tốt rút ngắn khoảng cách giữa đời thực và trò chơi Mô phỏng các thông số môi trường vật lý như trọng lực, lực ma sát, phản lực, va chạm, cân nặng, v.v là tính năng chính của bộ
mô phỏng vật lý Hiện có 3 bộ mô phỏng vật lý phổ biến là Hovak (3D), PhysX(3D) và Box2D (2D), ngoài ra có hàng trăm, hàng nghìn các bộ mô phỏng khác được xây dựng tùy chỉnh tùy theo yêu cầu của tựa game
Trang 14 Giao diện người dùng: giao diện người dùng là thành phần không thể thiếu trong các trò chơi, dù từ đơn giản đến phức tạp, 2D hay 3D Được
sử dụng để xây dựng các thành phần bổ trợ tương tác cung như cung cấp thông tin cho người chơi Và tương tự như bộ xử lý đồ họa, giao diện người dùng được cập nhật mỗi khung hình và việc một game engine có
bộ xử lý tối ưu đem lại lợi ích lớn về hiệu suất cho trò chơi
Mã: ngoài các thành phần trên cấu tạo nên một thế giới ảo hoàn hảo nhưng để phối hợp chúng hoạt động cùng với các tài nguyên tạo nên một trò chơi sinh động thì phải có các đoạn mã logic xây dựng nên gameplay cho trò chơi Đây là thành phần cơ bản của một game engine mà lập trình viên thường hay tiếp xúc nhất để xây dựng nên một trò chơi đúng theo thiết kế và tối ưu hiệu năng cho trò chơi
Phần lớn các nhà sản xuất lớn để sở hữu các game engine tự xây dựng mạnh
mẽ Bên cạnh đó, còn có rất nhiều game engine miễn được các nhà làm game ưa chuộng để đưa những ý tưởng trở thành sự thật mà Unity là một trong số đó
1.2 Sử dụng cơ bản cho Unity
1.2.1 Giao diện cơ bản của Unity
Unity cung cấp một giao diện trực quan, dễ tiếp cận cho nhà phát triển game Các thành phần giao diện được chia thành các thẻ cho các mục đích sử dụng chuyên biệt
Cửa sổ dự án (Project Window): Hiển thị thư mục chứa các tài nguyên cho dự án Người dùng có thể tạo mới thư mục và tài nguyên tại đây
Hình 1 Logo của Unity
Trang 15 Khung xem cảnh: là khu vực mô phỏng đồ họa trong trò chơi Người dùng có thể quan sát các thay đổi của các đối tượng trong game Có thể thao tác di chuyển, phóng to, thu nhỏ, xoay các đối tượng, v.v
Thanh đối tượng: chưa danh sách các đối tượng có trong scene theo dạng cây Khi click vào một đối tượng, đối tượng sẽ được bôi sáng trong Khung xem cảnh và hiển thị chi tiết thuộc tính ở Thanh thuộc tính
Thanh thuộc tính: liệt kê thành phần (component) của đối tượng được chọn Bên trong mỗi component liệt kê chi tiết các thuộc tính của component đó Người dung có thể dung Unity Editor API để tạo nên cao giao diện trực quan cho các Component tự thực hiện
Thanh công cụ: chứa các phím công cụ hữu ích để người dùng lựa chọn cũng như nhận biết nhanh các thiết lập hiện tại của Editor
Hình 2 Giao diện chính của Unity
Trang 161.2.2 Các đối tượng cơ bản
1.2.2.1 Scene
Scene chứa tất cả đối tượng của trò chơi Được sử dụng để tạo menu, các level trong trò chơi Với mỗi scene, người dung sẽ thêm thắt đối tượng, xây dựng môi trường, trang trí, thiết kế trò chơi từ các thành phần nhỏ
Hình 3 Giao diện của một Scene
Hình 4 Một số GameObject
Trang 171.2.2.3 Component
Một GameObject sẽ chứa nhiều
thành phần (Component) Component là
một khái niệm trong Unity Nó là một đối
tượng đặc tả mang các thuộc tính và
phương thức để miêu tả một logic cho
GameObject Các đoạn mã (code) khi kế
thừa từ lớp MonoBehaviour sẽ được xem
như một Component và có thể gán vào các
GameObject để xây dựng gameplay cho
GameObject đó
1.2.2.4 Prefab
Một GameObject sau khi được tạo nên, đưa vào Scene, thêm các Component đầy đủ để tạo nên một đối tượng trong game đầy đủ Đôi khi, một GameObject sẽ có rất nhiều thể hiện (Instance) trong một scene hoặc nhiều scene Việc tạo ra nhiều GameObject tương tự nhau sẽ gây bất cập khi cần chỉnh sửa toàn bộ chúng cùng lúc
Unity Prefab sinh ra để giải quyết vấn đề này Prefab được xem như là một mẫu GameObject mà việc chỉnh sửa nó sẽ gây ảnh hưởng toàn bộ đến các thể hiện mà từ nó tạo thành Việc thay đổi Prefab sẽ gây thay đổi ngay lập tức
và ghi đè lên mọi chỉnh sửa của cá thể hiện vì thế trong lúc sử dụng phải cẩn thận lưu đè chéo nhau giữa một thể hiện và prefab của nó
1.3 Hệ thống đồ họa
Sprite là đối tượng đồ họa 2D trong Unity được sử dụng để tạo hình ảnh cho các GameObject Unity hỗ trợ rất nhiều các công cụ đi kèm để tinh chỉnh Sprite:
- Sprite Creator: Tạo một số hình dạng cơ bản kích thước 4x4 pixel
Hình 5 Các component của Camera
Trang 18Hình 6 Component Rigidbody2D
- Sprite Renderer: Là một component để render Sprite lên các đối tượng
- Sprite Packer: Tối ưu hóa sử dụng và bộ nhớ khi dùng nhiều sprite
1.4 Hệ thống vật lý
Hệ thống vật lý trong Unity là PhysX Là một hệ thống mô phỏng vật lý
ưu việt nhất hiện nay Bên cạnh xử lý mô phỏng không gian 3D, hệ thống này cũng giúp Unity hoàn thành tốt vai trò tạo nên môi trường giả lập vật lý tuyệt hảo trên chế độ đồ họa 2D
1.4.1 Rigidbody2D
Thành phần Rigidbody2D
đặt đối tượng trở thành một đối
tượng chịu ảnh hưởng vật lý bởi
bộ mô phỏng vật lý Khi so sánh
sự khác biệt với Rigidbody
(được dùng trong 3D) thì
Rigidbody2D chỉ giúp đối tượng
di chuyển trong hệ trục tọa độ 2
chiều Oxy và chỉ xoay được 1
góc cố định
Rigidbody2D hoạt động theo nguyên lý override lên thành phần Transform của một đối tượng và cập nhật các thông số như tọa độ, góc xoay được định nghĩa bởi Rigidbody2D Tuy nhiên, việc tác động thay đổi lên thông số của thành phần Transform vẫn được chấp nhận Về thế, khi sử dụng Rigidbody2D phải lưu ý về việc tác động lên Transform để tránh các lỗi về việc đối tượng di chuyển bất thường
Khi một thành phần Collider2D được gán lên một đối tượng đã được gán Rigidbody2D thì Rigidbody2D sẽ đảm nhận luôn vai trò điều chỉnh Collider2D sao phù hợp Vì vậy, tránh tác động trực tiếp lên các thông số của Collider2D để tránh các lỗi tính toán va chạm
Kiểu thân thể (body type):
Trang 19Kiểu thân thể là một thuộc tính quan trọng và gây ảnh hưởng đến toàn bộ các thuộc tính còn lại của Rigidbody2D Và nó được chia làm 3 loại chính để người
sử dụng lựa chọn: Động (Dynamic), Kinematic, Tĩnh (Static)
Kiểu Động (Dynamic): Ở chế độ này, đối tượng chịu ảnh hưởng toàn bộ của các biến vật lý trong môi trường cũng như các hàm tác động vật lý
Kiểu Kinematic: Về cơ bản, Kinematic cũng như Dynamic ngoài việc loại bỏ ảnh hưởng của trọng lực và ngoại lực lên đối tượng Kinematic hữu dụng khi dùng để mô phỏng các đối tượng phi thực, bỏ qua vật lý Một đối tượng ở chế độ Kinematic và Static thì không thể xét va chạm với các đối tượng Kinematic và Static khác mà chỉ có thể tính toán va chạm với động tượng Dynamic Để Kinematic có thể xét va chạm với tất
cả các kiểu còn lại thì tích vào Full Kinematic Contacts
Kiểu Static: Kiểu này làm cho đối tượng hoàn toàn không chịu tác động vật lý nào Một cách đơn giản khác để tạo một đối tượng mang Rigidbody2D-Static là gán cho đối tượng ấy một thành phần Collider2D Simulated: Dùng để bật/tắt nhanh việc sử dụng thành phần Rigidbody2D lên đối tượng
Trang 20Hình 7 Một Capsule Collider 2D
Hình 8 Minh họa sử dụng Joint2D
Hình 9 Component Constant Force 2D
1.4.2 Collider2D
Collider2D là một thành phần mang hình dạng
xác định để xác định việc va chạm của 2 đối tượng
Danh sách các Collider2D: Circle Collider 2D, Box
Collider 2D, Polygon Collider 2D, Edge Collider 2D,
Capsule Collider 2D và Composite Collider 2D
Việc áp dụng một Collider2D với hình dạng
phức tạp hay một Collider2D đơn giản ảnh thưởng rất
nhiều đến hiệu năng cũng như mô phỏng vật lý trong game
1.4.3 Joint2D
Joint2D bao gồm: Distance Joint 2D, Fixed Joint
2D, Friction Joint 2D, Hinge Joint 2D, Relative Joint
2D, Slider Joint 2D, Spring Joint 2D, Target Joint 2D,
Wheel Joint 2D
Joint dùng để nối và thể hiện sự nối giữa hai đối
tượng với nhau Chỉ có thể gán thành phần Joint vào
một đối tượng đã có Rigidbody2D hoặc được gán cứng
tọa độ lên hệ trục Các Joint rất đa dạng và tùy thuộc
vào yêu cầu mô phỏng để sử dụng cho hợp lý
1.4.4 Constant Force 2D
Thành phần này là một công
cụ nhanh chóng hữu ích để mô
phỏng một đối tượng được cung
cấp một lực cố định liên tục
1.4.5 Effectors 2D
Effectors 2D được sử dụng kèm với Collider2D để tạo thành các vùng tác động lực lên các đối tượng đi vào khoản ảnh hưởng
Trang 211.4.6 2D Raycaster
Là một thành phần đóng vai trò trung gian để chuyển message từ Camera xuống các đối tượng 2D Thường được dùng để tạo các thao tác xác định tọa độ, chọn đối tượng, kéo thả, v.v…
Trang 22Hình 11 Vòng đời cơ bản của một GameObject
1.5 Lập trình
Các đoạn mã lập trình là phần tối quan trọng giúp kết nối các tài nguyên của trò chơi để tạo nên một gameplay hấp dẫn thú vị người chơi Đồng thời, việc tối ưu và sử dụng hợp lý các thành phần của Unity đem lại hiệu suất cao cho trò chơi
Unity phiên bản thiện tại hỗ trợ hai ngôn ngữ lập trình là C# và Javascript C# hiện tại được hỗ trợ là C# 4.0 trên nền tảng Net 2.0 trong bộ mã nguồn mở Mono Trình IDE mặc định là MonoDevelop, người sử dụng có thể
sử dụng Visual Studio lẫn Visual Studio Code như trình IDE bên thứ ba.Về cơ bản, việc lập trình trong Unity là xoay quanh việc định nghĩa cá lớp kế thừa từ
Trang 23lớp MonoBehaviour và kết hợp sử dụng các thành phần của Unity để tạo nên trò chơi
1.6 Giao diện người dùng
Unity cung cấp cho người sử dụng công cụ để xây dựng hệ thống giao diện người dùng hoàn chỉnh và có thể chạy đa nền tảng Đó chính là Canvas và các thành phần con của nó
1.6.1 Canvas
Canvas là đối tượng biểu tượng cho một vùng trên màn hình mà tất cả các đối tượng UI được xây dựng trên đó Thứ tự các đối tượng được thực hiện lệnh
vẽ (draw) theo thứ tự của nó trên Thanh đối tượng
Render Mode: Có 3 chế độ render khác nhau mà tùy vào tình huốn sử dụng của Canvas mà lựa chọn
Hình 12 Một UI đơn giản trong Unity
Trang 24 Screen Space - Overlay: Các thành phần UI được render trên cùng của màn hình chơi, vì vậy khi có sự thay đổi về độ phân giải, hay kích thước thì các thành phần cũng thay đổi tương tự
Screen Space - Camera: Gần như tương tự như Overlay tuy nhiên việc render phụ thuộc vào chế độ của Camera đang xử dụng
World Space: Canvas được đối xử như một Game Object trên scene 1.6.2 Layout
Tất cả các thành phần UI đều được biểu diễn như một hình chữ nhật trên các Layout Người dùng sử dụng Rect Tool để tác động thay đổi như thay đổi kích thước, di chyển, xoay các UI
Rect Transform là thành phần cơ bản của mỗi đối tượng UI lưu dữ thông tin về UI ấy trên Layout
Pivot đóng vai trò điểm tựa để cho các thao tác như xoay, phóng thu hình dựa theo thực hiện
Anchors đóng vai trò là con neo vị trí tương đối của đối tượng UI với Layout, đảm bảo khi layout thay đổi, các UI cũng thay đổi theo một cách hợp lý
Hình 13 Các thông số của một Layout
Trang 25Hình 16 Theo thứ tự: Button, Toggle, Slider, ScrollBar, Dropdown và
InputField
1.6.3 Các đối tượng UI cơ bản Unity cung cấp
Text: Biểu diễn chuỗi ký tự dưới định
dạng rich text
Image: biểu diễn một hình ảnh được chọn,
có thể tùy chỉnh màu sắc, vật liệu
Raw image: Image được đối xử như 1
Sprite còn raw image được xem như là
texture trong Unity Hiếm khi xử dụng
Mark: Mark được sử dụng để tùy
chỉnh hiện thị ở các đối tượng UI
con so với đối tượng UI cha
Effect: đây là một thành phần
thêm các hiệu ứng vào các đối
tượng UI
Button: thành phần UI nhận được sự kiện click vào nó
Toggle: thành phần UI mang giá trị biểu thị bật tắt cái gì đó
Slider: thành phần UI mang giá trị là số từ 0 đến 1
Scrollbar: thanh cuộn dùng trong các layout dài quá khung hình
Dropdown: thanh chọn
Input field: cho phép người dùng nhập chuỗi
Hình 14 Component Text
Hình 15 Component Image
Trang 26 Scroll Rect: kết hợp với Scrollbar và Mark để tạo nên giao diện dạng cuộn
1.7 Thủ thuật tối ưu và xuất bản trò chơi lên Android
1.7.1 Hình ảnh
Đối với các hình ảnh nhỏ và cùng một bộ đối tượng thì sử dụng các phần mềm bên thứ 3 để tạo thành một sprite sheet, cái mà tăng hiệu suất load hình ảnh và tiết kiệm dung lượng
Đối với các hình nền, background, các hình ảnh nhiều màu sắc không sử dụng chanel alpha (xác định độ trong suốt của pixel) thì lưu dưới định dạng JPG để tiết kiệm dung lượng
Đối với các hình ảnh đơn giản, ít màu sắc và có dùng chanel alpha thì dùng định dạng PNG 8 bit Với hình nhiều màu sắc phức tạp thì là PNG
24 bit
Sử dụng thủ thuật preload của Unity để load trước những hình ảnh nặng
và sử dụng thường xuyên
1.7.2 Âm thanh
Sử dụng định dạng ogg với mức độ chất lượng trung bình để đảm bảo cả
về chất lượng lẫn dung lượng file âm thanh
Hình 17 Một spritesheet chưa hình động một nhân vật