1. Trang chủ
  2. » Luận Văn - Báo Cáo

Sử dụng unity 3d engine để xây dựng game đua xe trên môi trường android

61 28 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử Dụng Unity 3D Engine Để Xây Dựng Game Đua Xe Trên Môi Trường Android
Tác giả Bùi Hoàng Điểm
Người hướng dẫn ThS. Trần Uyên Trang
Trường học Đại Học Sư Phạm Đà Nẵng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Khoá Luận Tốt Nghiệp
Năm xuất bản 2014
Thành phố Đà Nẵng
Định dạng
Số trang 61
Dung lượng 3,22 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. LÝ DO CHỌN ĐỀ TÀ (10)
  • II. MỤC TIÊU ĐỀ TÀI (10)
  • III. MỤC ĐÍCH NGHIÊN CỨU (10)
  • IV. PHƯƠNG PHÁP NGHIÊN CỨU (11)
  • V. PHẠM VI ĐỀ TÀI (11)
  • CHƯƠNG I: TỔNG QUAN CƠ SỞ LÝ THUYẾT (12)
    • I. GIỚI THIỆU VỀ ANDROID (12)
    • II. TỔNG QUAN VỀ UNITY (18)
      • 1. UNITY LÀ GÌ (18)
        • 2.1 HÌNH THÀNH (20)
        • 2.2. GIẢI THƯỞNG (20)
        • 2.3. KHÁCH HÀNG (21)
      • 3. TÍNH NĂNG CỦA ENGINE UNITY (21)
      • 4. CÁC KHÁI NIỆM CƠ BẢN TRONG UNITY (22)
        • 4.1. ASSET (22)
        • 4.2. SCENE (22)
        • 4.3. GAME OBJECT (23)
        • 4.4. COMPONENT (23)
        • 4.5. SCRIPT (24)
        • 4.6. PREFAB (26)
      • 5. SƠ NÉT VỀ GIAO DIỆN CỦA UNITY (26)
        • 5.1. CỬA SỔ SCENE VÀ HIERARCHY (27)
        • 5.2. INSPECTOR (28)
        • 5.3. CỬA SỔ GAME (28)
        • 5.4. CỬA SỔ PROJECT (29)
      • 6. TỔNG QUAN KIẾN TRÚC ENGINE UNITY TRÊN ANDROID (29)
        • 6.1. KIẾN TRÚC TỔNG QUAN (29)
        • 6.2. CHU KỲ SỐNG CỦA THÀNH PHẦN SCRIPT GẮN TRÊN ĐỐI TƯỢNG GAME (31)
      • 7. KẾT LUẬN (32)
  • CHƯƠNG II: PHÂN TÍCH VÀ THIẾT KẾ (33)
    • I. LOAD MÔ HÌNH 3D (33)
    • II. CHUYỂN ĐỘNG CỦA MÔ HÌNH NHÂN VẬT 3D (36)
    • III. CHUYỂN ĐỘNG CỦA CON ĐƯỜNG (38)
    • IV. NGUỒN SÁNG (39)
    • V. TẠO HIỆU ỨNG PARTICLE (40)
      • VI.X ÂY DỰNG GIAO DIỆN GAME (45)
  • CHƯƠNG III: THỰC HIỆN CHƯƠNG TRÌNH (49)
    • I. TỔNG QUAN – GIỚI THIỆU GAME (49)
    • II. CÁC QUY LUẬT CHƠI CHÍNH (50)
    • III. CÁC KHÁI NIỆM TRONG GAME (52)
    • I. KẾT QUẢ ĐẠT ĐƯỢC (54)
    • II. HƯỚNG PHÁT TRIỂN (57)
  • TÀI LIỆU THAM KHẢO (58)

Nội dung

LÝ DO CHỌN ĐỀ TÀ

Ngày nay, điện thoại di động đã trở thành một phần không thể thiếu trong cuộc sống hàng ngày, không chỉ phục vụ cho việc gọi điện và nhắn tin mà còn đáp ứng nhu cầu giải trí phong phú Game trên điện thoại di động hiện đang là thú vui hàng đầu của giới trẻ.

Mặc dù game trên điện thoại di động không thể mang lại trải nghiệm như trên PC, nhưng tính tiện lợi của nó cho phép người chơi tham gia mọi lúc, mọi nơi Trước đây, hầu hết các ứng dụng game di động chỉ có đồ họa 2D, nhưng với sự phát triển công nghệ hiện nay, các thiết bị di động đã có khả năng chạy những ứng dụng đòi hỏi cấu hình cao và đồ họa 3 chiều phức tạp.

Nhu cầu chơi game 3D trên di động ngày càng tăng, dẫn đến việc các hãng sản xuất liên tục ra mắt nhiều thể loại game 3D với hình ảnh đẹp và âm thanh sống động Đồng thời, các game engine 3D cũng phát triển mạnh mẽ, hỗ trợ việc phát triển game cho nhiều hệ điều hành di động khác nhau như Android và iOS.

Nội dung luận văn của tôi tập trung vào việc nghiên cứu Engine Unity và ứng dụng Unity để phát triển game 3D cho thiết bị di động trên nền tảng Android.

MỤC TIÊU ĐỀ TÀI

Đề tài này nhằm mục đích tìm hiểu công nghệ và xây dựng ứng dụng, cụ thể là nghiên cứu engine Unity Mục tiêu chính là sử dụng Unity để phát triển một trò chơi 3D thể loại endless run, chạy trên nền tảng Android dành cho thiết bị di động.

MỤC ĐÍCH NGHIÊN CỨU

Đề tài được thực hiện nhằm mục đích:

