Khách thể và đối tượng nghiên cứu • Phần mềm Unity3D • Quy trình phát triển trò chơi điện tử • Nền tảng Android và Windows • Thiết kế trò chơi và xây dựng kịch bản trò chơi • Một số trò
Trang 1Giảng viên hướng dẫn: ThS PHẠM DƯƠNG THU HẰNG
Nhóm sinh viên: NGUYỄN SONG BẢO KHIÊM
MSSV: 312022131135
Lớp sinh hoạt: 13CNTT
Ngành: CỬ NHÂN CÔNG NGHỆ THÔNG TIN
Khoa: KHOA TIN HỌC
ĐÀ 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 em trong những năm học vừa qua
Đặt biệt, em xin chân thành cảm ơn cô ThS Phạm Dương Thu Hằng
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
Xin trân trọng cảm ơn!
Đà Nẵng, ngày 03 tháng 05 năm 2017 Sinh viên thực hiện
Nguyễn Song Bảo Khiêm
Trang 3LỜI CAM ĐOAN
Chúng 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 ThS Phạm Dương Thu Hằng
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á, tôi xin chịu hoàn toàn trách nhiệm
Đà Nẵng, ngày 03 tháng 05 năm 2017
Sinh viên thực hiện
Nguyễn Song Bảo Khiêm
Trang 4
NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
Đà Nẵng, ngày tháng năm 2017
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 1
LỜI CAM ĐOAN 2
DANH MỤC HÌNH ẢNH 7
MỞ ĐẦU 8
1 Lý do chọn đề tài 8
2 Khách thể và đối tượng nghiên cứu 8
3 Giới hạn và phạm vi nghiên cứu 8
4 Mục đích nghiên cứu 9
5 Nhiệm vụ nghiên cứu 9
6 Phương pháp nghiên cứu 9
7 Bố cục đề tài 9
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 10
1.1 Trò chơi và các thành phần cơ bản 10
1.2 Sử dụng cơ bản cho Unity 12
1.2.1 Giao diện cơ bản của Unity 12
1.2.2 Các đối tượng cơ bản 14
1.3 Hệ thống đồ họa 15
1.4 Hệ thống vật lý 16
1.4.1 Rigidbody 16
1.4.2 Collider 17
1.4.3 Joint 17
1.4.4 Raycaster 17
1.4.5 Physic Material 18
1.5 Lập trình 19
1.6 Giao diện người dùng 20
1.6.1 Canvas 20
1.6.2 Layout 21
1.6.3 Các đối tượng UI cơ bản Unity cung cấp 22
1.7 Thủ thuật tối ưu và xuất bản trò chơi 23
1.7.1 Hình ảnh 23
1.7.2 Âm thanh 23
1.7.3 Mã 24
1.8 Tổng quan phần mềm Blender 24
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ 25
2.1 Yêu cầu chức năng 25
Trang 72.2 Yêu cầu phi chức năng 25
2.3 Phân tích thiết kế hệ thống 25
2.3.1 Ý tưởng của trò chơi 25
2.3.2 Thể loại trò chơi 25
2.3.3 Đối tượng người chơi 25
2.3.4 Lối chơi cơ bản 25
2.3.5 Phong cách đồ họa và âm thanh 26
2.3.6 Trò chơiplay 26
2.3.7 Cơ chế của trò chơi 27
2.4 Sơ đồ ca sử dụng của trò chơi ( Usecase diagram) 30
2.5 Sơ đồ lớp 31
CHƯƠNG 3: TRIỂN KHAI VÀ KẾT QUẢ ĐẠT ĐƯỢC 32
3.1 Môi trường triển khai 32
3.2 Sản phẩm đạt được 32
3.2.1 Màn hình bắt đầu trò chơi 32
3.2.2 Màn hình vừa vào màn trò chơi 33
3.2.3 Màn hình trong lúc chơi 33
3.2.4 Màn hình thua trò chơi 34
KẾT LUẬN VÀ KIẾN NGHỊ 35
1 Kết quả 35
2 Ưu điểm 35
3 Hạn chế 35
4 Hướng phát triển 36
PHỤ LỤC 37
1 Hướng dẫn sử dụng 37
2 Danh sách các plug-in bên thứ 3 sử dụng trong dự án 37
TÀI LIỆU THAM KHẢO 38
Trang 8DANH MỤC HÌNH ẢNH
Hình 1 Logo của Unity 12
Hình 2 Giao diện chính của Unity 13
Hình 3 Giao diện của một Scene 14
Hình 4 Một số GameObject 14
Hình 5 Các component của Camera 15
Hình 6 Component Rigidbody 16
Hình 7 Phối hợp nhiều BoxCollider 17
Hình 8 Sử dụng Joint 17
Hình 9 Besiege - một tựa trò chơi sử dụng mô phỏng vật lý 3D của Unity 18
Hình 10 Vòng đời cơ bản của một Trò chơiObject 19
Hình 11 Một UI đơn giản trong Unity 20
Hình 12 Các thông số của một Layout 21
Hình 13 Component Text 22
Hình 14 Component Image 22
Hình 15 Theo thứ tự: Button, Toggle, Slider, ScrollBar, Dropdown và InputField 22
Hình 16 Một spritesheet chứa hình động một nhân vật 23
Hình 17 Logo của Blender 24
Hình 18 Sơ đồ vòng đời một lượt chơi 26
Hình 19 Bản đồ của trò chơi 27
Hình 20 Phép thuật Quả cầu lửa 28
Hình 21 Phép thuật Ngôi sao lửa lúc rơi xuống 28
Hình 22 Vụ nổ tạo ra khi Ngôi sao lửa chạm đất 29
Hình 23 Phép thuật gió lửa 29
Hình 24 Các quái vật trong trò chơi 30
Hình 25 Sơ đồ usecase của trò chơi 30
Hình 26 Sơ đồ lớp của trò chơi 31
Hình 27 Màn hình bắt đầu trò chơi 32
Hình 28 Màn hình vừa vào màn chơi 33
Hình 29 Màn hình trong lúc chơi 33
Hình 30 Giao diện kết thúc trò chơi 34
Trang 9MỞ ĐẦ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à trò chơi 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 trò chơi 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 trò chơi được miễn phí trên thị trường, giúp bất cứ ai có niềm đam mê làm trò chơi có thể bắt đầu thực hiện dễ dàng
2 Khách thể và đối tượng nghiên cứu
• Phần mềm Unity3D
• Quy trình phát triển trò chơi điện tử
• Nền tảng Android và Windows
• Thiết kế trò chơi và xây dựng kịch bản trò chơi
• Một số trò chơi đã có trên thị trường như: Dungeon Defenders, Dungeon Defenders II
3 Giới hạn và phạm vi nghiên cứu
• Các chức năng về xây dựng trò chơi 3D của Unity
• Thiết kế trò chơi thể loại thủ thành, hành động
Trang 10• Chức năng dựng hình 3D của Blender
4 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 3D bằng công nghệ Unity3D, nắm được một trò chơi bao gồm những thành phần nào và quy trình hoạt động của một trò chơi là như thế nào và đồng thời mục tiêu lớn nhất là làm được một trò chơi 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
• Quy trình phát triển một trò chơi trên di động bằng Unity
• 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 11CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Trò chơi và các thành phần cơ bản
Trò chơi 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 trò chơi Game engine là một khung phần mềm (software framework) chuyên dụng để phát triển trò chơi 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 trò chơi 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 trò chơi, các game engine sẽ mang nhiều thành phần hữu dụng khi làm trò chơi 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 trò chơi:
• Bộ xử lý đầu vào: phần mềm trò chơi đặ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 trò chơi, tay cầm điều khiển,v.v
Trang 12nhưng mô hình chung đều được mapping với các chức năng trong trò chơi 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 trò chơi 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 trò chơi 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 trò chơi
Trang 13• 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 trò chơi ư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 trò chơi 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 14• 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 trò chơi 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 [1]
Hình 2 Giao diện chính của Unity
Trang 151.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ỏ [1]
1.2.2.2 GameObject
Mỗi một đối tượng trong trò chơi đều được coi là GameObject Bản thân các GameObject không thể tự làm gì, người dùng xây dựng cho nó các thuộc tính để nó trở thành các thành phần trong trò chơi như nhân vật, môi trường hay hiệu ứng đặc biệt
Một GameObject là một Container, nghĩa là người dùng có thể thêm các GameObject con vào một GameObject cha để tạo nên các đối tượng phức tạp phù hợp trong trò chơi [1]
Hình 3 Giao diện của một Scene
Hình 4 Một số GameObject
Trang 161.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 trò chơi đầ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
Với thế mạnh ngay từ phiên bản đầu tiên là môi trường đồ họa 3D, Unity đem lại trải nghiệm 3D đầy đủ, đẹp mắt và cực kì tối ưu trên mọi nền tảng Các thành phần đồ họa cơ bản như Ánh sáng (Lighting), Camera, Vật liệu (Material), Shader, Texture, Mesh đều được hỗ trợ và người dùng có thể
Hình 5 Các component của Camera
Trang 17Hình 6 Component Rigidbody
tùy biến rất đa dạng Bên cạnh đó với hệ thống Particle Systems, người dùng
có thể tạo ra nhiều loại hiệu ứng đồ họa khác nhau một cách dễ dàng
1.4 Hệ thống vật lý
Hệ thống vật lý trong Unity là PhysX [1] 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 3D
1.4.1 Rigidbody
Thành phần Rigidbody
đặ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ý
Rigidbody 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 Rigidbody 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 Rigidbody 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 Collider được gán lên một đối tượng đã được gán Rigidbody thì Rigidbody sẽ đảm nhận luôn vai trò điều chỉnh Collider 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 Collider để tránh các lỗi tính toán va chạm
Trang 18Hình 7 Phối hợp nhiều BoxCollider
Hình 8 Sử dụng Joint
1.4.2 Collider
Collider 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 Việc áp dụng một Collider với hình dạng phức tạp hay một Collider đơ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 trò chơi
1.4.3 Joint
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ó Rigidbody 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 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
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…