LỜI MỞ ĐẦU1I. TỔNG QUAN VỀ GAME ENGINE VÀ KHÔNG GIAN 3D21. TỔNG QUAN VỀ GAME ENGINE:2a. Khái niệm:2b. Tại sao cần sử dụng Game Engine:2c. Tại sao cần lựa chọn Game Engine trước khi phát triển:22. TỔNG QUAN VỀ KHÔNG GIAN 3D:3a. Hệ trục tọa độ ( coordinates):3b. Không gian cục bộ và không gian toàn cục (Local Space và World Space):4c. Vectors:4d. Camera:5e. Đa giác (Polygon), cạnh (Edges), đỉnh (Vertices), mắt lưới (Meshes):5f. Vật liệu (Materials), kết cấu (textures) và đổ bóng (Shaders):5II. UNITY 3D – ENGINE ĐA NỀN TẢNG XUẤT SẮC NHẤT51 .GIỚI THIỆU CHUNG VỀ UNITY 3D:52. CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG LÀM NÊN UNITY3D ĐƯỢC ƯA CHUỘNG:6a. Hỗ trợ đa nền tảng :6b. Thư viện phong phú, đa dạng:7c. Cộng đồng lớn mạnh:8d. Tính kinh tế cao:83. CÁC THÀNH PHẦN CHÍNH CỦA UNITY:8a. Assets:8b. Scenes:9c. Game Objects:10d. Components:10e. Scripts:11f. Prefabs:124. GIAO DIỆN CỦA UNITY 3D:12a . Scene Game window :13b. Hierachy window:14c. Project window:14d. Inspector window:15III. DEMO NHỎ “ XÂY DỰNG ĐỊA HÌNH”:16IV. DANH MỤC TÀI LIỆU THAM KHẢO, TRÍCH DẪN :16
Trang 1CƠ SỞ TPHCM
Môn học : Nhập môn Công nghệ phần mềm
BÁO CÁO ĐỀ TÀI
CÔNG NGHỆ ENGINE GAME – UNITY3D
DEMO XÂY DỰNG ĐỊA HÌNH.
Giảng viên hướng dẫn : TS Võ Xuân Thể Tên sinh viên :
Lớp :
Hồ Chí Minh, 18/4/2017
Trang 2MỤC LỤC
Báo cáo Nhập Môn Công Nghệ Phần Mềm
Trang 3LỜI MỞ ĐẦU
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 đến chóng mặt, rất nhiều những Game hay và hấp dẫn đã được ra đời trong thời gian 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à một 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 các 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ại Việt Nam, ngành công nghiệp Game mới chỉ đang phát triển đa số chủ yếu vẫn là phát hành Game Các công ty hiện nay đa số đều chỉ nhen nhóm những dự án nhỏ và kém hấp dẫn gây nên không ít thất vọng từ những Game thủ ủng hộ Game nước nhà
Từ xu hướng phát triển 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, không kém mạnh mẽ, sở hữu số lượng người dùng rất lớn hiện nay
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 3D Chương tiếp theo sẽ giới thiệu về Engine Unity cụ thể là Unity3D bao gồm các đặc điểm, tính năng, công cụ qua các ví dụ thực tế và thành phần trong Engine này, ưu điểm giúp Unity xứng đáng là Engine Game xuất sắc Cuối cùng là Demo nhỏ xây dựng địa hình đơn giản sử dụng tính năng nổi bật trong Unity3D Engine game là Asset Store
Em xin chân thành cảm ơn Thầy đã đọc báo cáo Rất mong nhận được sự góp ý của Thầy !
Trang 4I TỔNG QUAN VỀ GAME ENGINE VÀ KHÔNG GIAN 3D
1 TỔNG QUAN VỀ GAME ENGINE:
a Khái niệm:
Một Game Engine (hay công cụ tạo Game / động cơ Game) là một phần mềm được viết cho mục đích thiết kế và phát triển video Game 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
b Tại sao cần sử dụng Game Engine:
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 đó 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 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 (nếu cần) trong mã nguồn của Game đó
Việc xây dựng một ứng dụng đồ họa chỉ sử dụng thuần túy OpenGL sẽ tốn rất nhiều thời gian do chúng ta phải dùng từng hàm của OpenGL để vẽ các điểm, các đường thẳng, các mặt phẳng để tạo nên hình mẫu vật thể, cũng như phải tạo màu tạo ánh sáng… cho môi trường
Để làm giảm thiểu thời gian này, người ta tạo ra các Engine, được xây dựng trên một nền tảng là OpenGL hoặc Direct3D, gồm các hàm trực quan hơn đối với người lập trình, giúp
Trang 5người lập trình tạo ra các vật thể, thiết lập môi trường, ánh sáng một cách đơn giản hơn và không cần viết các hàm bằng OpenGL nữa
Nhưng cũng cần lưu ý, Game Engine không chỉ bao gồm thành phần tạo hình ảnh mà còn hơn ở thế, nó 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
c Tại sao cần lựa chọn Game Engine trước khi phát triển:
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:
1/ 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
2/ 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
3/ 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
4/ 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
5/ 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
Trang 6vớ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
6/ 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 đó
2 TỔNG QUAN VỀ KHÔNG GIAN 3D:
a Hệ trục tọa độ ( coordinates):
Điểm khác biệt ở không gian 3D là trục Z Trục Z là một trục bổ sung cho 2 trục đã tồn tại là trục ngang X (trục hoành) và trục dọc Y (trục tung), nó định nghĩa về chiều cao hay độ sâu (chiều sâu) Trong một ứng dụng 3D, chúng ta sẽ thấy thông tin của một đối tượng nằm trong định dạng X,Y, Z được biết với cái tên hệ trục Cartesian Kích thước, các giá trị luân phiên và vị trí trong thế giới 3D được mô tả : (10,15,10)
b Không gian cục bộ và không gian toàn cục (Local Space và World Space):
Trong bất kỳ phần mềm 3D nào, thế giới mà chúng ta làm việc trong đó là gần như vô hạn, vì thế để kiểm soát vị trí của các đối tượng trong đó là rất khó khăn Trong mọi thế giới 3D đều có một điểm gốc, thường được gọi là Zero, vì nó được đại diện bới vị trí (0,0,0) Tất
cả các vị trí của đối tượng trong không gian 3D (toàn cục) đều có mối quan hệ với điểm gốc Tuy nhiên, chúng ta cũng sử dụng không gian cụ bộ để đơn giản hóa vấn đề hơn Nó được biết như là không gian riêng của đối tượng để xác định vị trí của đối tượng có liên hệ với một đối tượng khác Không gian cục bộ giả định rằng mỗi đối tượng đều có điểm gốc Zero riêng biệt Điểm này thường là điểm trung tâm của đối tượng, và bằng cách tạo ra mối quan
hệ giữa các đối tượng, chúng ta có thể so sánh vị trí của chúng trong mối quan hệ với một đối tượng khác Mối quan hệ nay, được hiểu là quan hệ cha – con, có nghĩa là chúng ta có thể tính toán khoảng cách từ một đối tượng khác bằng cách sử dụng không gian cục bộ, với
vị trí của đối tượng cha trở thành điểm gốc cho tất cả các đối tượng con
Trang 7
Hình 1 World space and local space
c Vectors:
Khái niệm vector 3D được định nhĩa trên hệ trục tọa độ Cartesian Cũng giống như vector trong 2D, vector 3D đơn giản là một đường thẳng trong không gian 3D, có hướng và
độ dài Vector có thể di chuyển trong không gian 3D Vector rất quan trọng trong Game Engine, vì chúng cho phép chúng ta tính toán khoảng cách, góc giữa các đối tượng và hướng của đối tượng
d Camera:
Camera là một đối tượng rất cần thiết trong thế giới 3D, chức năng của chúng hoạt động như một khung nhìn cho màn hình Có một tầm nhìn theo hình kim tự tháp, camera có thể được đặt ở bất kỳ điểm nào trong thế giới 3D, được diễn hoạt, hoặc gắn vào nhân vật hay các đối tượng như là một phần kịch bản trò chơi 3D có khả năng điều chỉnh tầm nhìn, 3D Camera là tầm nhìn của chúng ta trong không gian 3D Trong Game Engine, chúng ta nhận thấy những hiệu ứng như ánh sáng, chuyển động mờ, và những hiệu ứng được áp dụng cho Camera, giúp Game mô phỏng đôi mắt của người xem trong thế giới 3D đó, chúng ta thậm chí có thể thêm một vài hiệu ứng điện ảnh mà mắt người thật không bao giờ nhận thấy được như tia sáng (Lens Flares) khi nhìn vào mặt trời
e Đa giác (Polygon), cạnh (Edges), đỉnh (Vertices), mắt lưới (Meshes):
Trang 8Trong dựng hình 3D, tất cả các đối tượng cuối cùng đều được nối với nhau bởi những
Đa Giác Khi nhập mô hình từ những ứng dụng dựng hình, Unity chuyển đổi tất các đa giác thành tam giác Tam giác (Mặt) được tạo nên từ 3 Cạnh kết nối với nhau Vị trí mà các Cạnh gặp nhau gọi là điểm hay Đỉnh Số lượng đa giác là tổng số lượng các đa giác tạo nên Model, càng nhiều đa giác thì càng có nhiều công việc mà máy tính phải làm để kế xuất hình ảnh của đối tượng lên màn hình
f Vật liệu (Materials), kết cấu (textures) và đổ bóng (Shaders):
Vật liệu là một khái niệm rất quen thuộc trong tất cả các ứng dụng 3D, chúng cung cấp phương tiện để thiết lập sự xuất hiện của một mô hình 3D Từ những màu sắc cơ bản đến các
bề mặt phản chiếu hình ảnh, vật liệu xử lí tất cả mọi thứ
Vật liệu có thể là một màu sắc cơ bản hay bao gồm một hoặc nhiều hình ảnh được gọi là Kết cấu (textures) Đổ bòn là những mã kịch bản phụ trách phong cách kết xuất hình ảnh
II UNITY 3D – ENGINE ĐA NỀN TẢNG XUẤT SẮC NHẤT
1 GIỚI THIỆU CHUNG VỀ UNITY 3D:
Hình 2 Logo của Unity Engine
Nhà phát triển : Unity Technologies.
Phiên bản mới nhất : 5.6 phát hành ngày 31/03/2017.
Được viết bởi ngôn ngữ : C#.
Giấy phép : Độc quyền.
Trang 9Website : www.unity3d.com.
Unity là một 3D Game Engine, là công cụ thiết kế Game dành cho PC, Mac và nhiều hệ máy di động khác
Unity được sự hỗ trợ của Just – In – Time Compilation (JIT), sử dụng thư viện mã nguồn
mở C++ Mono Những đoạn code do chúng ta viết sẽ được Unity biên dịch ra Mono trước khi nó được thực thi Điều này rất quan trọng cho Game để thực thi code vào những thời điểm cần thiết trong suốt thời gian chạy (Runtime)
Unity có một cộng đồng người dùng rất mạnh luôn chia sẻ những Plugins, công cụ của
họ dưới hình thức gói phần mềm bổ sung Unity là một trong những Game Engine có tốc độ phát triển nhanh nhất Unity cũng phiên bản phát triển Game cho hệ máy Wii của Nin tendo
và Iphone của Apple, có nghĩa là một khí chúng ta làm chủ được nhưng vấn đề cơ bản, không chỉ phát triển Game cho máy tính cá nhân mà chúng ta còn có thể phát triển Game cho các hệ máy console và thiết bị di động
2 CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG LÀM NÊN UNITY3D ĐƯỢC ƯA CHUỘNG:
Unity hay Unity3D chắc chắn không phải engine đỉnh cao nhất về mặt đồ họa Về mặt này, Cry Engine vẫn đang dẫn đầu với ưu thế đồ họa 3D cực kỳ chân thực Có thể cảm nhận
rõ ràng điều này qua chất lượng hình ảnh các tựa game gần đây sử dụng Cry Engine như Far Cry hay Crysis 3 Tuy nhiên, những engine khủng như Cry hay Unreal rất kén chọn và yêu cầu cấu hình cũng khủng không kém Hơn nữa cái giá để được cấp phép sử dụng Cry Engine chắc chắn cũng không dễ chịu chút nào
Tuy đồ họa không thể so sánh với Cry Engine nhưng chất lượng hình ảnh Unity3D mang lại cũng quá đủ để thỏa mãn game thủ hiện nay Hơn nữa, Unity3D còn có những ưu điểm
mà không phải engine game nào cũng có
a Hỗ trợ đa nền tảng :
Một trong các thế mạnh của Unity3D chính là khả năng hỗ trợ gần như toàn bộ nền tảng , trong rất nhiều các game engine nổi bật hiện nay như: Cry Engine, Unreal Engine, e,
Id Tech Engine, IW Engine, Dead Engine….Unity được là công cụ nổi bật nhất và được lựa
Trang 10chọn nhiều hơn cả nó hiện có 27 nền tảng như: PlayStation 3, Xbox 360, Wii U, iOS, Android, Windows, Blackberry 10, OS X, Linux, trình duyệt Web và cả Flash , và vẫn tiếp tục mở rộng 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 giúp rút ngắn rất nhiều thời gian xây dựng game cũng như nâng cao mức độ an toàn khi lập trình game Đồ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…
Hình 3 Nền tảng hiện có của Unity3d Engine Game
b Thư viện phong phú, đa dạng:
Unity có nhiều thư viện, các công cụ hỗ trợ làm game nhanh hơn, thông minh hơn với
vô vàn các đối tượng được tạo sẵn và tất cả các thư viện này đều “mở” free, cho phép cộng đồng tự do sử dụng và sáng tạo nên các sản phẩm của chính mình, thậm chí có thể bán trên Asset Store của Unity
Trang 11Unity3D đượ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 Unity3D 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ệ Kho chia sẽ Asset Store khổng lồ, ngay cả lập trình viên nghiệp dư cũng có thể dễ dàng làm game đơn giản cho mình Việc làm game trở nên đơn giản và hiệu quả và thú vị hơn
Lập trình viên Unity3D có thể dùng ngôn ngữ Javascript hoặc C# là là một ngôn ngữ lập trình đơn giản, hiện đại cho các lập trình viên để phát triển game hoàn thiện
c Cộng đồng lớn mạnh:
Là engine phổ biến nhất trên thế giới, Unity có cộng đồng sử dụng và chia sẻ thông tin cực kì lớn mạnh Mọi thắc mắc của bạn về Unity đều sẽ được trả lời trên website cộng đồng http://answers.unity3d.com Và bạn có thể dễ dàng tìm thấy nhiều thông tin giải đáp ở bất cứ diễn đàn game nào trên internet
Unity là phần mềm hàng đầu trong ngành công nghiệp game toàn cầu với 5.5 triệu lập trình viên, hơn 770 triệu người chơi game làm từ Unity và hơn 1.7 tỷ thiết bị di động có cài đặt game được làm từ Unity Unity cũng cho các cá nhân và doanh nghiệp dùng free tất cả các sản phẩm và chỉ thu phí cực kì nhẹ nhàng với những bản nâng cao Mặc dù sinh sau đẻ muộn nhưng chiếm 47% người sử dụng engine game
d Tính kinh tế cao:
Lập trình viên có thể lựa chọn một trong những phiên bản như Personal (Miễn phí), Plus, Pro, Enterprise Ngoại trừ phiên bản Personal, tất cả các phiên bản còn lại đều trả phí Chi tiết các bạn có thể tham khảo tại https://store.unity.com/ nhưng phí phải trả là một con số rất khiêm tốn so với những gì engine này mang lại
Có thể thấy, tuy không phải engine “khủng” nhất, nhưng nếu xét toàn diện, Unity3D đích thực là một trong những engine game đa nền tảng tốt nhất hiện nay