- Tìm hiểu tổng quan về kiến trúc của Unity và cách tạo lập các ứng dụng trong Unity

Tìm hiểu các vấn đề liên quan đến việc tải mô hình vào game, điều khiển chuyển động của nhân vật, tạo địa hình, thiết kế giao diện, âm thanh và các hiệu ứng hạt (particle) là rất quan trọng để phát triển một trò chơi hoàn chỉnh Từ những vấn đề này, chúng ta có thể đưa ra các giải pháp hiệu quả nhằm nâng cao trải nghiệm người chơi.

- Xây dựng và phát triển ứng dụng game thể loại chơi theo lượt bằng Unity.

PHƯƠNG PHÁP NGHIÊN CỨU

1 Phương pháp nghiên cứu lý thuyết: Tìm đọc các tài liệu về Engine Unity

2 Phương pháp nghiên cứu thực tế: Bắt đầu làm thử game sử dụng Engine Unity.

PHẠM VI ĐỀ TÀI

Với kinh nghiệm hạn chế trong nghiên cứu khoa học, tôi đã tập trung vào việc phát triển game Unity trên nền tảng PC và Android Tuy nhiên, tôi vẫn chưa có cơ hội khai thác sâu hơn các hệ điều hành khác.

TỔNG QUAN CƠ SỞ LÝ THUYẾT

GIỚI THIỆU VỀ ANDROID

1 SỰ PHÁT TRIỂN CỦA ANDROID

Hệ điều hành Android lần đầu tiên ra mắt trên di động vào tháng 10 năm 2008 Trong năm 2009, số lượng điện thoại chạy Android rất hạn chế, chỉ đếm trên đầu ngón tay Tuy nhiên, vào năm 2010, hàng trăm thiết bị sử dụng nền tảng Android đã xuất hiện ồ ạt, từ các thương hiệu lớn cho đến những mẫu điện thoại vô danh ở Trung Quốc.

Các phiên bản mới liên tục được cập nhật giúp các nhà phát triển tự do xây dựng ứng dụng trên hệ điều hành mở, tạo điều kiện cho sự phát triển nhanh chóng của Android Sự thu hút của nền tảng này đã lôi kéo nhiều tên tuổi lớn như Samsung, LG, Sony Ericsson, HTC, và Motorola, cho thấy sự khôn khéo của Google Đặc biệt, Android đã giúp Motorola vượt qua giai đoạn khủng hoảng.

Hệ điều hành Android hiện đang dẫn đầu và được ưa chuộng trên toàn cầu Nhiều nhà sản xuất đã cho ra mắt đa dạng mẫu mã và loại hình thiết bị sử dụng Android, từ các sản phẩm phổ thông đến những dòng siêu cao cấp.

Hình 1.4 Một số hình ảnh điện thoại chạy hệ điều hành Android

Hình 1.5 Bảng thống kê tình hình cài đặt ứng dụng tiêu thụ điện thoại theo hệ điều hành.[8]

Điện thoại thông minh chạy hệ điều hành Android đã vượt qua Nokia và Apple, trở thành thị trường dẫn đầu toàn cầu Theo báo cáo phân tích thị trường từ năm 2011 đến 2013, sự tăng trưởng của các hệ điều hành điện thoại trong quý IV năm 2013 đã được ghi nhận rõ ràng.

Báo cáo cho thấy trong Quý IV năm vừa qua, điện thoại sử dụng nền tảng Android được người tiêu dùng ưa chuộng hơn so với các dòng máy khác Hệ điều hành Android hiện chiếm 32,6% thị phần người dùng toàn cầu, với tốc độ tăng trưởng nhanh chóng và không có dấu hiệu giảm.

Hình 1.6 Thống kê tình hình các phiên bản Android tính đến Android 4.1 [8]

Mặc dù Google đã ra mắt phiên bản Android 4.2, nhưng Android 4.0 Ice Cream Sandwich chỉ chiếm 25% thị phần thiết bị, cho thấy sự phân mảnh của hệ điều hành này Mặc dù tốc độ phát triển có vẻ chậm so với các hệ điều hành khác, nhưng đối với Google, đây lại được coi là một thành công lớn.

Phiên bản Android 4.2 mới ra mắt chưa xuất hiện trong thống kê, trong khi phiên bản 4.1 Jelly Bean đã chiếm 2,7% thiết bị, tăng từ 1,8% tháng trước Mặc dù đã ra mắt gần 12 tháng, chỉ có 25,8% thiết bị Android sử dụng hệ điều hành Ice Cream Sandwich Android 2.3.3 Ginger Bread vẫn dẫn đầu với 54,2%, giảm nhẹ từ 55,8% tháng trước Tương tự, các phiên bản 2.2 Froyo và 2.1 Donut cũng đang giảm Với sự ra mắt của Galaxy Note 2 và HTC One X+, thị phần thiết bị sử dụng Jelly Bean có khả năng tăng mạnh, nhưng để đạt được mức độ phổ biến như Ginger Bread có thể cần vài năm nữa.

Hình 1.4 Số liệu thống kê tỷ lệ giữa ứng dụng và game [8]

Thị trường game đã phát triển mạnh mẽ trong những năm qua, và gần đây, nhờ vào sự hỗ trợ của công nghệ tiên tiến, game 3D đã trở nên sống động hơn, phản ánh chân thực những khía cạnh của cuộc sống thực.

Xu hướng phát triển game mobile hiện nay là ứng dụng các cấu hình phần cứng dựng sẵn Màn cảm ứng đa điểm và hệ cảm biến hành vi cho phép xoay ngang, xoay dọc để điều khiển nhân vật đã trở thành tiêu chuẩn trong các tựa game 3D cao cấp.

