Chúng ta có thể chơi game online trên mạng, các game offline trên PC, các game trên các dòng máy chuyên như Play Station của hãng Sony với những phiên bản PS2, PS3, PS4… hiện nay game cũ
Trang 1LỜI CÁM ƠN
Em xin chân thành cảm ơn Khoa Công Nghệ Thông Tin, trường Công nghệ thông tin và truyền thông Thái Nguyên đã tạo điều kiện tốt cho em thực hiện đồ án tốt nghiệp lần này
Em xin chân thành cảm ơn cô Nguyễn Lan Oanh, là người đã tận tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đồ án
Em cũng xin gửi lời cảm ơn sâu sắc đến quý thầy cô trong khoa đã tận tình giảng dạy, trang bị cho chúng em những kiến thức quí báu trong những năm học vừa qua
Mặc dù em đã cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép, nhưng chắc chắn sẽ không tránh khỏi những thiếu sót, kính mong sự cảm thông và tận tình chỉ bảo của quý Thầy Cô và các bạn
Người thực hiện Nguyễn Mạnh Cường
Trang 2LỜI CAM ĐOAN
Em xin cam đoan báo cáo đồ án tốt nghiệp này là công trình tổng hợp và nghiên cứu của cá nhân em, được thực hiện trên cơ sở nghiên cứu lý thuyết, kiến thức dưới
sự hướng dẫn tận tình của cô giáo Th.S Nguyễn Lan Oanh Trong báo cáo có sử dụng các tài liệu tham khảo được trích dẫn rõ ràng về tên tác giả, thời gian công bố cùng danh mục tài liệu tham khảo như đã nêu trong phần tài liệu tham khảo Nếu có phát hiện bất kỳ sự gian trá nào trong đồ án, em xin chịu hoàn toàn trách nhiệm trước Hội đồng bảo vệ
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 1
TÓM TẮT ĐỀ TÀI 2
Chương 1 : TỔNG QUAN VỀ UNITY 3D 3
1.1 Unity là gì? 3
1.2 Sơ lược lịch sử hình thành và phát triển của Unity 4
1.2.1 Giới thiệu về Unity 4
1.2.2 Hình thành 6
1.2.4 Giải thưởng 6
1.2.5 Khách hàng 7
1.2.6 Tính năng của engine Unity 7
1.3 Các khái niệm cơ bản trong Unity 8
1.3.1 Asset 8
1.3.2 Scene 8
1.3.3.Game Object 9
1.3.4 Component 10
1.3.5 Script 10
1.3.6 Prefab 13
1.3.7 Material và Shader 13
1.4 Sơ nét về giao diện của Unity 14
1.4.1 Cửa sổ Scene và Hierarchy 14
1.4.2 Inspector 16
1.4.3 Cửa sổ Game 16
1.4.4 Cửa sổ Project 16
1.5 Tổng quan kiến trúc engine Unity trên Android 17
1.5.1 Kiến trúc tổng quan 17
1.5.2 Chu kỳ sống của thành phần script gắn trên đối tượng game 18
1.6 Tạo và cấu hình với dự án 2D 20
1.6.1 Tạo dự án 20
Trang 4CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 38
2.1 Phân tích yêu cầu 38
2.1.1 Khảo sát 38
2.1.2 Mục tiêu cần đạt 38
2.1.3 Hướng giải quyết và kế hoạch thực hiện 38
2.2 Phân tích thiết kế hệ thống 38
2.2.1 Biểu đồ Use Case (Use Case Diagram) 39
2.2.2 Biểu đồ trình tự (Sequence Diagram) 41
2.2.3 Biểu đồ lớp (Class Diagram) 44
2.2.4 Biểu đồ hoạt động (Activity-Diagram) 44
2.2.5 Các chức năng của chương trình 46
CHƯƠNG 3 : XÂY DỰNG GAME NIGHT MARE 47
3.1 Giới thiệu chung về game trên PC 47
3.1.1 Máy chơi game đầu tiên 47
3.1.2 Thập niên 70s – Thế hệ console đầu tiên 48
3.1.3 Thập niên 80 – Thời kỳ hoàng kim của máy tính cá nhân 49
3.1.4 Thập niên 90 – Đĩa CD và PlayStation 50
3.1.5 Thập niên 2000s – MMO 52
3.1.5 Kỷ nguyên tương lai - Thực tại ảo 55
3.2 Mục tiêu đề tài 57
3.3 Giới thiệu game 58
3.4 Các tài nguyên của game 59
3.4.1.Thư mục scene 59
Thư mục scene chứa 3 màn chơi chính của game là : GamePlay, InGame Các màn chơi này được sắp xếp theo thứ tự và sẽ được chuyển scene bằng code 59 3.4.2.Thư mục model 60
Trang 53.5.1 Di chuyển player bằng bàn phím 61
3.5.2 Xử lý di chuyển theo cho Enemy 61
3.5.3 Xử lý va chạm giữa các đối tượng trong game 62
3.5.4 Ánh sáng trong game 62
3.5.5 Âm thanh trong game 62
3.5.6 Hiệu ứng cháy nổ (particle System) 64
KẾT LUẬN 65
1 Kết quả đạt được: 65
2 Hướng phát triển 65
DANH MỤC TÀI LIỆU THAM KHẢO 66
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 67
Trang 6DANH MỤC CÁC HÌNH
Hình 1.1 Hình minh họa đa nền 3
Hình 1.2.Môi trường phát triển Unity 3D 5
Hình 1.3 Thông tin phiên bản Unity 3D 6
Hình 1.4 Asset trong Unity 8
Hình 1.5 Các scene của Unity 9
Hình 1.6 Kéo tài nguyên vào Scene để sử dụng 9
Hình 1.7 Các thành phần trong đối tượng Camera 10
Hình 1.8 Cách tạo file script mới 11
Hình 1.9 Lập trình Unity bằng C# trên Visual Studio 12
Hình1.10 Một file script đang gắn vào đối tượng 12
Hình 1.11 Material và Shader 13
Hình 1.12 Giao diện Editor của Unity 14
Hình 1.13 Chọn đối tượng trong Scene và Hierrarchy 15
Hình 1.14 Cửa sổ Inspector hiển thị thông tin một đối tượng 16
Hình 1.15 Tổng quan kiến trúc Unity 17
Hình 1.16 Chu kỳ sống của thành phần script 19
Hình 2.1 Biểu đồ Use Case tổng quát của game 39
Hình 2.2 Biểu đồ trình tự giao diện chính 41
Hình 2.3 Biểu đồ trình tự chơi game 42
Hình 2.4 Biểu đ trình tự giao diện menu 43
Hình 2.5 Biểu đồ Class-Diagram 44
Hình 2.6 Biểu đồ hoạt động Menu 44
Hình 2.7 Biểu đồ hoạt động xử lý va chạm 45
Hình 3.1 Máy chơi game đầu tiên 47
Trang 7Hình 3.4 Game elite 50
Hình 3.5.Game trên đĩa CD và Playstation phát triển 51
Hình 3.6 Game Playstation đầu tiên về bắn máy bay 52
Hình 3.7 Game MMO phát triển 53
Hình 3.8 Game Call of Duty 54
Hình 3.9 Game Angry Birds 55
Hình 3.10 Kính thực tại ảo ra đời 56
Hình 3.11 Game thực tại ảo 56
Hình 3.12.Game có lỗi chơi gần giống game ZombieWood 58
Hình 3.13.Giao diện start game 59
Hình 3.14.Giao diện Ingame 59
Hình 3.15.Giao diện endgame 60
Hình 3.16 Quái vật elepant 60
Hình 3.17 Nhân vật chính 61
Hình 3.18 Quái vật Zombuny 61
Hình 3.19 Ánh sáng trong game 62
Hình 3.20 Thêm thành phần Audio Source 63
Trang 8LỜI NÓI ĐẦU
Với sự phát triển một cách nhanh chóng như vũ bão của công nghệ và Internet của thế giới nói chung và Việt Nam nói riêng thì game gần như không còn là một khái niệm xa lạ đối với mỗi cá nhân, ngược lại còn cảm thấy rất gần gũi trong cuộc sống chúng ta Chúng ta có thể bắt gặp những trò chơi trên những thiết bị công nghệ nhỏ nhất cho đến những thiết bị công nghệ cao hơn
Nói đến game thì chắc hẳn phần lớn mọi người đều đồng ý đó là một loại hình giải trí có sức thu hút rất lớn,nhất là với giới trẻ hiện nay Đặc biệt sau sự ra đời của Internet, game online xuất hiện và nhanh chóng gây được sức hấp dẫn to lớn Chúng
ta có thể chơi game online trên mạng, các game offline trên PC, các game trên các dòng máy chuyên như Play Station của hãng Sony với những phiên bản PS2, PS3, PS4… hiện nay game cũng đang được phát triển mạnh trên các thiết bị di động như điện thoại di động, các máy Xbox…Hàng năm lợi nhuận từ game đem về doanh thu lên đến hàng tỉ đô la cho những công ty chuyên phát triển và sản xuất game như ở các nước phát triển như Nhật Bản, Mỹ có rất nhiều các công ty chuyên về sản xuất game như Nintendo, Sony, Sega và mỗi năm các công ty này đạt doanh thu hàng
tỷ USD Hay với các nước đi sau như Hàn Quốc,Trung Quốc cũng có được một ngành công nghê game rất mạnh nhờ có sự đầu tư đúng đắn và chiến lược phát triển tốt Một trò chơi được mua về với giá hàng ngàn hay thậm chí hàng triệu, hàng tỷ
đô la Không phải là những game cấu hình cao, đồ họa khủng mới có thể đêm về nguồn lợi nhuận khủng khiếp như vậy mà có những game rất đơn giản cấu hình thấp, đồ họa của những năm đầu tiên của thế giới công nghệ nhưng vẫn rất hấp dẫn
và thu hút người chơi chỉ với những lối chơi cực kì đơn giản, nó không phải là một vẫn đề khó hiểu trong thời đại công nghệ hiện nay
Mặc dù VINASA xếp game là một trong 3 định hướng công nghệ chiến lược của hiệp hội này trong giai đoạn 2006-2010, bên cạnh định hướng phần mềm nhúng
và ERP nhưng hiện tại thị trường game ở Việt Nam còn rất yếu
Trang 9TÓM TẮT ĐỀ TÀI
Ngày nay, game trên trên điện thoại di động đã trở thành thú vui số 1 của giới trẻ Tuy vậy, cảm giác chơi game trên PC vẫn là một thứ gì đó rất lôi cuốn mà game trên mobile không thể nào đem lại được
Tuy game trên mobile tiện lợi thì rất rõ, có thể chơi mọi lúc mọi nơi nhưng với những game đồ họa cao, game đòi hỏi người chơi phải thao tác liên tục với bàn phím hay chuột thì không thể nào tích hợp trên di động được Một số game bắn súng như CS, Crossfire, … hay những game chiến thuật như LOL, DOTA, AOE thì vẫn chưa có phiên bản trên mobile Những nhà phát hành game lớn cũng luôn quan tâm tới cộng đồng game thủ, ví dụ như garena thường xuyên tổ chức các giải đấu LOL với phần thưởng lên tới hàng triệu đô la mỹ, điều mà game thủ mobile vẫn chưa thể có được
Chính vì vậy mà nhu cầu chơi game 3D trên PC vẫn còn rất cao, các hãng sản xuất liên tục cho ra đời những thể loại game 3D hình ảnh đẹp mắt, âm thanh sống động trên nền tảng PC
Nội dung đề tài em thực hiện bao gồm việc tìm hiểu Engine Unity và sử dụng Unity để xây dựng game 3D cho PC
Báo cáo bao gồm 3 chương:
Chương 1: Giới thiệu tổng quan về Unity 3D
Chương 2: Giới thiệu tổng quan về Unity, trình bày các khái niệm cơ bản,
các tính năng nổi bật, giao diện, đặc biệt là tổng quan về kiến trúc của Engine Unity
Chương 3: Xây dựng game Night mare
Trang 10
Chương 1 : TỔNG QUAN VỀ UNITY 3D 1.1 Unity là gì?
Đã qua rồi thời kỳ làm game trên nền Flash căn bản và buồn chán với những chuyển động thật cứng nhắc Unity 3D mang lại sức mạnh kỳ diệu cho nhân vật mà chúng ta muốn thể hiện sống động hơn trong không gian 3 chiều đầy huyền ảo Công nghệ cao này tạo ra một bước đột phá mới về sự khác biệt trong công nghệ làm game 3D hiện nay, mang đến cho người chơi 1 cảm giác rất khác lạ và hào hứng trong từng chuyển động, tương lai công nghệ này được áp dụng vào game Việt Nam sẽ mở ra một trang mới trong thế giới game 3D huyền ảo
Unity 3D được dùng để làm video game 3D, hoặc những nội dung có tính tương tác như thể hiện kiến trúc, hoạt hình 3D thời gian thực Unity hao hao với Director, Blender game engine, Virtools hay Torque Game Builder trong khía cạnh dùng môi trường đồ họa tích hợp ở quá trình
phát triển game là chính
Unity là một trong những engine được
giới làm game không chuyên cực kỳ ưa chuộng
bởi khả năng tuyệt vời của nó là phát triển trò
chơi đa nền Trình biên tập có thể chạy trên
Windows và Mac OS, và có thể xuất ra game
cho Windows, Mac, Wii, iOS, Android Game
cũng có thể chơi trên trình duyệt web thông qua
plugin Unity Web Player Unity mới bổ sung
khả năng xuất ra game trên widget cho Mac, và
cả Xbox 360, PlayStation 3
Hình 1.1 Hình minh họa đa nền
(Nguồn: http://unity3d.com/ ) Chỉ với khoản tiền bỏ ra khá khiêm tốn (1.500 USD) là phiên bản pro đã nằm trong tay của chúng ta, dĩ nhiên tại Việt Nam số tiền này vẫn là quá lớn nhưng thật
Trang 11Vào năm 2009, Unity nằm trong top 5 game engine tốt nhất cho việc sản xuất game với chỉ sau 4 năm phát triển Unity đứng thứ 4, xếp sau Unreal Engine 3, Gamebryo Engine (được VTC Studio mua về phát triển SQUAD) và Cry Engine 2 Lượng tài liệu hướng dẫn Unity rất phong phú Hơn thế nữa nó còn có sẵn một cộng đồng cực lớn với diễn đàn riêng Bất cứ điều gì không hiểu chúng ta đều có thể thoải mái hỏi và nhận được câu trả lời nhanh chóng, tận tâm
Quá trình tạo địa hình cũng như truy xuất từ các phần mềm 3DSMax, Maya, Cinema4D rất nhanh chóng Sức mạnh và sự tiện lợi của Unity là vô cùng lớn
Sức mạnh: Unity có thể tạo ra được nhiều loại game 3D đa dạng, dễ sử dụng với người làm game chưa chuyên nghiệp, chất lượng cao, chạy hầu hết trên các hệ điều hành
Sự tiện lợi: nếu chúng ta là một người chuyên dùng 3Dmax, hay Maya hoặc phần mềm mã nguồn mở Blender thì quả là thật tuyệt, chúng ta sẽ có một lợi thế lớn khi viết game trên Unity này, bởi công việc tạo các mô hình 3D sẽ trở lên dễ dàng hơn rất nhiều, việc kết hợp giữa người lập trình và người thiết kế các mô hình
sẽ nhanh và hiệu quả hơn Trong Unity chúng ta có thể import trực tiếp các file mô hình đang thiết kế và sẽ thiết kế hoàn thiện tiếp nếu chưa xong trong khi đó công việc import chỉ diễn ra một lần Không như việc phải dùng các công cụ khác để thực hiện viết game chúng ta sẽ phải xuất chúng ra một dạng nào đó và mỗi lần sửa lại phần mô hình chúng ta lại phải import lại, và như thế là quá mất thời gian trong việc tạo và chỉnh sửa các mô hình theo ý muốn Ngoài ra Unity còn cho chúng ta trực tiếp tạo các mô hình nếu muốn Việc đặt các thuộc tính vật lý trong Unity cũng cực
kỳ dễ dàng và hỗ trợ sẵn nhiều chức năng
1.2 Sơ lược lịch sử hình thành và phát triển của Unity
1.2.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
Trang 12- Hỗ trợ nhiều nền tảng thông dụng như OSX, Linux, Window, Web, iOS, Window Phone 8, Android, PS3, BB…
Hình 1.2.Môi trường phát triển Unity 3D
- 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
- 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ăn 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
- Một số game được phát triển trên Unity như AngryBird, Elegy of War,…
- Ta có thể vào đây để download và cài đặt Unity3D trực tiếp tại trang chủ : http://unity3d.com/unity/download/
- Unity có 2 loại phiên bản, một cho người dùng free, và một phiên bản pro thì mất phí
Trang 13Hình 1.3 Thông tin phiên bản Unity 3D
- Tải Unity về cài đặt bình thường, đến khi kết thúc cài đặt nền các bạn chọn phiên bản Pro thì cần phải mua, còn nếu là người dùng free thì chọn kích hoạt qua web, chỉ cần có kết nối mạng internet, sau đó chọn cài đặt thủ công và nhập mail, chọn free là có thể sử dụng một bản Unity free
1.2.2 Hình thành
Phần lõi của Unity ban đầu được viết bởi Joachim Ante vào năm 2001 Sau đó công ty được hình thành vào năm 2005 và bắt đầu với phiên bản 1.0 Đến năm 2007, Unity được nâng lên phiên bản 2.0 Unity bắt đầu hỗ trợ iPhone vào năm 2008 Vào tháng 6/2010, Unity chính thức hỗ trợ Android và cho ra đời phiên bản 3.0 có hỗ trợ Android vào tháng 9/2010 Có thể thấy tốc độ phát triển của Unity khá nhanh
1.2.4 Giải thưởng
Unity đã đoạt được nhiều giải lớn với những giải chính sau:
o Năm 2006, Unity đạt "Best Use of Mac OS X Graphics" tại Apple's WWDC Đây là lần đầu tiên một công cụ phát triển game đạt được chất lượng do giải thưởng uy tín này đưa ra
Trang 14o Năm 2009, Unity Technologies có tên trong "Top 5 công ty game của năm" do Gamasutra tổ chức
o Năm 2010, Unity đoạt giải Best Engine Finalist do Develop Magazine bình chọn, giải Technology Innovation Award của Wall Street Journal ở thể loại phần mềm
1.2.5 Khách hàng
Unity được trên 250.000 người đăng ký sử dụng gồm Bigpoint, Cartoon Network, Coca-Cola, Disney, Electronic Arts, LEGO, Microsoft, NASA, Ubisoft, Warner Bros, các hãng phim lớn nhỏ, các chuyên gia độc lập, sinh viên và những người đam mê
1.2.6 Tính năng của engine Unity
Môi trường phát triển được tích hợp với tính năng kế thừa, khả năng chỉnh sửa đồ họa, chức năng kiểm tra chi tiết, và đặc biệt tính năng xem trước game ngay trong lúc xây dựng (live game preview)
Triển khai được trên nhiều nền tảng:
o Chương trình độc lập trên Windows và Mac OS
o Trên web, thông qua Unity Web Player plugin cho Internet Explorer, Firefox, Safari, Opera, Chrome, cho cả Windows và Mac OS
o Trên Mac OS Dashboard widget
o Cho Nintendo Wii (cần mua license thêm.)
o Cho iPhone, iPad application (cần mua license thêm.)
o Cho Google Android (cần mua license thêm.)
o Cho Microsoft Xbox 360 (cần mua license thêm.)
o Cho Sony PlayStation 3 (cần mua license thêm.)
Tài nguyên (model, âm thanh, hình ảnh, ) được tải vào trong Unity và tự động cập nhật nếu tài nguyên có sự thay đổi Unity hỗ trợ các kiểu định dạng từ 3DS Max, Maya, Blender, Cinema 4D và Cheetah3D
Graphics engine sử dụng Direct3D (Windows), OpenGL (Mac, Windows), OpenGL ES (iPhone OS), và các API khác trên Wii
Hỗ trợ bump mapping, reflection mapping, parallax mapping, Screen Space
Trang 15 Unity Asset Server: Đây là một tính năng khá mới của Unity, theo đó Unity
sẽ cung cấp một hệ thống quản lý theo dạng phiên bản cho tất cả asset và cả script Đây là một kho chứa các tài nguyên cần thiết cho việc làm game Khi import cũng như sửa chữa, trạng thái của asset ngay lập tức được cập nhật Server chạy trên database opensource PostgreSQL và có thể truy cập trên cả Mac lẫn Windows, Linux Asset Server đòi hỏi một khoản phí phụ trội là $499 cho mỗi bản copy Unity, và một license Unity Pro
1.3 Các khái niệm cơ bản trong Unity
1.3.1 Asset
Đây là kho tài nguyên cho việc xây dựng game trong một project của Unity Các tài nguyên này có thể là hình ảnh, âm thanh, hoặc một mô hình 3D có sẵn Unity sẽ tham chiếu đến các tập tin chúng ta sẽ sử dụng để tạo ra các tài nguyên cho trò chơi Đây là lý do tại sao trong bất kỳ thư mục chứa project sử dụng Unity thì tất
cả các tập tin tài nguyên phải được lưu trữ trong một thư mục con tên là Assets
Hình 1.4 Asset trong Unity
1.3.2 Scene
Trong Unity, chúng ta có thể xem Scenes là các màn chơi, cấp độ chơi riêng
lẻ, hoặc các vùng của nội dung trò chơi Ví dụ như Main menu, Options, About … Bằng cách xây dựng trò chơi với nhiều cảnh, chúng ta sẽ có thể phân phối thời gian tải và thử nghiệm các phần khác nhau của trò chơi riêng lẻ một cách nhanh chóng và chính xác
Trang 16Hình 1.5 Các scene của Unity
1.3.3.Game Object
Khi một tài nguyên được sử dụng trong một scene, khi đó chúng ta có thể coi tài nguyên này là một “Game Object” mới Mỗi GameObject phải chứa ít nhất một thành phần, đó là thành phần “Transform” Transform chứa các phép để biến đổi góc quay, tỷ lệ hay tịnh tiến của đối tượng Từ đây trong báo cáo này chúng em sẽ
gọi GameObject trong cửa sổ Hierarchy là đối tượng game
Trang 171.3.4 Component
Component là các thành phần trong một Game Object của Unity Bằng cách đính kèm các thành phần vào cho một đối tượng, chúng ta có thể áp dụng ngay các phần mới của game engine vào đối tượng Thông thường các thành phần này được Unity xây dựng sẵn như ánh sáng, camera, particle, hiệu ứng vật lý…
Hình 1.7 Các thành phần trong đối tượng Camera
1.3.5 Script
Script là thành phần quan trọng nhất trong Unity, có thể xem scripts như là linh hồn của game Chúng ta có thể viết kịch bản cho game bằng C#, Java Scripts, hoặc Boo (một dẫn xuất của ngôn ngữ Python) Theo nhiều người đã sử dụng Unity
Trang 18thì code bằng C# sẽ giúp game chạy nhanh hơn và giúp kiểm soát code tốt hơn do tất cả các biến phải được khai báo rõ ràng Mặt khác ngôn ngữ C# rất tiện dụng để lập trình, nên trong luận văn này, chúng em dùng ngôn ngữ C# để viết kịch bản cho
game Mỗi file script C# là một class bắt buộc kế thừa từ lớp MonoBehaviour, có
tên class phải trùng với tên file script
Hình 1.8 Cách tạo file script mới
Giao diện code C# rất quen thuộc khi edit trên Visual Studio 2005
Trang 19Hình 1.9 Lập trình Unity bằng C# trên Visual Studio
Một đoạn script muốn thực thi được thì nó phải được gắn vào một đối tượng
Hình1.10 Một file script đang gắn vào đối tượng
Trang 201.3.6 Prefab
Hãy tưởng tượng Prefab là một cái thùng rỗng, mà bên trong nó chúng ta có thể chứa đựng các thành phần hay đối tượng khác nhau, chúng ta có thể viết kịch bản cho hành động của Prefab (khởi tạo, di chuyển, hay hủy đối tượng) Chúng ta
có thể sử dụng đối tượng này nhiều lần trong trò chơi, và cũng có thể sử dụng lại cho project khác Prefab cho phép chúng ta lưu trữ các đối tượng, toàn bộ thành phần bên trong và cấu hình hiện tại
1.3.7 Material và Shader
Shader là đoạn script qui định cách thức render của chất liệu trên bề mặt vật thể Material sử dụng shader để làm chất liệu cho mô hình Giữa materials và shaders có mối liên hệ với nhau Shaders qui định các thuộc tính cần để shader làm việc Còn material cho phép gán hình ảnh vào các thuộc tính đó từ Asset
Hình 1.11 Material và Shader
Trang 211.4 Sơ nét về giao diện của Unity
Giao diện Unity, giống như nhiều môi trường làm việc khác, layout có thể tùy chỉnh Layout của Unity bao gồm nhiều tab khác nhau và có thể bật tắt Chúng ta hãy xem xét một cách bố trí giao diện Unity điển hình:
Hình 1.12 Giao diện Editor của Unity
Như hình trên chúng ta thấy có 5 khung khác nhau:
o Scene [1] – nơi xây dựng trò chơi
o Hierarchy [2] – danh sách các GameObject trong một cảnh game
o Inspector [3] – màn hình cài đặt cho tài nguyên/đối tượng đang được chọn
o Game [4] – cửa sổ xem trước game, chỉ hoạt động ở chế độ chơi (khi nhấn Play)
o Project [5] – danh sách các tài nguyên trong project, đóng vai trò như một thư viện
1.4.1 Cửa sổ Scene và Hierarchy
Cửa sổ Scene là nơi chúng ta sẽ xây dựng toàn bộ các đối tượng trong game Cửa sổ cung cấp nhiều góc nhìn khác nhau, có thể nhìn dạng phối cảnh hoặc dạng song song Chúng ta có thể kéo thả đối tượng trên cửa sổ này, di chuyển, xoay…
Trang 22Cửa sổ Scene cũng kèm theo bốn nút điều khiển tiện lợi như hình trên Truy cập từ bàn phím bằng cách sử dụng các phím Q, W, E, và R Các phím thực hiện các hoạt động sau đây:
o Công cụ bàn tay [Q]: công cụ này cho phép di chuyển trong cửa sổ Scene, xoay góc nhìn, phóng to, thu nhỏ góc nhìn
o Công cụ di chuyển [W]: Công cụ này dùng để di chuyển một đối tượng
o Công cụ xoay [E]: Công cụ này cho phép chúng ta xoay nhân vật theo một trục nào đó trong không gian
o Công cụ tỷ lệ [R]: Công cụ này cho phép chúng ta tăng giảm tỷ lệ kích thước của đối tượng
Khi chọn một đối tượng trong cửa sổ Scene, đối tượng này sẽ được tự động chọn trong cửa sổ Hierarchy và ngược lại
Hình 1.13 Chọn đối tượng trong Scene và Hierrarchy
Trang 231.4.2 Inspector
Inspector sẽ hiển thị tất cả thông tin, các thành phần trong đối tượng game đang chọn, và cho phép điều chỉnh các biến của các thành phần này Có thể xem cửa sổ này như cửa sổ Properties khi design giao diện Winform trên Visual Studio
Hình 1.14 Cửa sổ Inspector hiển thị thông tin một đối tượng
1.4.3 Cửa sổ Game
Cửa sổ này sẽ hiển thị những gì có trong cửa sổ Scene và sẽ hoạt động khi nhấn nút Play Trong cửa sổ này chúng ta có thể chọn các kích cỡ hiển thị khác nhau để build cho các loại máy khác nhau Chúng ta có thể chơi thử game trên cửa
sổ này khi đã nhấn nút Play Lưu ý rằng khi cửa sổ này hoạt động rồi thì mọi chỉnh sửa trên cửa sổ Scene và cài đặt cho các đối tượng chỉ là tạm thời và khi nhấn nút Stop, cửa sổ này về lại trạng thái tĩnh thì mọi chỉnh sửa trước đó là không còn
1.4.4 Cửa sổ Project
Cửa sổ Project thể hiện nội dung bên trong thư mục Assets của project chúng
ta Khi thêm tài nguyên vào thư mục Assets ngay lập tức chúng sẽ tự động được cập nhập vào project Unity của chúng ta
Trang 241.5 Tổng quan kiến trúc engine Unity
1.5.1 Kiến trúc tổng quan
Engine Unity hỗ trợ cho chúng ta UnityAPI để viết script game UnityAPI là API lập trình game trong Unity rất mạnh UnityAPI chứa các đối tượng và phương thức hỗ trợ hầu hết các đối tượng và các loại thành phần trong Unity
Trong một scene thường có nhiều đối tượng game Mỗi đối tượng này có thể
có hoặc không có đoạn script nào gắn lên đó Nếu muốn gắn script vào đối tượng, ta
bắt buộc phải kế thừa class đó từ lớp MonoBehaviour của UnityAPI và tên class
phải trùng với tên file script Mỗi script khi gắn lên đối tượng game đều được đối tượng game xem như một thành phần bên trong và được cấp phát vùng nhớ khi chạy game
Trang 25Bên trong UnityAPI chứa rất nhiều lớp hỗ trợ lập trình game, trong đó có một
số lớp quan trọng như :
o MonoBehaviour: tất cả các script muốn gắn vào một đối tượng game bắt buộc phải kế thừa từ lớp này
o GameObject: lớp cha của tất cả các thực thể trong scene
o Component: lớp cha của tất cả các thành phần có thể gắn vào đối tượng
o Transform: giúp thay đổi vị trí, xoay, biến đổi tỉ lệ mô hình
o Input: hỗ trợ lập trình với chuột, cảm ứng đa điểm, cảm biến gia tốc
o Camera: giúp lập trình camera
o Light: giúp tạo ánh sáng trong game
o Projector: giúp chiếu texture lên bề mặt vật thể
o ParticleEmitter: hỗ trợ tạo các hiệu ứng particle đẹp mắt
o Audio: hỗ trợ lập trình với âm thanh
o Animation: chạy chuyển động của mô hình nhân vật
o Rigidbody: giúp tạo hiệu ứng vật lý liên quan đến trọng lực như bóng nẩy, lăn,
o CharacterController: giúp điều khiển nhân vật di chuyển theo độ cao địa hình
o Collider: hỗ trợ lập trình va chạm giữa các vật thể
o GUI: giúp lập trình giao diện người dùng trên Unity
1.5.2 Chu kỳ sống của thành phần script gắn trên đối tượng game
Chu kỳ sống của một thành phần script được tính kể từ khi scene được chạy cho đến lúc scene bị tắt hoặc chuyển sang scene khác
Trang 26Hình 1.16 Chu kỳ sống của thành phần script
Tùy theo trạng thái của scene mà sự kiện tương ứng sẽ được gọi
o Awake: được gọi khi script được load xong
o Start: được gọi khi script được load xong nếu thành phần script đó không
Trang 271.6 Tạo và cấu hình với dự án 2D
Trang 28a Cấu hình dự án 2D
- 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
- 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
- Click chuột phải vào thư mục Assets ở cửa sổ Project, ta chọn Create, chọn Folder
Trang 29- Kết quả như hình sau:
1.7 Tạo các đối tượng cơ bản
1.7.1 Game Object
a Empty Object
- Ở menu ta chọn GameObject, chọn 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
Trang 30b 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
c 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
- Thêm Tag mới
Trang 31- Danh sách các Tag đã tạo
1.7.2 Sprite
- Có 2 loại sprite là Single sprite và Multiple sprite
+ Single sprite:
Ở cửa sổ Project, chọn thư mục Assets, R-Click vào thư mục Sprites,
chọn Import New Assets, sau đó tìm đến một hình ảnh nào đó (Sử dụng hai ảnh
ground.png và coin_gold.png, để tiếp tục làm game ở các phần sau)
Trang 32Ở cửa sổ Inspector, chọn Texture Type là Sprite, Sprite Model là single, sau
đó nhấn Apply
+ 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
Trang 33Tiế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
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
c 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
Trang 34- Tiếp theo, ở mục Sprite Render ở cửa sổ Inspector, ta chọn Sprite để vẽ (Nút khoan tròn đỏ) hoặc ta có thể kéo thả trực tiếp vào đó
1.7.3 Animation
Trang 35- 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
a Kỹ thuật tạo animation
- Kỹ thuật 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à mộ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
- Kỹ thuật skeletal hay spine hay 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 36- 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ớ
b Tạo animation bằng Unity
- Cách tạo animation theo kỹ thuật Key Frame Cách tạo animation theo skeletal cũng tương tự
- Từ phần trước chúng ta đã tạo được những Sprite cơ bản như sau:
+ Bước 1: Tạo một Empty GameObject đặt tên là MainCharacter (Parent
Object)
+ Bước 2: Tạo một đối tượng Empty GameObject nữa, đặt tên là Animations, là
đối tượng con của MainCharacter (Đối tượng con nên đặt ở vị trí 0,0,0) + Bước 3: Thêm Sprite Render cho đối tượng con Animations vừa tạo Rồi chọn
sprite hiển thị mặc định cho Animation này Kết quả như sau:
Trang 37+ Bước 4: Chọn đối tượng MainCharacter ở cửa sổ Hierarchy, rồi chọn Menu ->
Window -> Animation
- Một cửa sổ Animation editor hiện ra như sau:
+ Hình chữ nhật đỏ nhỏ: nút play để xem trước animation
+ Hình chữ nhật đỏ lớn: danh sách các clip hiện thời của aniamtion
+ Hình chữ nhật vàng: thanh key frame
- Đầu tiên ta sẽ click vào danh sách clip rồi chọn Create New Clip, ta đặt tên clip
là Running, rồi save lại ở thư mục Animations của Assets
- Bước 5: Ở cửa sổ Animation Editor, chọn Add Curve, chọn Animations (Đối tượng con của đối tượng MainCharacter) chọn Sprite Render, chọn Sprite
(Đối với một clip bất kỳ, bước này bắt buộc phải có)
4 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)