Đồ án Xây dựng game ném gạch

pdf 43 trang thiennha21 14/04/2022 3333
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Xây dựng game ném gạch", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfdo_an_xay_dung_game_nem_gach.pdf

Nội dung text: Đồ án Xây dựng game ném gạch

  1. TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN KHOA KHOA HỌC MÁY TÍNH  NGUYỄN PHI HẬU XÂY DỰNG GAME NÉM GẠCH ĐỒ ÁN TỐT NGHIỆP NGÀNH: CÔNG NGHỆ THÔNG TIN (ỨNG DỤNG PHẦN MỀM) NIÊN KHÓA: 2017 - 2020 Đà Nẵng, 01/2021
  2. TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN KHOA KHOA HỌC MÁY TÍNH  NGUYỄN PHI HẬU MÃ HSSV: CCCT17A003 XÂY DỰNG GAME NÉM GẠCH ĐỒ ÁN TỐT NGHIỆP NGÀNH: CÔNG NGHỆ THÔNG TIN (ỨNG DỤNG PHẦN MỀM) Giảng viên hƣớng dẫn: ThS. Nguyễn Thanh Cẩm Đà Nẵng, 01/2021
  3. LỜI CẢM ƠN Chúng em xin chân thành cảm ơn Khoa Khoa học máy tính, trƣờng ĐH CNTT và Truyền thông Việt Hàn đã tạo điều kiện tốt cho em thực hiện đề tài này. Em xin chân thành cảm ơn Thầy Nguyễn Thanh Cẩm, 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 đề tài. Em xin 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 vừa qua. Em xin gửi lòng biết ơn sâu sắc đến Ba, Mẹ, các anh chị và bạn bè đã an ủng hộ, giúp đỡ và động viên chúng em trong những lúc khó khăn cũng nhƣ trong suốt thời gian học tập và nghiên cứu. 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 không thể tránh những thiếu sót, kính mong sự thông cảm và tận tình chỉ bảo của quí Thầy Cô và các bạn. Sinh viên thực hiện Nguyễn Phi Hậu i
  4. MỤC LỤC LỜI CẢM ƠN i MỤC LỤC ii DANH MỤC HÌNH ẢNH v LỜI MỞ ĐẦU 1 1. Lý do chọn đề tài 1 2. Mục tiêu và nhiệm vụ nghiên cứu 1 3. Đối tƣợng và phạm vi nghiên cứu 2 4. Phƣơng pháp nghiên cứu 2 5. Dự kiến kết quả 2 6. Ý nghĩa khoa học và thực tiễn 2 7. Nội dung đồ án tốt nghiệp 2 CHƢƠNG 1: CƠ SỞ LÝ THUYẾT 3 1.1. TỔNG QUAN VỀ UNITY 3 1.1.1. Unity là gì? 3 1.1.2. Tính năng của Unity 3 1.1.3. Sơ lƣợc lịch sử hình thành và phát triển của Unity 5 1.2. TỔNG QUAN VỀ GAME ENGINE 6 1.2.1. Khái niệm 6 1.2.2. Mục đích 6 1.2.3. Ảo hóa phần cứng (trừu tƣợng hóa phần cứng – Hardware Abstraction) 7 1.2.4. Lịch sử 7 1.2.5. Xu hƣớng hiện tại 7 1.2.6. Phần mềm trung gian 8 1.3. TỔNG QUAN KIẾN TRÚC GAME ENGINE 8 1.4. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C# 11 1.4.1 Tổng quan về C# 11 1.4.2 Các đặc điểm của C# 11 1.4.3 Ƣu điểm và nhƣợc điểm của C# 12 1.5. TÌM HIỂU VỀ CÔNG CỤ HỖ TRỢ VISUAL STUDIO 12 1.5.1 Giới thiệu 12 1.5.2 Lý do nên dùng Visual Studio 12 ii
  5. CHƢƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 14 2.1. CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG 14 2.1.1. Rendering (kết xuất hình ảnh) 14 2.1.2. Lighting (ánh sáng) 14 2.1.3. Terrains (địa hình) 14 2.1.4. Substances (Texture thông minh) 14 2.1.5. Physics (vật lý) 14 2.1.6. Pathfinding (tìm đƣờng) 15 2.1.7. Audio (âm thanh) 15 2.1.8. Programming (lập trình) 15 2.1.9. Networking 15 2.2. CÁC THÀNH PHẦN XÂY DỰNG GAME 15 2.2.1. GameObject 15 2.2.2. Component 16 2.2.3. Sprite 17 2.2.4. Animation 18 2.2.5. Key Frame 19 2.2.6. Prefabs 19 2.2.7. Sound 19 2.2.8. Script 20 2.2.9. Scene 21 2.2.10. Assets 21 2.2.11. Camera 22 2.2.12. Transform 23 2.3. MỘT SỐ VẤN ĐỀ VÀ GIẢI PHÁP KHI XÂY DỰNG GAME 23 2.3.1. Load hoạt họa 23 2.3.2. Thêm sự kiện vào chuyển động của nhân vật 24 2.3.3. Xây dựng giao diện Game 24 2.3.4. Âm thanh trong game 26 CHƢƠNG 3: CHƢƠNG TRÌNH DEMO 30 3.1. GIỚI THIỆU GAME 30 3.2. CÁC QUY LUẬT CHƠI CHÍNH 30 iii
  6. 3.2.1. Di chuyển 30 3.2.2. Điểm 31 3.2.3. Tạm dừng game 31 3.3. DỮ LIỆU GAME NÉM GẠCH 32 3.3.1. Màn hình bắt đầu lập trình 32 3.3.2. Các Script có trong Game 33 KẾT LUẬN 34 TÀI LIỆU THAM KHẢO vi iv
  7. DANH MỤC HÌNH ẢNH Hình 1.1. Hình minh họa đa nền 3 Hình 1.2. Tổng quan kiến trúc Unity 10 Hình 2.1. Các GameObject 16 Hình 2.2. Các thành phần trong đối tƣợng 17 Hình 2.3. Sprites 18 Hình 2.5. Các prefabs 19 Hình 2.7. Lập trình Unity bằng C# trên Visual Studio 20 Hình 2.8. Các script cấu tạo game hoàn chỉnh 21 Hình 2.9. Các Scene 21 Hình 2.10. Các thành phần trong file Assets 22 Hình 2.12. Transform 23 Hình 2.13. Các prefab 24 Hình 2.14. Hàm destroy 24 Hình 2.15. GUI Button 25 Hình 2.16. Áp dụng GUIStyle lên Label 25 Hình 2.17. Vẽ hình ảnh trên GUI 26 Hình 2.18. Thêm thành phần Audio Source 27 Hình 2.19. Thêm file âm thanh cho thành phần AudioSource 27 Hình 2.20. Thông tin âm thanh 28 Hình 3.1. Màn hình để bắt đầu chơi 30 Hình 3.2. Màn hình để chơi game 31 Hình 3.3. Màn hình GameOver 31 Hình 3.4. Pause Game 32 Hình 3.5. Tổng thể các scene để lập trình 32 v
  8. Xây dựng Game ném gạch LỜI MỞ ĐẦU 1. Lý do chọn đề tài Trong thời đại công nghệ thông tin nhƣ hiện nay, sản phẩm công nghệ ngày càng chịu sự đánh giá khắt khe hơn từ phía những ngƣời dùng, đặc biệt là về sản phẩm Game đƣợc nhận rất nhiều sự đánh giá từ phía các Game thủ, hay chỉ là những ngƣời chơi bình thƣờng. Ngành công nghiệp Game hiện nay có thể nói là bùng nổ, với tốc độ phát triển chóng mặt, rất nhiều những Game hay và hấp dẫn đƣợc ra đời trong thời quan qua. Phía sau những Game phát triển và nổi tiếng nhƣ vậy đều có một Game Engine. Game Engine là công cụ hỗ trợ, một Middleware giúp ngƣời phát triển viết Game một cách nhanh chóng và đơn giản, đồng thời cung cấp khả năng tái sử dụng tài nguyên và mã nguồn cao do có thể phát triển nhiều Game từ một Game Engine. Từ xu hƣớng phát triển và những bất cập trên, đồ án này sẽ khảo sát và nghiên cứu về Engine Unity – một Game Engine rất phổ biến và không kém mạnh mẽ hiện nay nhằm thực nghiệm việc phát triển một trò chơi (Demo) Ném gạch 2D. Chuẩn bị kiến thức và kỹ năng cho định hƣớng nghề nghiệp (phát triển Game) sau này của chúng em, góp phần vào sự phát triển của ngành công nghiệp Game nƣớc nhà. Các chƣơng đầu trong tài liệu sẽ trình bày lần lƣợt các khái niệm chung về Game Engine và thế giới 2D. Các chƣơng tiếp theo sẽ giới thiệu về Engine Unity bao gồm các đặc điểm, tính năng, công cụ và thành phần trong Engine này. Sau những nội dung về thiết kế, tài liệu sẽ trình bày về việc lập trình trên Unity khi giới thiệu về ngôn ngữ lập trình cùng các lớp, hàm trong thƣ việc dựng sẵn của Unity thông qua các ví dụ thực tế khi phát triển một game Ném gạch. Cuối cùng là giới thiệu về bối cảnh, cốt truyện, tài liệu hƣớng dẫn sử dụng của trò chơi Demo cùng chƣơng tổng kết về các khó khăn và những thành quả trong suốt quá trình phát triển trò chơi Demo trên Unity. 2. Mục tiêu và nhiệm vụ nghiên cứu Mục tiêu nghiên cứu - Xây dựng đƣợc game hoàn chỉnh. - Tạo hiệu ứng và âm thanh Nhiệm vụ nghiên cứu - Tìm hiểu xây dựng kịch bản game trên Unity. Nguyễn Phi Hậu – Lớp CCCT17A 1
  9. Xây dựng Game ném gạch 3. Đối tƣợng và phạm vi nghiên cứu Đối tƣợng nghiên cứu - Lập trình game trên Unity Phạm vi nghiên cứu - Xây dựng game hoàn thành ở mức độ cơ bản 4. Phƣơng pháp nghiên cứu - Nghiên cứu lý thuyết. - Tham khảo internet. - Xây dựng game theo mục tiêu đề ra. 5. Dự kiến kết quả - Hoàn thành game Ném gạch. 6. Ý nghĩa khoa học và thực tiễn Ý nghĩa khoa học - Tìm hiểu về thị trƣờng game - Nghiên cứu cách làm game 2D Ý nghĩa thực tiễn - Học hỏi và tích lũy kinh nghiệm về làm game - Biết đƣợc cách tạo ra game 7. Nội dung đồ án tốt nghiệp Ngoài phần mở đầu, kết luận và tài liệu tham khảo, nội dung của đồ án tốt nghiệp gồm các chƣơng sau: Chƣơng 1. Cơ sở lý thuyết. Chƣơng 2. Phân tích thiết kế hệ thống. Chƣơng 3. Chƣơng trình Demo. Nguyễn Phi Hậu – Lớp CCCT17A 2
  10. Xây dựng Game ném gạch CHƢƠNG 1: CƠ SỞ LÝ THUYẾT 1.1. TỔNG QUAN VỀ UNITY 1.1.1. Unity là gì? Unity là một cross- flatform game engine tạm hiểu là công cụ phát triển game đa nền tảng đƣợc phát triển bởi Unity Technologies. Game engine này đƣợc sử dụng để phát trển game trên PC, consoles, thiết bị di động và trên websites. Unity đƣợc dùng để làm video game, 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 2D, 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. Sức mạnh Unity có thể tạo ra đƣợc nhiều loại game 2D. 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. Hình 1.1. Hình minh họa đa nền 1.1.2. Tính năng của Unity Chức năng cốt l i đa dạng bao gồm: cung cấp công cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2D hoặc 3D, công cụ vật lý (tính toán và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động, trí tuệ nhân tạo, phân luồng, tạo dò ng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị và kết nối mạng. Nhờ có các engine mà công việc làm game trở nên ít tốn kém và đơn giản hơn. Nguyễn Phi Hậu – Lớp CCCT17A 3
  11. Xây dựng Game ném gạch - 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 trong ngay lúc xây dựng (live game preview). - Chƣơng trình độc lập trên Windows mà Mac OS. - Trên web, thông qua Unity Web Player plugin cho Internet Explorer, FireFox, Safari, Opera, Chrome, cha cả Windows và Mac OS. - Trên Mac OS Dashboard widget. - Cho Nintendo Wii (cần mua license thêm) - Cho iPhone, iPad application (cần mua license thêm) - Cho Google Android (cần mua license thêm) - Cho Microsoft Xbox 360 (cần mua license thêm) - Cho Sony PlayStation 3 (cần mua license thêm) - Hỗ trợ đa nền tảng: Một trong các thế mạnh của Unity chính là khả năng hỗ trợ gần nhƣ toàn bộ các nền tảng hiện có bao gồm: PlayStation 3, Xbox 360, Wii U, iOS, Android, Windows, Blackberry 10, OS X, Linux, trình duyệt Web và cả Flash. Nói cách khác, chỉ với một gói engine, các studio có thể làm game cho bất kỳ hệ điều hành nào và dễ dàng convert chúng sang những hệ điều hành khác nhau. Đồng thời, đây cũng là giải pháp cho các game online đa nền tảng – có thể chơi đồng thời trên nhiều hệ điều hành, phần cứng khác nhau nhƣ Web, PC, Mobile, Tablet . - Dễ sử dụng: Unity đƣợc built trong một môi trƣờng phát triển tích hợp, cung cấp một hệ thống toàn diện cho các lập trình viên, từ soạn thảo mã nguồn, xây dựng công cụ tự động hóa đến trình sửa lỗi. Do đƣợc hƣớng đến đồng thời cả lập trình viên không chuyên và studio chuyên nghiệp, nên Unity khá dễ sử dụng. Hơn nữa, đây là một trong những engine phổ biến nhất trên thế giới, ngƣời dùng có thể dễ dàng tìm kiếm kinh nghiệm sử dụng của tiền bối trên các forum công nghệ. - Tính kinh tế cao: Unity Technologies hiện cung cấp bản miễn phí engine Unity cho ngƣời dùng cá nhân và các doanh nghiệp có doanh thu dƣới 100.000 USD/năm. Với bản Pro, ngƣời dùng phải trả 1.500 USD/năm – một con số rất khiêm tốn so với những gì engine này mang lại. - 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 Nguyễn Phi Hậu – Lớp CCCT17A 4
  12. Xây dựng Game ném gạch khi viết game trên Unity này, bởi công việc tạo các mô hình 2D, 3D sẽ trở nê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 nhƣ chƣa xong trong đó 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.1.3. Sơ lƣợc lịch sử hình thành và phát triển của Unity a) Hình thành Phần lõi của Unity ban đầu đƣợc viết vớ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 phiên bản 1.0. Đến năm 2007, Unity đƣợc nâng lên phiên bản 2.0. 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 và bây giờ là phiên bản Unity 5. Có thể thấy tốc độ phát triển của Unity khá nhanh. b) Giải thƣởng Unity đã đoạt đƣợc nhiều giải lớn với những giải chính nhƣ sau: - 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 dụng cụ phát triển game đạt đƣợc giải chất lƣợng do giải thƣởng uy tín này đƣa ra. - Năm 2009, Unity Technologies có tên trong Top 5 công ty game của năm do Gamasutra tổ chức. - Năm 2010, Unity đạ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 c) 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ê Nguyễn Phi Hậu – Lớp CCCT17A 5
  13. Xây dựng Game ném gạch 1.2. TỔNG QUAN VỀ GAME ENGINE 1.2.1. Khái niệm Một game engine là một phần mềm đƣợc viết để thiết kế và phát triển video game, hiểu đơn giản nó là loại phần mềm trung gian kết nối tƣơng tác của nhiều ứng dụng trong cùng 1 hệ thống với nhau. Có rất nhiều loại game engine dùng để thiết kế game cho các hệ máy nhƣ hệ consoles hay máy tính cá nhân(PC). Chức năng cốt lõi của game engine phần lớn nằm trong công cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2 chiều (2D) hay 3 chiều(3D), công cụ vật lý (hay công cụ tính toán và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động (animation), trí tuệ nhân tạo, phân luồng, tạo dòng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị, và kết nối mạng. Quá trình phát triển Game tiết kiệm đƣợc rất nhiều thời gian và kinh phí vào việc tái sử dụng và tái thích ứng một Engine để tạo nhiều Game khác nhau. 1.2.2. Mục đích Game Engine cung cấp một bộ các công cụ phát triển trực quan và có thể tái sử dụng từng thành phần trong đó. Nói chung các bộ công cụ này cung cấp một môi trƣờng phát triển tích hợp đƣợc đơn giản hóa. Phát triển ứng dụng nhanh (Rapid Application Development) cho Game theo cách lập trình hƣớng dữ liệu. Những Game Engine này đôi khi còn đƣợc gọi là các phần mềm trung gian cho Game (Game Middleware), nhƣ ý nghĩa của thuật ngữ, chúng cung cấp một nền tảng phần mềm linh hoạt và dễ dàng sử dụng lại với mọi chức năng cốt lõi cần thiết ngay trong nó để có thể phát triển một ứng dụng Game đồng thời giảm giá thành, độ phức tạp, và kịp thời hạn phát hành tất cả các yếu tố quan trọng trong ngành công nghiệp Game đầy cạnh tranh. Giống nhƣ các phần mềm trung gian khác, Game Engine thƣờng cung cấp một nền tảng trừu tƣợng hóa, cho phép một Game có thể chạy trên nhiều hệ máy bao gồm các hệ console hoặc máy tính cá nhân với một vài thay đổi trong mã nguồn của Game đó. Thông thƣờng, phần mềm trung gian cho Game đƣợc thiết kế với một nền tảng kiến trúc dựa trên các thành phần khác, cho phép các hệ thống khác nhau trong Engine có thể thay thế hoặc mở rộng với các phần mềm trung gian khác chuyên biệt hơn nhƣ là Havok cho hệ thống vật lý trong Game, Miles Sound System cho âm thanh, hay Bink cho các đoạn video. Một số Game Engine chỉ cung cấp khả năng dựng hình 3D thời gian thực hay một khả năng riêng biệt nào khác thay vì rất nhiều chức năng trong Nguyễn Phi Hậu – Lớp CCCT17A 6
  14. Xây dựng Game ném gạch phạm vi rộng mà Game yêu cầu. Loại Engine này thƣờng đƣợc gọi là: Graphics Engine . Một vài ví dụ cho các Engine đồ họa là: RealmForge, Truevision3D, OGRE, Crystal Space, Genesis3D, Vision Engine, Irrlich và JMonkey Engine. 1.2.3. Ảo hóa phần cứng (trừu tƣợng hóa phần cứng – Hardware Abstraction) Thông thƣờng, Engine 3D hay hệ thống kết xuất đồ họa trong hame Engine thƣờng đƣợc xây dựng trên một nền tảng giao diện lập trình ứng dụng đồ họa nhƣ Direct3D hay OpenGl cung cấp sẵn một hệ ảo hóa cho GPU hay card đồ họa. Thƣ viện mã nguồn cấp thấp nhƣ DirectX, SDL, và OpenAL (thƣ viện âm thanh mã nguồn mở) cũng thƣờng đƣợc sử dụng trong các Game khi chúng cung cấp khả năng truy cập phần cứng độc lập. 1.2.4. Lịch sử Thuật ngữ Game Engine xuất hiện vào giữa những năm 90, đặc biệt là trong mối quan hệ giữa Game 3D. Nhƣ các thƣơng hiệu nổi tiếng của Software: Doom và Quake, thay vì phải làm việc từ đầu, các nhà phát triển khác sẽ có quyền truy nhập vào phần lõi của Game và thiết kế hình ảnh, nhân vật, vũ khí, và các màn chơi của riêng họ - gọi là Game Content (nội dung Game) hay Game Assets . Các game sau này, nhƣ Quake III Arena và sản phẩm năm 1988 của Epic Games: Unreal đƣợc thiết kế với cách tiếp cận mới này, Game Engine và nội dung Game đƣợc chia thành các phần riêng biệt để phát triển. Engine có thể tái sử dụng khiến việc phát triển Game tiếp theo nhanh hơn và dễ dàng hơn, một thuận lợi to lớn trong ngành công nghiệp cạnh tranh này. Game Engine hiện đại là một trong những ứng dụng đƣợc viết ra (bằng các ngôn ngữ lập trình) phức tạp nhất, thƣờng xuyên phải có rất nhiều tinh chỉnh trong hệ thống để đảm bảo kiểm soát chính xác trải nghiệm ngƣời dùng. Sự phát triển liên tục của Game Engine đã tạo ra một sự phân chia mạnh mẽ giữa các công việc dựng hình, viết kịch bản, thiết kế hình ảnh, và thiết kế màn chơi. Hiện nay thông thƣờng một đội ngũ phát triển Game điển hình phải có số lƣợng họa sĩ gấp vài lần số lƣợng lập trình viên. 1.2.5. Xu hƣớng hiện tại Với công nghệ tạo Game Engine càng phát triển và trở nên thân thiện hơn với ngƣời dùng, ứng dụng của nó càng đƣợc mở rộng, và giờ đây đƣợc sử dụng để tạo các Game mang mục đích khác với giải trí đơn thuần nhƣ: mô phỏng, huấn luyện ảo, y tế ảo, và mô phỏng các ứng dụng quân sự. Nhiều Game Engine đang đƣợc tạo ra bằng Nguyễn Phi Hậu – Lớp CCCT17A 7
  15. Xây dựng Game ném gạch các ngôn ngữ lập trình cấp cao nhƣ Java cà C# hay.NET (ví dụ: TorqueX, và Visual3D.NET) hay Python (Panda3D). Vì hâu hết các game 3D hiện nay đều có giới hạn cho GPU, khả năng gây chậm của các ngôn ngữ lập trình cấp cao trở nên không đáng kể, trong khi việc tăng năng suất đƣợc cung cấp bởi các ngôn ngữ này lại có lợi nhuận cho các nhà phát triển Game Engine. 1.2.6. Phần mềm trung gian Một số hãng hiện nay chuyên tập trung vào phát triển các bộ phần mềm gọi là phần mềm trung gian (Middleware). Các nhà phát triển Middleware cố gắng phát triển một bộ phần mềm mạnh mẽ bao gồm hầu hết các yếu tố một nhà phát triển Game cần đến để xây dựng một Game. Phần lớn các Middleware cung cấp các cơ sở để phát triển Game một cách dễ dàng, nhƣ hình ảnh, âm thanh, hệ thống vật lý và chức năng AI. Gamebryo và RenderWare là hai phần mềm trung gian đƣợc sử dụng rộng rãi. Một số Middleware chỉ làm một chức năng nhƣng nó còn hiệu quả hơn cả toàn bộ Engine. Ví dụ, SpeedTree đƣợc sử dụng để dựng hình ảnh cây cối thêm thực tế trong Game nhập vai The Elder Scrolls IV: Oblivion. Bốn gói phần mềm trung gian đƣợc sử dụng rỗng rãi nhất, thƣờng đƣợc cung cấp dƣới dạng một chức năng bổ sung trong một hệ thống Engine gồm có Bink của hãng RAD Game Tools, hãng Firelight với FMOD, Havok, và GFx của Scaleform. RAD Game Tools phát triển Bink cho dựng hình video cơ bản, đi cùng với âm thanh Miles, và dựng hình ảnh 3D Granny. FMOD của Firelight là một thƣ viện và bộ công cụ phần mềm âm thanh mạnh mẽ giá rẽ. Havok cung cấp một hệ thống mô phỏng vật lý mạnh, cùng với các bộ phần mềm về hình ảnh động và mô phỏng hành vi. Scaleform đem lại GFx dùng cho các biểu diễn cao cấp trên nền giao diện Flash, cùng với các giải pháp trình chiếu video chất lƣợng cao, và một Input Method Editor (IME) phần bổ sung nhằm hỗ trợ trò chuyện trong Game bằng ngôn ngữ Châu Á 1.3. TỔNG QUAN KIẾN TRÚC GAME ENGINE - Quá trình phát triển game tiết kiệm đƣợc rất nhiều thời gian và kinh phí vào việc tái sử dụng và tái thích ứng một engine để tạo nhiều game khác nhau. - Game Engine không chỉ bao gồm thành phần tạo hình ảnh mà bao gồm rất nhiều thành phần khác nhƣ điều khiển luồng, quản lý bộ nhớ, điều khiển âm thanh Nếu Engine chỉ có chức năng render hình ảnh thì thƣờng đƣợc gọi là Graphic Engine. Nguyễn Phi Hậu – Lớp CCCT17A 8
  16. Xây dựng Game ném gạch - Việc lựa chọn một Game Engine trƣớc khi phát triển sẽ giúp chúng ta giảm thiểu những sai sót không đáng có trong quá trình phát triển phần mềm. Có một số tiêu chí chúng ta cần chú ý nhƣ sau: Giá thành: Một số Game Engine có giá thành cao, tuy có rất nhiều chức năng và khả năng hỗ trợ tốt. Do vậy chúng ta cần xem xét đến vấn đề này trƣớc tiên. Nếu là ngƣời lập trình thông thƣờng thì với mức giá khoảng 1500$ cho 1 Engine rõ ràng là một vấn đề lớn. Thông thƣờng hiện nay có khá nhiều Engine không tính phí cho hiệu năng cao. Từ phần tiếp theo chúng ta sẽ chỉ bàn đến các Engine free này mà thôi. Hiệu năng: Trƣớc khi chúng ta lựa chọn một Engine, chúng ta cần kiểm tra hiệu năng của Engine này trên nền tảng mà chúng ta hƣớng đến. Ví dụ: Một engine có hiệu năng cao trên PC nhƣng lại cho hiệu năng thấp hoặc không hỗ trợ đầy đủ trên Android. Hoặc 1 Engine chỉ cho 1-2 FPS (Frame Per Second) trong khi 1 Engine khác cho 30 FPS với cùng một cách lập trình. Cộng đồng: Số lƣợng ngƣời sử dụng rõ ràng nói lên chất lƣợng của Engine đó. Đồng thời, nhiều ngƣời sử dụng và nhiều lập trình viên có nghĩa là khi bạn vƣớng mắc một vấn đề nào đó, khi đƣa câu hỏi lên, sẽ nhanh có câu trả lời hơn, và câu trả lời chất lƣợng hơn. Tài liệu: Nếu một Engine không có tài liệu cụ thể, r ràng đó là một engine không tốt. Tài liệu cụ thể sẽ giúp bạn rất nhiều khi mới làm quen với Engine, cũng nhƣ giải quyết các vấn đề về thiết kế cũng nhƣ các vấn đề xảy ra trong khi lập trình. Mã nguồn: đôi khi các tài liệu không có đủ thông tin, chúng ta cần tìm hiểu mã nguồn để hiểu cách xử lý của Engine. Một số Engine mặc dù Free nhƣ lại có mã nguồn đóng. Do đó chúng ta cần có sự lựa chọn. Hoặc đôi khi mã nguồn của Engine không thực sự phù hợp với yêu cầu của chúng ta, khi đó chúng ta cần sửa đổi mã nguồn của Engine đó. Mã nguồn mở cũng giúp cho việc sửa lỗi nhanh hơn do có nhiều ngƣời có thể đóng góp hơn. Các tính năng: R ràng mục đích của chúng ta khi sử dụng Engine là tiết kiệm thời gian phát triển và dễ dàng hơn trong quá trình phát triển. Do đó một Engine có nhiều tính năng hơn sẽ giúp chúng ta nhiều hơn, phù hợp hơn trong nhiều ứng dụng. - Qua 6 điểm trên, chúng ta có thể đánh giá và đƣa ra quyết định của mình khi sử dụng một Engine nào đó. Nguyễn Phi Hậu – Lớp CCCT17A 9
  17. Xây dựng Game ném gạch - 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. Hình 1.2. Tổng quan kiến trúc Unity - 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. - GameObject: lớp cha của tất cả các thực thể trong scene. - Component: lớp cha của tất cả các thành phần có thể gắn vào đối tƣợng. - Transform: giúp thay đổi vị trí, xoay, biến đổi tỉ lệ mô hình. Nguyễn Phi Hậu – Lớp CCCT17A 10
  18. Xây dựng Game ném gạch - Input: hỗ trợ lập trình với chuột, cảm ứng đa điểm, cảm biến gia tốc. - Camera: giúp lập trình camera. - Light: giúp tạo ánh sáng trong game. - Projector: giúp chiếu texture lên bề mặt vật thể - ParticleEmitter: hỗ trợ tạo các hiệu ứng particle đẹp mắt. - Audio: hỗ trợ lập trình với âm thanh. - Animation: chạy chuyển động của mô hình nhân vật - Rigibody: 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 - CharacterController: giúp điều khiển nhân vật di chuyển theo độ cao địa hình - Collider: hỗ trợ lập trình va chạm giữa các vật thể. - GUI: giúp lập trình giao diện ngƣời dùng trên Unity. 1.4. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C# 1.4.1 Tổng quan về C# C# là một ngôn ngữ lập trình theo phƣơng pháp lập trình hƣớng đối tƣợng và lập trình trực quan đƣợc phát triển bởi Microsoft. C# ra đời năm 2000, đƣợc thiết kế chủ yếu bởi Anders Hejlsberg – kiến trúc sƣ phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi Đƣợc xây dựng trên nền tảng của hai ngôn ngữ lập trình mạnh nhất đó là C++ và Java. Do đó C# đƣợc miêu tả là ngôn ngữ có sự cân bằng giữa C++, Pascal, Delphi và Java. C# với sự hỗ trợ mạnh mẽ của.NET Framework giúp cho việc tạo một ứng dụng Windows Forms hay WPF (Windows Presentation Foundation) trở nên rất dễ dàng. 1.4.2 Các đặc điểm của C# - Là một ngôn ngữ hƣớng đối tƣợng, trực quan. - Tám mƣơi từ khóa và hơn mƣời kiểu dữ liệu đƣợc dựng sẵn. - Cung cấp những đặc tính hƣớng thành phần (component - oriented) nhƣ là Property, Event. - C# không khuyến khích sử dụng con trỏ nhƣ C++. - C# có bộ Garbage Collector (thu gom rác) sẽ tự động thu gom vùng nhớ khi không còn sử dụng nữa. Nguyễn Phi Hậu – Lớp CCCT17A 11
  19. Xây dựng Game ném gạch - C# đã loại bỏ đa kế thừa trong C++ mà thay vào đó C# sẽ hỗ trợ thực thi giao diện interface. Nguyên nhân lựa chọn C# là vì: C# là một ngôn ngữ đơn giản. C# là một ngôn ngữ hiện đại. C# là một ngôn ngữ mạnh mẽ và mềm dẻo. C# là một ngôn ngữ ít từ khóa. C# là một ngôn ngữ phổ biến. C# mang sức mạnh của nhiều ngôn ngữ (C++, Java ) 1.4.3 Ƣu điểm và nhƣợc điểm của C# - Một số ƣu điểm nổi bật của C#: + Gần gũi với các ngôn ngữ lập trình thông dụng (C++, Java, Pascal). + Xây dựng dựa trên nền tảng của các ngôn ngữ lập trình mạnh nên thừa hƣởng những ƣu điểm của những ngôn ngữ đó. + Đã cải tiến các khuyết điểm của C/C++ nhƣ con trỏ, các hiệu ứng phụ + Dễ tiếp cận, dễ phát triển. + Đƣợc hỗ trợ của.NET Framework. - Một số nhƣợc điểm: + Nhƣợc điểm lớn nhất của C# là chỉ chạy trên nền Windows và có cài.NET Framework. + Thao tác đối với phần cứng yếu hơn so với các ngôn ngữ khác. Hầu hết phải dựa vào Windows. 1.5. TÌM HIỂU VỀ CÔNG CỤ HỖ TRỢ VISUAL STUDIO 1.5.1 Giới thiệu Visual Studio là (IDE – Integrated Development Environment) một bộ công cụ phát triển phần mềm do Microsoft phát triển. Visual Studio cũng là một phần mềm đƣợc sử dụng bởi các lập trình viên để xây dựng nên các sản phẩm phần mềm. 1.5.2 Lý do nên dùng Visual Studio - Hỗ trợ lập trình trên nhiều ngôn ngữ nhƣ C/C++, C#, F#, Visual Basic, HTML, CSS, JavaScript. Phiên bảnVisual Studio 2015 có hổ trợ ngôn ngữ Python. Nguyễn Phi Hậu – Lớp CCCT17A 12
  20. Xây dựng Game ném gạch - Visual Studio là một công cụ hỗ trợ việc Debug một cách mạnh mẽ, dễ dàng nhất (Break Point, xem giá trị của biến trong quá trình chạy, hỗ trợ debug từng câu lệnh). - Giao diện Visual Studio rất dễ sử dụng đối với ngƣời mới bắt đầu. - Visual Studio hỗ trợ phát triển ứng dụng desktop MFC, Windows Form,Universal App, ứng dụng mobileWindows Phone 8/8.1, Windows 10, Android (Xamarin), iOS và phát triển website Web Form, ASP.NET MVC và phát triển Microsoft Office. - Visual Studio hỗ trợ kéo thả để xây dựng ứng dụng một cách chuyên nghiệp, giúp các bạn mới bắt đầu có thể tiếp cận nhanh hơn. - Visual Studio cho phép chúng ta tích hợp những extension từ bên ngoài nhƣ Resharper (hổ trợ quản lý và viết mã nhanh cho các ngôn ngữ thuộc.Net), hay việc cài đặt thƣ viện nhanh chóng thông qua Nuget. - Visual Studio đƣợc sử dụng đông đảo bởi lập trình viên trên toàn thế giới. Nguyễn Phi Hậu – Lớp CCCT17A 13
  21. Xây dựng Game ném gạch CHƢƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2.1. CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG 2.1.1. Rendering (kết xuất hình ảnh) Giống nhƣ tất cả các Engine hoàn chỉnh khác, Unity hỗ trợ đầy đủ khả năng kết xuất hình ảnh (Rendering) cùng nhiều hỗ trợ cho phép áp dụng các công nghệ phổ biến trong vực đồ họa 3D nhầm cải thiện chất lƣợng hình ảnh. Các phiên bản gần đây nhất của Unity đƣợc xây dựng lại thuật toán nhằm cải thiện hiệu suất kết quả hình ảnh đồng thời tăng cƣơng chất lƣợng hình ảnh sau khi kết xuất. 2.1.2. Lighting (ánh sáng) Ánh sáng là một điều thiết yếu giúp môi trƣờng trở nên đẹp và thực tế hơn. Unity cũng cung cấp nhiều giải pháp đa dạng cho phép chúng ta áp dụng ánh sáng một cách tốt nhất vào môi trƣờng trong trò chơi với nhiều loại nguồn sáng nhƣ ánh sáng có hƣớng (Directional Light), ánh sáng điểm (Point Light), Một số công nghệ và kỹ thuật về ánh sáng đƣợc Unity hỗ trợ: Lingtmapping, Realtime Shadows, hiệu ứng Sunshafts và Lens Flares 2.1.3. Terrains (địa hình) Terrains còn gọi chung là địa hình bao gồm phần đất nền của môi trƣờng trong trò chơi cùng các đối tƣợng gắn liền nhƣ cây, cỏ, Unity cung cấp một công cụ hỗ trợ rất tốt khả năng này với tên gọi là Terrains Tools cho phép chúng ta thiết kế địa hình với các công cụ vẽ dƣới dạng Brush có nhiều thông số tùy chỉnh để tạo hình và lát Texture cho địa hình. Cùng với Terrain Tools là Tree Creator, một công cụ mạnh mẽ cho phép chúng ta tạo ra cây cối với hình dạng, kích thƣớc và kiểu cách đa dạng. 2.1.4. Substances (Texture thông minh) Substance có thể hiểu đơn giản là một dạng tùy biến Textures nhằm làm đa dạng chúng trong nhiều điều kiện môi trƣờng khác nhau. Unity cung cấp khả năng này thông qua các API dựng sẵn trong thƣ viện, hỗ trợ lập trình viên lập trình để tùy biến hình ảnh đƣợc kết quả của Texture 2.1.5. Physics (vật lý) Physx là một Engine mô phỏng và xử lí vật cực kỳ mạnh mẽ đƣợc phát triển bởi nhà sản xuất card đồ họa hàng đầu thế giới NVIDIA. Unity đã tích hợp Engine này vào Nguyễn Phi Hậu – Lớp CCCT17A 14
  22. Xây dựng Game ném gạch để đảm nhận mọi vấn đề vật lý. Một số vấn đề vật lý đƣợc hỗ trợ bởi Unity nhƣ: Soft Bodies,Rigibodies, Ragdolls, Joints, Cars, 2.1.6. Pathfinding (tìm đƣờng) Đây là một tính năng rất mới mẻ đến từ phiên bản Unity 3.5. Với các phiên bản trƣớc, để phát triển khả năng tìm đƣờng cho trí thông minh nhân tạo (AI), nhà phát triển phải hoàn toàn tự xây dựng cho mình một hệ thống tìm đƣờng riêng biệt. Tuy nhiên ở phiên bản 3.5 đến nay, Unity hỗ trợ cho chúng ta tình năng Pathfinding cho phép tạo ra khả năng tìm đƣờng cho AI nhờ vào khái niệm lƣới định hƣớng (NavMesh). 2.1.7. Audio (âm thanh) Về âm thanh, Unity tích hợp FMOD – công cụ âm thanh thuộc hàng mạnh nhất hiện nay. Qua đó Unity hỗ trợ chúng ta nhập và sử dụng nhiều định dạng tập tin âm thanh khác nhau 2.1.8. Programming (lập trình) Lập trình là một trong những yếu tố quan trọng nhất trong phát triển Game. Lập trình cho phép nhà phát triển tạo nên khả năng tƣơng tác, trí thông minh và yếu tố Gameplay cho trò chơi. Unity cho phép chúng ta lập trình bằng nhiều ngôn ngữ mạnh mẽ và phổ biến với các lập trình viên nhƣ: C#, Java Script và Boo. 2.1.9. Networking Networking cho phép chúng ta tạo ra các trò chơi trực tuyến (online) – một trong những thể loại trò chơi thu hút đƣợc nhiều ngƣời chơi nhất. Tính năng này sẽ hỗ trợ đầy đủ để chúng ta tạo nên các khía cạnh phổ biến trong Game online nhƣ hệ thống điểm kinh nghiệm, chat và tƣơng tác thời gian thực, Một số tính năng cung cấp bởi Networking nhƣ: State Synchronization, Realtime Networking, Remote Procedure Calls, Backend Connectivity, Web Browser Integration, Web Connectivity. 2.2. CÁC THÀNH PHẦN XÂY DỰNG GAME 2.2.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 đó. Nguyễn Phi Hậu – Lớp CCCT17A 15
  23. Xây dựng Game ném gạch Ví dụ: cây cối, xe cộ, nhà cửa, ngƣời Hình 2.1. Các GameObject 2.2.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. Nguyễn Phi Hậu – Lớp CCCT17A 16
  24. Xây dựng Game ném gạch Hình 2.2. Các thành phần trong đối tƣợng 2.2.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 đó. Nguyễn Phi Hậu – Lớp CCCT17A 17
  25. Xây dựng Game ném gạch Hình 2.3. Sprites 2.2.4. Animation - 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. Hình 2.4. Animation Nguyễn Phi Hậu – Lớp CCCT17A 18
  26. Xây dựng Game ném gạch 2.2.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. 2.2.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. Hình 2.5. Các prefabs 2.2.7. Sound - Âm thanh trong game. Hình 2.6. Sound Nguyễn Phi Hậu – Lớp CCCT17A 19
  27. Xây dựng Game ném gạch 2.2.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, có thể xem scripts nhƣ là linh hồn của game - Trong Unity có thể dùng ngôn ngữ lập trình C#, Java Script, BOO để lập trình Script. - Unity có hỗ trợ sẵn phần mềm MonoDeveloper dùng để lập trình. Hình 2.7. Lập trình Unity bằng C# trên Visual Studio Nguyễn Phi Hậu – Lớp CCCT17A 20
  28. Xây dựng Game ném gạch Hình 2.8. Các script cấu tạo game hoàn chỉnh 2.2.9. Scene - Quản lý tất cả các đối tƣợng trong một màn chơi của game Hình 2.9. Các Scene 2.2.10. Assets - Bao gồm tất cả những gì phục vụ cho dự án game nhƣ sprite, animation, sound, script, scenes Nguyễn Phi Hậu – Lớp CCCT17A 21
  29. Xây dựng Game ném gạch Hình 2.10. Các thành phần trong file Assets 2.2.11. Camera - 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. Hình 2.11. Camera Nguyễn Phi Hậu – Lớp CCCT17A 22
  30. Xây dựng Game ném gạch 2.2.12. Transform - Là 3 phép biển đổi tịnh tiến, quay theo các trục, và phóng to tu nhỏ một đối tƣợng Hình 2.12. Transform 2.3. MỘT SỐ VẤN ĐỀ VÀ GIẢI PHÁP KHI XÂY DỰNG GAME 2.3.1. Load hoạt họa Game 2D đƣợc xây dựng từ nhiều mô hình 2D đƣợc đặt lên không gian 2 chiều sao cho hài hòa với nhau để tạo thành cảnh vật trong game. Do đó việc nạp và hiển thị đƣợc mô hình 2D trong game là vô cùng quan trọng. Mô hình 2D đƣợc cấu tạo từ rất nhiều đa giác để tạo nên khối vật thể. Ngày nay, trong một mô hình 2D không chỉ đơn thuần chứa một khối vật thể mà nó bao gồm nhiều khối vật thể đƣợc gắn kết với nhau trên một khung xƣơng. Điều này giúp cho mô hình không bị gắn chết một chuyển động vào bên trong và dễ dàng thay đổi chuyển động cho mô hình Các mô hình 2D, 3D thông thƣờng đƣợc thiết kế sẵn bằng các phần mềm thiết kế 3D chuyên dụng nhƣ Adobe InDesign, Adobe Photoshop, Sau đó, mô hình sẽ đƣợc đƣa vào game engine để sử dụng. Engine Unity hỗ trợ rất nhiều định dạng mô hình 2D, 3D khác nhau nhƣ: PNG, JPG khi mô hình đƣợc load vào project ta sẽ chuyển mô hình sang mục Prefab để có thể tái sử dụng nhiều lần Unity có hỗ trợ load mô hình bằng cách kéo thẻ Prefab vào vị trí bất ký trong Scene. Tuy nhiên, để linh hoạt hơn thì chúng ta có thể xử lý bằng code. Trƣớc tiên, ta tạo một file script và gắn nó vào một đối tƣợng trong game bất kì để đoạn script có thể thực thi. Trong file script này, ta khai báo một đối tƣợng kiểu GameObject để lƣu mô hình và dùng hàm Instantiate() để khởi tạo mô hình này ở vị trí góc quay mong muốn. Giải phải ở đây là load mô hình từ Prefab. Nguyễn Phi Hậu – Lớp CCCT17A 23
  31. Xây dựng Game ném gạch Hình 2.13. Các prefab 2.3.2. Thêm sự kiện vào chuyển động của nhân vật Trong lúc lập trình kịch bản game, chúng ta muốn biết khi nào một nhân vật chuyển động xong để có bƣớc xử lý tiếp theo. Ví dụ nhƣ sau khi nhân vật thực thi chuyển động chết thì chúng ta phải hủy đối tƣợng đó khỏi bộ nhớ. Trong Unity, khi một chuyển động chạy xong không tự phát ra sự kiện. Tạo một file script chứa hàm sẽ thực thi sau khi sự kiện xảy ra. Chẳng hạn, file script có nội dung chứa hàm hủy đối tƣợng: Hình 2.14. Hàm destroy Khi chạy game, lúc đối tƣợng chạy animation destroy xong thì sự kiện sẽ đƣợc xảy ra. Nếu chạy animattion khác thì sự kiện không xảy ra. Việc thêm sự kiện vào mô hình giúp ta kiểm soát chuyển động dễ dàng hơn và đƣa ra các xử lý thích hợp ở thời điểm nhất định. 2.3.3. Xây dựng giao diện Game Giao diện đồ họa ngƣời là một phần quan trọng không thể thiếu trong khi xây dựng một ứng dụng game hay bất cứ một ứng dụng nào để vẽ các đối tƣợng đồ họa nhƣ Button, Label, Checkbox, Slider, lên màn hình. Nguyễn Phi Hậu – Lớp CCCT17A 24
  32. Xây dựng Game ném gạch Để làm đƣợc điều này chúng ta dùng lớp GUI, GUI là chữ viết tắt của Graphical User Interface – Giao diện đồ họa ngƣời dùng . Hệ thống GUI của Unity đƣợc gọi là GUIUnity. Để sử dụng đƣợc các phƣơng thức trong GUI ta phải gọi thực hiện từ trong hàm OnGUI() giống nhƣ sự kiện Paint trong C#. Ví dụ sau đây sẽ tạo ra một button đơn giản. Hình 2.15. GUI Button Để tạo một Button hay một thành phần trong GUI đẹp hơn, chúng ta sử dụng GUIStyle – style cài đặt cho các thành phần của GUI. GUIStyle chứa thông tin về font chữ, vị trí đặt biểu tƣợng, hình nền, khoảng cách, Chỉ cần định nghĩa và áp dụng cho một bất kỳ thành phần nào nhƣ Button, Label, Checkbox, Ta có thể xem GUIStyle nhƣ CSS khi thiết kế web site vậy. Ví dụ sau tạo một Label theo một định nghĩa GUIStyle, với kích thƣớc font là 14, chữ in đậm. canh lề chữ ở giữa, nàu chữ đỏ, font Beckasin, vị trí vẽ ra, kích thƣớc hình chữ nhật bao quanh 150x50: Hình 2.16. Áp dụng GUIStyle lên Label Để vẽ một Image ra màn hình, chúng ta sử dụng Texture2D, nó tƣơng tự đối tƣợng Bimap hay Image bên ngôn ngữ C#. Để load hình từ Resources và vẽ ra màn hình chúng ta dùng phƣơng thức DrawTexture() nhƣ sau: Nguyễn Phi Hậu – Lớp CCCT17A 25
  33. Xây dựng Game ném gạch Hình 2.17. Vẽ hình ảnh trên GUI Kết luận: Với lớp GUI trong Unity, chúng ta hoàn toàn xây dựng nên một giao diện tuyệt vời cho ứng dụng game. Ngoài các phƣơng thức của lớp GUI đã nêu trên thì còn rất nhiều phƣơng thức vẽ các đối tƣợng khác nhƣ Radio, Checkbox, Slider 2.3.4. Âm thanh trong game Âm thanh là yếu tố không kém phần quan trọng trong ứng dụng game. Thật nhàm chán khi một cảnh đánh nhau, bắn nhau hay các hiệu ứng đẹp mắt mà không có âm thanh. Âm thanh 3 chiều sẽ làm cho game thực hơn và sống động hơn. Để chơi đƣợc một file âm thanh trong Unity có 2 cách: bằng code hoặc trên giao diện. Dù chọn cách nào thì trƣớc hết chúng ta phải có sẵn các file âm thanh và import vào project. Chọn đối tƣợng vừa tạo và gắn thành phần AudioSource cho đối tƣợng này. AudioSource là một đối tƣợng âm thanh. Muốn Play hay stop, thay đổi cách lặp, tăng giảm volume nhạc thì phải thông qua đối tƣờng này: Nguyễn Phi Hậu – Lớp CCCT17A 26
  34. Xây dựng Game ném gạch Hình 2.18. Thêm thành phần Audio Source Sau khi gắn thành phần âm thanh cho đối tƣợng vừa tạo, chúng ta dễ dàng chỉnh sửa các thông số và gán file âm thanh cho thành phần AudioSource này. Hình 2.19. Thêm file âm thanh cho thành phần AudioSource Nguyễn Phi Hậu – Lớp CCCT17A 27
  35. Xây dựng Game ném gạch Hình 2.20. Thông tin âm thanh Nếu thực hiện xong các bƣớc trên, chúng ta có thể chạy game để nghe thử. Việc tạo đối tƣợng âm thanh trên giao diện khá đơn giản, nhƣng để áp dụng vào game thì không đƣợc linh hoạt bằng cách sử dụng script. Hình 2.21. Sử dụng Script để điều chỉnh âm thanh Nguyễn Phi Hậu – Lớp CCCT17A 28
  36. Xây dựng Game ném gạch Để chơi đƣợc âm thanh trong Unity thì chỉ cần áp dụng kỹ thuật nêu trên là đủ. Ngoài ra còn nhiều thành phần khác nhƣ: AudioListener, AudioSetting để tạo hiệu ứng âm thanh 3 chiều thực hơn cho game. Nguyễn Phi Hậu – Lớp CCCT17A 29
  37. Xây dựng Game ném gạch CHƢƠNG 3: CHƢƠNG TRÌNH DEMO 3.1. GIỚI THIỆU GAME Đặc trƣng của dòng game tính điểm mà em đã xây dựng là chỉ có 1 ngƣời chơi, ngƣời chơi phải di chuyển giá đỡ để tung quả bóng bay lên. Khi quả bóng của chúng ta va vào những viên gạch và vỡ những viên gạch đó thì sẽ đƣợc tính điểm, nếu nhƣ ta không hứng đƣợc quả bóng thì trò chơi sẽ kết thúc và sẽ hiện ra lại menu để ngƣời chơi có thể chơi lại hoặc dừng. Chúng ta phải phá hết những viên gạch thì mới chuyển sang đƣợc level tiếp theo, ban đầu là những viên gạch vàng thì chỉ cần 1 lần va chạm thì sẽ vỡ, ở những level sau sẽ xuất hiện thêm gạch đỏ và xanh thì sức chịu đựng của chúng cũng tăng dần lên và va vào chúng 2-3 lần thì sẽ phá vỡ đƣợc. Game có tất cả là 12 level, độ khó cứ tăng dần theo mỗi level. Hình 3.1. Màn hình để bắt đầu chơi 3.2. CÁC QUY LUẬT CHƠI CHÍNH 3.2.1. Di chuyển Ngƣời chơi sẽ di chuyển bằng cách chạm vào bên phải hoặc bên trái màn hình, di chuyển qua trái, qua phải, để có thể đỡ đƣợc quả bóng bay lên, ngƣời chơi chỉ có thể di chuyển trong phạm vi màn hình camera. Nguyễn Phi Hậu – Lớp CCCT17A 30
  38. Xây dựng Game ném gạch Hình 3.2. Màn hình để chơi game 3.2.2. Điểm. Ngƣời chơi sẽ đƣợc cộng điểm khi phá vỡ đƣợc những viên gạch thì ngƣời chơi sẽ đƣợc cộng 1 điểm. Hình 3.3. Màn hình GameOver 3.2.3. Tạm dừng game Khi đang chơi game nếu ngƣời chơi muốn tạm dừng chỉ cần ấn nút II là sẽ dừng Game Nguyễn Phi Hậu – Lớp CCCT17A 31
  39. Xây dựng Game ném gạch Hình 3.4. Pause Game 3.3. DỮ LIỆU GAME NÉM GẠCH 3.3.1. Màn hình bắt đầu lập trình Game đƣợc hình thành bởi 2 Scene trên màn hình: Hình 3.5. Tổng thể các scene để lập trình Nguyễn Phi Hậu – Lớp CCCT17A 32
  40. Xây dựng Game ném gạch 3.3.2. Các Script có trong Game Hình 3.6. Các Script Nguyễn Phi Hậu – Lớp CCCT17A 33
  41. Xây dựng Game ném gạch KẾT LUẬN Sau nhiều ngày suy nghĩ kĩ để chọn đề tài tốt nghiệp, cuối cùng em cũng đã chọn đƣợc đề tài Xây dựng game Ném gạch trên Unity. Bƣớc đầu tìm hiểu về Unity và Game Engine em gặp rất nhiều khó khăn trong việc tìm tài liệu và xây dựng ý tƣởng game vì tài liệu về unity đa phần bằng tiếng anh, nhƣng sau khoảng 1 tháng cô gắng tìm tòi, học hỏi và tham khảo trên mạng thì em cũng đã làm cho mình đƣợc 1 game gần hoàn chỉnh để phục vụ cho đề tài tốt nghiệp. Trong thời gian làm đề tài em cũng có một số những vấn đề đạt đƣợc và chƣa đạt đƣợc.  Đạt đƣợc - Hiểu đƣợc cấu trúc, cách thức hoạt động, cách thức phát triển ứng dụng trên Unity. - Nâng cao kiến thức lập trình và tiếng anh chuyên ngành thông qua những tài liệu về Unity bằng tiếng anh. - Xây dựng đƣợc nhiều chức năng thông qua ngôn ngữ lập trình C# trên MonoDevelop - Tạo âm thanh cho trò chơi và 1 số chức năng khác. Ngoài những thứ đạt đƣợc thì em còn rất nhiều những vấn đề chƣa đạt đƣợc:  Chƣa đạt đƣợc - Do kiến thức của em về Unity còn hạn hẹp nên các chức năng trong game còn nghèo nàn. - Chƣa xây dựng đƣợc game hoàn chỉnh nhƣ mong muốn. - Các script trong Unity tổ chức chƣa thực sự rõ ràng.  Thuận lợi - Vận dụng đƣợc các kiến thức mà em đã học trong trƣờng để làm đồ án này - Đƣợc sự chỉ dạy tận tình của thầy và các bạn - Tài liệu rất nhiều trên Internet  Khó khăn - Unity là một môi trƣờng lập trình mới đối với em nên khi bắt tay vào làm thì em không biết làm từ đâu và cảm thấy bỡ ngỡ  Kinh nghiệm rút ra Nguyễn Phi Hậu – Lớp CCCT17A 34
  42. Xây dựng Game ném gạch - Phải biết sắp xếp thời gian 1 cách hợp lý nếu không sẽ gặp rất nhiều khó khăn - Làm việc phải tập trung mới có thể hoàn thành tốt đƣợc  Hƣớng phát triển - Tối ƣu hóa để game có thể chạy nhanh hơn - Thời gian càng về sau thì tốc độ của quả bóng càng nhanh và tăng độ khó - Thêm nhiều level và tăng độ khó, kết hợp các item để nâng thêm phần đặc sắc cho game - Cung cấp thêm công cụ để ngƣời chơi có thể chọn và chỉnh sửa tạo riêng cho mình những nhân vật, hiệu ứng âm thanh - Cái thiện trí thông minh của máy Nguyễn Phi Hậu – Lớp CCCT17A 35
  43. TÀI LIỆU THAM KHẢO [1]. (8-25/12/2020) [2]. (1-6/12/2020) [3]. (2-30/12/2020) [4]. (5-12/12/2020) [5]. (4-10/12/2020) [6]. (4-21/12/2020) vi