Năm 2010 đánh dấu sự bùng nổ của game di động và các nền tảng tiên tiến, mang đến cho người dùng trải nghiệm chưa từng có Hiện nay, thị trường game di động đang trong giai đoạn phát triển mạnh mẽ với nhiều tựa game đỉnh cao.

Một vài game 3D tiêu biểu trên Android:

(a) Game Hero of Sparta (b) Game đua xe Asphalt5

(c) Real Football 2011 v3.1.2 (d) Brother in Arm 2

Hình 1.5 Một số hình ảnh về game 3D trên Android [8]

Hiện nay, có nhiều game engine hỗ trợ phát triển game 3D trên Android, và việc lựa chọn một engine phù hợp là rất quan trọng Tiêu chí cần xem xét bao gồm khả năng render nhanh, xử lý nhiều mô hình cùng lúc, hỗ trợ chuyển động nhân vật, va chạm giữa các vật thể và hiệu ứng particle chất lượng Dưới đây là một số game engine 3D nổi bật cho Android.

 jPCT-AE: jPCT-AE là một bản port từ engine jPCT sang cho Android Đây là một engine 3D miễn phí, nhỏ gọn, tính năng tương đối ít

libGDX là một thư viện được phát triển chủ yếu bằng NDK, cho phép gọi thực thi mã C/C++ từ Java, mang lại tốc độ xử lý nhanh chóng Một trong những ưu điểm nổi bật của engine này là khả năng tối ưu hóa hiệu suất cho các ứng dụng game.

Luận văn tốt nghiệp 9 cho phép viết và kiểm tra game trực tiếp trên desktop Mặc dù lidGDX được phát triển chủ yếu cho nền tảng 2D, nhưng đến nay, thư viện này vẫn chưa hỗ trợ kiểm tra va chạm giữa các vật thể trong môi trường 3D.

 Shiva3D: là một engine thương mại khá mạnh Shiva dùng ngôn ngữ Lua để viết script trong game, một ngôn ngữ ít người biết đến

Unity là một trong những game engine phổ biến, cho phép phát triển trò chơi đa nền tảng và có thể chạy trên Windows và Mac OS Nó hỗ trợ xuất game cho nhiều hệ điều hành như Windows, Mac, iOS, Android, Wii, Web, Xbox 360 và PlayStation 3 Unity có khả năng tạo ra nhiều loại game 3D đa dạng, hỗ trợ nhập nhiều định dạng mô hình khác nhau và cho phép tạo mô hình trực tiếp Với lượng tài liệu hướng dẫn phong phú và cộng đồng lớn, Unity bao gồm hai phiên bản: Unity Pro có phí và Unity Free, giúp cả các nhà phát triển chuyên nghiệp lẫn không chuyên đều có thể dễ dàng sử dụng.

Bởi các tính năng tuyệt vời và phổ biến của Unity, nên trong luận văn này em chọn Unity làm đề tài nghiên cứu.

TỔNG QUAN VỀ UNITY

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 là công cụ phát triển video game 3D và nội dung tương tác như kiến trúc và hoạt hình 3D thời gian thực Nó tương tự như Director, Blender game engine, Virtools và Torque Game Builder, vì đều sử dụng môi trường đồ họa tích hợp trong quá trình phát triển game.

Unity là một engine phát triển game đa nền tảng được ưa chuộng bởi khả năng xuất game cho nhiều hệ điều hành như Windows, Mac, iOS và Android Trình biên tập của Unity hoạt động trên cả Windows và Mac OS, cho phép người dùng dễ dàng phát triển và xuất bản trò chơi Ngoài ra, Unity còn hỗ trợ chơi game trên trình duyệt thông qua plugin Unity Web Player, cùng với khả năng xuất game cho các thiết bị như Xbox 360 và PlayStation 3.

Hình 1.6 Hình minh họa đa nền [8]

Với mức đầu tư chỉ 1.500 USD, người dùng có thể sở hữu phiên bản Pro của Unity, mặc dù số tiền này có thể khá cao tại Việt Nam Tuy nhiên, phiên bản Unity Free cũng có sẵn, mặc dù một số tính năng quan trọng như Network bị hạn chế Điều này không phải là trở ngại lớn nếu bạn muốn phát triển một tựa game tầm trung.

Vào năm 2009, Unity đã nhanh chóng vươn lên trở thành một trong top 5 game engine hàng đầu cho sản xuất game chỉ sau 4 năm phát triển, đứng thứ 4 sau Unreal Engine 3, Gamebryo Engine và Cry Engine 2 Unity cung cấp một lượng tài liệu hướng dẫn phong phú và sở hữu một cộng đồng lớn mạnh với diễn đàn riêng, cho phép người dùng dễ dàng đặt câu hỏi và nhận được phản hồi nhanh chóng, tận tâm từ các thành viên khác.

Quá trình tạo địa hình và truy xuất từ các phần mềm như 3DSMax, Maya, Cinema4D diễn ra nhanh chóng, nhờ vào sức mạnh và sự tiện lợi vượt trội của Unity.

Unity là một công cụ mạnh mẽ cho phép tạo ra nhiều loại game 3D đa dạng và chất lượng cao, phù hợp với cả những người làm game chưa có nhiều kinh nghiệm Ngoài ra, Unity còn có khả năng chạy trên hầu hết các hệ điều hành, mang lại sự linh hoạt cho người phát triển.

Sự tiện lợi khi sử dụng Unity là rất lớn, đặc biệt đối với những người quen thuộc với 3Dmax, Maya hoặc Blender Việc tạo mô hình 3D trở nên dễ dàng hơn khi kết hợp giữa lập trình viên và nhà thiết kế, giúp tăng tốc độ và hiệu quả trong quá trình phát triển game Unity cho phép nhập trực tiếp các file mô hình đang thiết kế, tiết kiệm thời gian so với việc xuất và nhập lại mỗi khi có chỉnh sửa Ngoài ra, người dùng còn có thể tạo mô hình trực tiếp trong Unity và dễ dàng thiết lập các thuộc tính vật lý với nhiều chức năng hỗ trợ sẵn có.

2 SƠ LƯỢC LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN CỦA UNITY

Unity được phát triển ban đầu bởi Joachim Ante vào năm 2001, và chính thức thành lập công ty vào năm 2005 với phiên bản 1.0 Đến năm 2007, Unity đã nâng cấp lên phiên bản 2.0 Năm 2008, Unity bắt đầu hỗ trợ iPhone, và đến tháng 6/2010, công cụ này chính thức hỗ trợ Android Phiên bản 3.0 với tính năng hỗ trợ Android được ra mắt vào tháng 9/2010, cho thấy sự phát triển nhanh chóng của Unity.

Unity đã đoạt được nhiều giải lớn với những giải chính sau:

Vào năm 2006, Unity đã giành giải "Best Use of Mac OS X Graphics" tại Hội nghị Các Nhà Phát Triển Toàn Cầu của Apple (WWDC), đánh dấu cột mốc quan trọng khi đây là lần đầu tiên một công cụ phát triển game được công nhận với chất lượng xuất sắc từ giải thưởng uy tín này.

 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 đ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

Unity hiện có hơn 250.000 người dùng, bao gồm các tên tuổi lớn như Bigpoint, Cartoon Network, Coca-Cola, Disney, Electronic Arts, LEGO, Microsoft, NASA, Ubisoft, Warner Bros, cùng với các hãng phim lớn nhỏ, chuyên gia độc lập, sinh viên và những người đam mê công nghệ.

3 TÍNH NĂNG CỦA ENGINE UNITY

Môi trường phát triển tích hợp nhiều tính năng ưu việt như kế thừa, chỉnh sửa đồ họa, kiểm tra chi tiết và đặc biệt là khả năng xem trước game ngay trong quá trình xây dựng, giúp tăng cường hiệu quả và trải nghiệm của người dùng.

 Triển khai được trên nhiều nền tảng:

 Chương trình độc lập trên Windows và Mac OS

 Trên web, thông qua Unity Web Player plugin cho Internet Explorer, Firefox, Safari, Opera, Chrome, cho 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.)

Tài nguyên như model, âm thanh và hình ảnh được tải vào Unity và sẽ tự động cập nhật khi có sự thay đổi Unity hỗ trợ nhiều định dạng từ các phần mềm như 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 Ambient Occlusion v v

Unity Asset Server là một tính năng mới của Unity, cung cấp hệ thống quản lý phiên bản cho tất cả tài nguyên và script trong game Đây là kho chứa tài nguyên thiết yếu cho quá trình phát triển game, với trạng thái của asset được cập nhật ngay lập tức khi import hoặc sửa chữa Server hoạt động trên cơ sở dữ liệu mã nguồn mở PostgreSQL và có thể truy cập trên các hệ điều hành Mac, Windows và Linux Tuy nhiên, Asset Server yêu cầu một khoản phí bổ sung là $499 cho mỗi bản sao Unity và cần có license Unity Pro.

4 CÁC KHÁI NIỆM CƠ BẢN TRONG UNITY

4.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

PHÂN TÍCH VÀ THIẾT KẾ

LOAD MÔ HÌNH 3D

Game 3D được tạo nên từ các mô hình 3D được sắp xếp trong không gian ba chiều một cách hài hòa, tạo nên cảnh vật trong trò chơi Vì vậy, việc nạp và hiển thị các mô hình 3D trong game đóng vai trò quan trọng.

Mô hình 3D được tạo thành từ nhiều đa giác, hình thành nên khối vật thể Hiện nay, một mô hình 3D không chỉ bao gồm một khối vật thể mà còn nhiều khối vật thể được liên kết trên một khung xương Điều này cho phép mô hình linh hoạt hơn, không bị gò bó bởi một chuyển động cố định và dễ dàng thay đổi chuyển động của nó.

Các mô hình 3D thường được tạo ra bằng các phần mềm chuyên dụng như 3DS Max, Blender, và Cinema 4D Sau khi thiết kế hoàn tất, những mô hình này sẽ được nhập vào game engine để sử dụng trong các trò chơi.

Engine Unity hỗ trợ nhiều định dạng mô hình 3D như 3DS, OBJ, MAX, FBX, BLEND, MA, và khi nhập mô hình vào dự án, Unity tự động chuyển đổi sang định dạng FBX Sau đó, mô hình được tạo thành một Prefab để có thể tái sử dụng nhiều lần.

Unity hỗ trợ việc tải mô hình bằng cách kéo thả Prefab vào bất kỳ vị trí nào trong Scene, nhưng để tăng tính linh hoạt, chúng ta nên sử dụng mã lập trình để xử lý.

Đầu tiên, tạo một file script và liên kết nó với một đối tượng game bất kỳ để script có thể thực thi Trong file script này, 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í và góc quay mong muốn public class LoadObject : MonoBehaviour

Hình 2.2 Prefab trong resources void Awake()

GameObject NewObj = Instantiate(Obj, new Vector3(0, 0, 0), Quaternion.identity);

Tuy nhiên, câu hỏi là đối tượng GameObject trên chứa mô hình nào Ở đây có 2 giải pháp để trỏ GameObject vào mô hình

Giải pháp thứ nhất: Load mô hình từ prefab chứa bên ngoài resource

Trên cửa sổ Inspector của đối tượng game được gắn script vào xuất hiện thuộc tính Obj Ta chọn Prefab mong muốn và kéo thả vào thuộc tính Obj

Để tải mô hình từ Prefab trong thư mục Resources, cần đặt Prefab vào thư mục này trong Project Sau đó, sử dụng hàm Resources.Load() với tham số là đường dẫn đến Prefab từ thư mục Resources để thực hiện việc tải.

Hình 2.3 Đối tượng game chứa nhiều đối tượng game con

Sau khi tải mô hình, việc gán texture cho mô hình là cần thiết để tạo sự hấp dẫn cho nhân vật Mô hình không chỉ là một đối tượng trong game mà còn có thể chứa nhiều đối tượng con bên trong, do đó cần gán texture cho cả đối tượng cha và các đối tượng con Để thực hiện điều này, chúng ta cần tìm thành phần Renderer trong tất cả các đối tượng game để truy cập vào material và gán texture Dưới đây là đoạn code minh họa cách thực hiện.

Texture2D texture = (Texture2D)Resources.Load("Texture/Knights_green");

// gắn texture cho các tất cả đối tượng game

Renderer[] objRender = NewObj.GetComponentsInChildren(); for (int i = 0; i < objRender.Length; i++) objRender[i].material.mainTexture = texture;

Hình 2.4 Mô hình nhân vật 3D trước và sau khi gán texture

Giải pháp thứ hai mang lại sự linh hoạt hơn trong việc tải mô hình từ Prefab, đặc biệt trong quá trình runtime Tất cả các thao tác biến đổi, xoay và chuyển động đều được thực hiện trên đối tượng GameObject này.

CHUYỂN ĐỘNG CỦA MÔ HÌNH NHÂN VẬT 3D

Chúng ta đã load được mô hình 3D vào trong game, vậy làm sao để mô hình 3D này có thể chuyển động trong game

Mô hình 3D cần phải chứa sẵn animation để khi được nhập vào Unity, animation sẽ tự động chuyển thành một AnimationClip Việc này cho phép sử dụng animation cho các mô hình khác trong dự án.

Trước hết ta phải tạo AnimationClip từ animation có sẵn của mô hình Có 2 loại mô hình 3D có sẵn animation:

Loại thứ nhất: mô hình 3D có chứa nhiều animation bên trong

Hình 2.5 Mô hình 3D bên trong chứa nhiều animation

Sau khi import mô hình 3D vào dự án game, hệ thống sẽ tự động tạo ra 9 AnimationClip cho mỗi animation có sẵn trong mô hình.

Loại thứ hai: mô hình 3D chỉ chứa một animation

Hình 2.6 Mô hình 3D chứa một animation

Trong 3 mô hình trên, mỗi mô hình sau khi import có một AnimationClip duy nhất có tên “Default Take” Về bản chất hình dạng mô hình là như nhau, chỉ khác nhau animation (Idle, Run, Walk) Vậy làm sao chúng ta kết hợp các AnimationClip này vào một đối tượng game duy nhất Unity quy định như sau:

- Lấy một mô hình làm mô hình chính, có thể không cần animation kèm theo cũng được

Các mô hình còn lại cần có tên gồm hai phần, được phân cách bởi ký tự ‘@’ Phần đầu của tên phải trùng với tên của mô hình chính đã được chọn, trong khi phần thứ hai sẽ là tên của animation.

Khi đặt tên mô hình trong Unity, phần tên sau chữ ‘@’ sẽ được tự động áp dụng cho animation mặc định khi đưa vào project Cần lưu ý rằng việc đổi tên mô hình phải thực hiện bên ngoài project trên Windows, vì nếu đổi tên trực tiếp trong project, tên animation sẽ không thay đổi theo phần tên sau dấu ‘@’.

Hình 2.7 Hình minh họa sau khi đổi tên và import vào project

Như hình trên, mô hình sẽ có 3 AnimationClip bên trong (Default Take, idle, run)

Tiếp theo, để gọi thực hiện một AnimationClip trong một đối tượng ta dùng hàm

Hàm CrossFade() của thuộc tính animation trong GameObject cho phép chuyển đổi mượt mà giữa các animation Đoạn mã sau đây được áp dụng cho đối tượng game để thực hiện animation: animation.CrossFade("Run"); trong đó "Run" là tên của AnimationClip trong mô hình.

Đôi khi, chúng ta cần chạy các chuyển động khác nhau của mô hình theo thứ tự Để thực hiện điều này, ta sử dụng hàm CrossFadeQueued() trong thuộc tính animation.

The AnimationClip Idle will play after the AnimationClip Run finishes To control the playback of the AnimationClip, the wrapMode property is utilized, setting it to WrapMode.Loop for continuous looping motion.

Việc thực hiện animation cho đối tượng trong game là dễ dàng, nhưng việc lựa chọn loại mô hình phù hợp là rất quan trọng Nếu chọn mô hình loại 1, bạn sẽ cần phải nhập vào các phần mềm hỗ trợ để chỉnh sửa animation trước khi đưa vào Unity Ngược lại, với mô hình loại 2, bạn chỉ cần thêm hoặc xóa file mô hình một cách nhanh chóng và linh hoạt Do đó, tôi quyết định chọn mô hình loại 2 cho ứng dụng game của mình.

CHUYỂN ĐỘNG CỦA CON ĐƯỜNG

Sau khi hoàn thành thiết kế cơ bản, xe đã có thể di chuyển, trong khi con đường vẫn đứng yên Trong các trò chơi đua xe, mọi người thường nghĩ đến việc tạo ra một bản đồ rộng lớn cho đường đua Tuy nhiên, với trò chơi này, việc đó không cần thiết, vì trò chơi diễn ra liên tục mà không có điểm dừng, nên không cần phải xây dựng bản đồ quá phức tạp.

Giải pháp đề xuất là tạo ra ba mảnh của đường đua và cho chúng xuất hiện lặp lại liên tục Hình minh họa dưới đây sẽ giúp làm rõ cách xử lý đường đua này.

Hình 2.8 Cách xử lý đường đua trong game

Hình ảnh minh họa cho một hệ thống đường đua sáng tạo với ba mảnh Street Khi xe di chuyển đến mảnh thứ hai, mảnh thứ nhất sẽ tự động nhảy lên phía trước mảnh thứ ba, tạo ra hiệu ứng lặp vô tận mà không cần xây dựng một đường đua dài.

Thuật toán như sau if(Camera.mainCamera.transform.position.z>=(this.transform.position.z+20)){ this.transform.position+=new Vector3(0,0,60);

Việc áp dụng thuật toán này để tạo ra con đường sẽ giúp tiết kiệm thời gian tải game và giảm bớt dung lượng của game so với các phương pháp chơi bản đồ truyền thống.

NGUỒN SÁNG

Vấn đề Để game chân thực hơn thì xe cần có đèn chiếu sáng Vì vậy chúng ta phải làm nguồn sáng trên xe

Để tạo nguồn sáng cho việc chiếu sáng cảnh vật trong Unity, trước tiên bạn cần tạo một đối tượng game và sau đó thêm thành phần Light vào đối tượng đó.

GameObject obj = new GameObject("Light");

Light light = obj.AddComponent();

To modify the lighting in your scene, set the Light type to Directional, which emits light from a fixed position in a specific direction Use the following code: `obj.transform.rotation = Quaternion.Euler(50, 180, 180);` to adjust the angle, and configure the light properties with `light.type = LightType.Directional;`, `light.color = Color.blue;` for a blue hue, and `light.intensity = 3;` to increase brightness.

Hình 2.9 Cảnh vật được chiếu sáng

Chiếu sáng làm cho địa hình nhìn thật hơn với nhiều mảng sáng tối khác nhau, mô hình nhân vật trông nổi và sâu hơn.

TẠO HIỆU ỨNG PARTICLE

Các hiệu ứng như mưa, khói và lửa đóng vai trò quan trọng trong việc tạo nên sự sinh động và ấn tượng cho game, đặc biệt là trong các trò chơi 3D Những hiệu ứng này được gọi chung là hiệu ứng particle, và chúng là yếu tố cần thiết để nâng cao trải nghiệm người chơi.

Để tạo ra hiệu ứng particle mong muốn, Unity cung cấp cho người dùng công cụ Particle Systems, với ba thành phần chính quan trọng cần thiết để hiển thị particle.

- Particle Emitter: để sinh ra các hạt

- Particle Animator: để làm di chuyển các hạt theo thời gian

- Particle Renderer: để vẽ các hạt

Luận văn tốt nghiệp 32 Để tạo một particle, chúng ta thực hiện như sau:

Tạo thành phần quan trọng nhất để sinh ra các hạt - thành phần Particle Emitter

Thành phần này không thể tạo trực tiếp từ code mà chỉ có thể thêm từ giao diện Editor của Unity bằng cách chọn menu Component  Particles  Ellipsoid Particle

Hình 2.10 Thêm thành phần Ellipsoid Particle Emitter Bước 2:

Tạo 2 thành phần còn lại là Particle Animator và Particle Renderer Bước này chúng ta có thể thực hiện bằng code hoặc trên giao diện public class Particle : MonoBehaviour

//tạo thành phần ParticleRenderer để vẽ các hạt

ParticleRenderer pRen = gameObject.AddComponent(); //tạo thành phần ParticleAnimator để chạy các hạt

ParticleAnimator pAmin = gameObject.AddComponent(); }

Phương thức AddComponent() để thêm một thành phần Particle

In Unity, the Renderer component is essential for displaying GameObjects, while the Particle Animator component enhances visual effects To access and modify properties, you can utilize the return value of the AddComponent() function Specifically, to call and adjust attributes of the Particle Emitter, you can use the particleEmitter property of the GameObject.

Luận văn tốt nghiệp 33 particleEmitter.maxSize = 1F; particleEmitter.minSize = 0.15F;

Tùy chỉnh các thuộc tính riêng của từng thành phần để đạt được hiệu ứng mong muốn Hãy xem qua các thuộc tính của ba thành phần trên giao diện chỉnh sửa để hiểu rõ hơn.

Hình 2.28.7 Các thuộc tính của Particle System

 Các thuộc tính của thành phần tạo hạt, Elipsoid Particle Emiter được trình bày trong bảng 2.1

Bảng 2.1 Các thuộc tính của Elipsoid Particle Emiter

Thuộc tính Ý nghĩa Hình minh họa

Emit Nếu enable hiệu ứng sẽ phát ra

Kích thước nhỏ nhất/lớn nhất có thể của mỗi hạt tại thời điểm sinh ra

Max Size = 0.7 Min Energy / Max

Thời gian sống nhỏ nhất/lớn nhất của hạt, tính bằng giây

Số lượng tối thiểu/tối đa của hạt được phát ra, tính bằng giây

Max Emission = 1 World Velocity Tốc độ bắt đầu của hạt theo các chiều x, y, z trong không gian

WorldVelocity.x = 1 Local Velocity Tốc độ bắt đầu của các hạt trong cùng một vùng x, y, z

LocalVelocity.x = 1 Rnd Velocity Vận tốc ngẫu nhiên của các hạt cùng chiều x, y, z

RndVelocity.x=3 Tangent Velocity Vận tốc khởi đầu cho các hạt cùng chiều trên bề mặt của Emitter

TangentVelocity.x= 0.5 OneShot Nếu enable thì hiệu ứng hiện một lần rồi tắt, sau đó hiện lên lại Nếu tắt thì hiệu ứng hiện liên tục

Hiện và ẩn cả khối hiệu ứng

EllipsoidScale Phép tỷ lệ của khối hiệu ứng

 Các thuộc tính của thành phần vẽ, ParticleRenderer được trình bày trong bảng 2.2

Bảng 2.2 Các thuộc tính của ParticleRenderer

Thuộc tính Ý Nghĩa Hình minh họa

Materials Chất liệu của particle, có thuộc tính size và texture, texture để chứa các texture bên ngoài đưa vào giúp hiệu ứng đẹp hơn

Stretch Particles Độ căng giản của các hạt

StretchParticles HorizontalBillboard Length Scale Tỷ lệ độ dài của các hạt

StretchParticles Stretched, LengthScale Velocity Scale Vận tốc của các hạt nếu dựa vào thuộc tính “Stretch Particles”

 Các thuộc tính của thành phần làm chuyển động, ParticleAnimator được trình bày trong bảng 2.3

Bảng2.3 Các thuộc tính của Particle Animator

Thuộc tính Ý Nghĩa Hình minh họa

Màu sắc của hạt, chu kỳ màu của hạt sẽ mất nhanh nếu hạt nào có tốc độ nhanh hơn

Nếu không bật thì các chu kỳ màu loang sẽ mất, nếu bật thì các chu kỳ màu loang sẽ có tác dụng

Phép quay quanh các trục x, y, z

WorldRotationAxis.x =5 Force Tưởng tượng như có một sức gió đang thổi vào các hạt theo các chiều x, y, z

Force.x =-1 Damping Sự tắt dần chuyển động của từng hạt

Hiểu rõ các thuộc tính của ba thành phần chính trong Particle System của Unity và biết cách áp dụng linh hoạt sẽ giúp chúng ta tạo ra nhiều hiệu ứng hạt đẹp mắt cho trò chơi của mình.

VI XÂY DỰNG GIAO DIỆN GAME

Giao diện đồ họa người dùng (GUI) đóng vai trò quan trọng trong việc phát triển ứng dụng game cũng như các ứng dụng khác, cho phép vẽ các đối tượng đồ họa như nút bấm (Button), nhãn (Label), ô chọn (Checkbox), và thanh trượt (Slider) lên màn hình.

Để xây dựng giao diện đồ họa người dùng, chúng ta sử dụng lớp GUI, viết tắt của "Graphical User Interface" Hệ thống GUI trong Unity được gọi là GUIUnity Để sử dụng các phương thức trong GUI, cần gọi thực hiện từ hàm OnGUI(), tương tự như sự kiện Paint trong C# Dưới đây là ví dụ tạo một nút đơn giản.

Luận văn tốt nghiệp 37 void OnGUI()

{ if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button"))

{ print("You clicked the button!");

Hình 2.11 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 là một công cụ cài đặt phong cách cho các thành phần giao diện người dùng (GUI), bao gồm thông tin về font chữ, vị trí biểu tượng, hình nền và khoảng cách Người dùng chỉ cần định nghĩa và áp dụng GUIStyle cho các thành phần như Button, Label, Checkbox, v.v GUIStyle có thể được so sánh với CSS trong thiết kế website.

Ví dụ sau tạo một Label theo một định nghĩa GUIStyle, với kích thước font là

To create a centered red text with bold formatting using the Beckasin font, implement the following code in the OnGUI() method: set the text alignment to center, specify the font color as red, and use a rectangular area of 150x50 pixels positioned at (Screen.width/2, Screen.height/2).

GUIStyle myStyle = new GUIStyle(); myStyle.fontSize = 14; myStyle.fontStyle = FontStyle.Bold; myStyle.alignment = TextAnchor.MiddleCenter; myStyle.normal.textColor = Color yellow; myStyle.font = (Font)Resources.Load("Fonts/Beckasin");

GUI.Label(new Rect(Screen.width/2,Screen.height/2, 150,50),"This is my label",myStyle);

Hình 2.12 Áp dụng GUIStyle lên Label

Ví dụ dưới đây minh họa cách tạo một nút (Button) với nền là hình ảnh Do chỉ tập trung vào hình nền, chúng ta không cần xem xét định dạng văn bản trong GUIStyle, mà chỉ cần chú ý đến hình nền của nút và các sự kiện tương tác chuột trên nút này Hàm void OnGUI() sẽ được sử dụng để thực hiện điều này.

In Unity, you can create a custom button style using GUIStyle by loading textures for different button states For instance, you can set the normal background to a texture loaded from resources and define a hover state with a different texture To implement this, you can create a button at the center of the screen with specified dimensions and apply the custom style, allowing for a responsive UI element.

Để vẽ hình ảnh lên màn hình, chúng ta sử dụng đối tượng Texture2D, tương tự như Bimap hay Image trong C# Để tải hình từ Resources và hiển thị, chúng ta áp dụng phương thức DrawTexture().

Texture2D myImage = (Texture2D)Resources.Load("background_image");

GUI.DrawTexture(new Rect(0,0,Screen.width,Screen.height), myImage);

Hình 2.14 Vẽ hình ảnh trên GUI

Với lớp GUI trong Unity, bạn có thể tạo ra một giao diện ấn tượng cho ứng dụng game Bên cạnh các phương thức đã được đề cập, còn nhiều phương thức khác để vẽ các đối tượng như Radio, Checkbox và Slider.

THỰC HIỆN CHƯƠNG TRÌNH

TỔNG QUAN – GIỚI THIỆU GAME

Dòng game endless run mà tôi xây dựng có đặc trưng là chỉ cho phép một người chơi điều khiển xe tại một thời điểm Mỗi màn chơi bắt đầu với một chiếc xe, nơi người chơi phải né tránh các vật thể và có thể thu thập mạng để gia tăng số mạng chơi của mình.

Hình 3.1 Người chơi điều khiển xe tránh các vật cản màu đỏ

Sau khi hoàn thành lượt chơi, điểm số sẽ được chuyển đổi thành tiền tệ trong game, giúp người chơi có thể mua xe mới có sẵn Ngoài ra, người chơi còn có thể chia sẻ kết quả của mình lên Facebook để bạn bè cùng biết và tham gia chơi.

Hình 3.2 Người chơi dùng tiền game mua xe mới.

CÁC QUY LUẬT CHƠI CHÍNH

Người chơi điều khiển xe bằng cách chạm vào hai bên màn hình điện thoại, tương ứng với lách trái và lách phải Thời gian tồn tại của người chơi càng lâu, tốc độ di chuyển của xe càng nhanh.

Hình 3.3 Người chơi bấm vào 2 cạnh màn hình để điều khiển xe

Người chơi điều khiển xe cần tránh va chạm với các vật thể màu đỏ để không bị mất mạng, trong khi va chạm với vật thể màu xanh sẽ giúp tăng số mạng Khi hết số mạng, xe sẽ nổ và lượt chơi sẽ kết thúc.

Hình 3.4 Người chơi nhặt được vật màu xanh thì tăng mạng

3 TÍNH ĐIỂM Điểm số được tính dựa vào khoảng cách đường đi từ lúc bắt đầu cho tới lúc chết

Số điểm đó sẽ được đổi ra tiền game dựa theo tỉ lệ 1/100

Hình 3.5 Điểm số khi kết thúc game

Tiền kiếm được sẽ dùng để mua các loại xe mới trong game với mức giá khác nhau Sau khi mua có thể dùng xe đó để chơi game

Chú ý: Các loại xe chỉ để tăng tính thẩm mỹ, không ảnh hưởng tới gameplay.

CÁC KHÁI NIỆM TRONG GAME

Xe là đối tượng chính trong game và được điều khiển bởi người chơi

Hình 3.6 Xe - đối tượng chính của game

Distance là quãng đường đi được trong game, là thông số chính dùng để tính điểm cho người chơi sau mỗi lượt chơi

Coins là đơn vị tiền tệ trong game, dùng để mua xe Được tính dựa trên số điểm của người chơi

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

KẾT QUẢ ĐẠT ĐƯỢC

Sau khi nghiên cứu các phương pháp phát triển game 3D trên engine Unity cho Android, tôi đã hoàn thành một ứng dụng game thuộc thể loại endless run Trong quá trình phát triển, tôi đã gặp phải một số vấn đề và đề xuất các giải pháp để khắc phục chúng.

Các màn hình giao diện chính của game mà em đã xây dựng trong luận văn này:

Trong màn hình Menu chính của trò chơi, người chơi có thể chọn “Play” để bắt đầu trò chơi, “Store” để truy cập cửa hàng mua xe, “Setting” để điều chỉnh các cài đặt cơ bản, và nút “Power” để thoát khỏi game.

Hình2 Giao diện chơi game

Hình 5 Giao diện nút Power

HƯỚNG PHÁT TRIỂN

 Tối ưu hóa các xử lý giúp game chạy nhanh hơn

 Game sẽ hỗ trợ chế độ nhiều người chơi cùng một lúc

 Tăng thêm số lượng màn chơi để người chơi thêm nhiều lựa chọn

 Cung cấp thêm các công cụ để người chơi có thể chỉnh sửa hoặc tạo ra cho mình riêng các hình ảnh nhân vật, hiệu ứng âm thanh, …

Ngày đăng: 22/05/2021, 10:00

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Ryan Henson Creighton, Unity 3D Game Development by Example, Packt Publishing [NXB 2010] Sách, tạp chí
Tiêu đề: Unity 3D Game Development by Example
Nhà XB: NXB 2010]
[2] Will Goldstone, Unity Game Development Essential, Packt Publishing [NXB 2009] Sách, tạp chí
Tiêu đề: Unity Game Development Essential
Nhà XB: NXB 2009]
[3] Efraim Meulenberg, Game Development with Unity, VTC, [NXB 2010] Sách, tạp chí
Tiêu đề: Game Development with Unity
Nhà XB: NXB 2010]
[4] Efraim Meulenberg, Game Development for iPhone/iPad Using Unity iPhone, VTC, [NXB 2010] Sách, tạp chí
Tiêu đề: Game Development for iPhone/iPad Using Unity iPhone
Nhà XB: NXB 2010]
[5] TornadoTwins, Wormgame Cartoony Series http://www.unityprefabs.com/wormgame-cartoony-series-tutorial.html [6] Zak Parrish, Unity Fundamentals Sách, tạp chí
Tiêu đề: Wormgame Cartoony Series" http://www.unityprefabs.com/wormgame-cartoony-series-tutorial.html [6] Zak Parrish

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w