Giới thiệu về engine lập trình game đa nền tảng Unity3D. Bạn sẽ có cái nhìn tổng quan về engine unity, phần mềm unity3d, những thành phần cơ bản để lập trình game unity, những nền tảng mà unity hỗ trợ, tối ưu code trong unity.
Trang 1viế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 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) thể loại bắn súng góc nhìn người thứ nhất bằng chính Unity 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 3D 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 Kế tiếp, tài liệu
sẽ trình bày về các vấn đề thuộc khía cạnh Design mà Designer cần phải thực hiện trong quá trình phát triển game nói chung và phát triển game trong Unity nói riêng 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ện 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 bắn súng góc nhìn người thứ nhất Cuối
Trang 2CHƯƠNG 1 TỔNG QUAN VỀ GAME ENGINE VÀ KHÔNG GIAN 3D
1.1 TỔNG QUAN VỀ GAME ENGINE
1.1.1 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
1.1.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
Trang 31.1.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 Game 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 (cấp cơ bản) 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.1.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 và Game bắn súng góc nhìn người thứ nhất (FPS) Như các thuơng hiệu nổi tiếng của id Sortware: Doom và Quake , thay vì phải làm việc từ đầu, các nhà phát triển khác (nếu được cấp phép) sẽ có quyền truy nhập vào phần lõi (mã nguồn) của Game và thiết kế các 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" (tài sản Game)
Các Game sau này, như Quake III Arena và sản phẩm năm 1998 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
Trang 4ngữ 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.1.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 sử 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 các ngôn ngữ lập trình cấp cao như Java và 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 (giới hạn bởi sức mạnh của card đồ họa), khả năng gây chậm máy 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 cho các nhà phát triển Game Engine
1.1.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à 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 khá 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
Trang 51.1.7 Game Engine cho Game bắn súng góc nhìn người thứ nhất (FPS)
Một trong các loại Game Engine được biết đến nhiều nhất là Game Engine cho các Game FPS Là bước đột phá của các nhà phát triển về chất lượng hình ảnh khi thực hiện các Game FPS trên góc nhìn của con người Trong khi các Game mô phỏng như điều khiển máy bay hay xe cộ và Game chiến thuật thời gian thực (RTS) tăng cường tính thực tế trong hình ảnh ở mức độ vĩ mô, thì Game bắn súng góc nhìn thứ nhất lại đi đầu về xử lý hình ảnh thực tế ở cấp độ nhỏ hơn
1.1.8 Phân loại Game Engine theo mức độ chuyên biệt
a Roll-your-own Game Engine
Roll-your-own Engine có thể được xem như những Engine ở mức thấp nhất Ngày nay rất nhiều công ty tự tạo ra Engine cho riêng họ với những thứ có thể Họ tận dụng những gói ứng dụng phổ biến, các API như XNA, DirectX, OpenGL, các API và SDL của Windows và Linux Ngoài ra, họ có thể dùng những thư viện từ nhiều nguồn khác nhau, được mua hoặc Open-Source Những thư viện đó có thể bao gồm cả những thư viện vật lý như Havok và ODE, những thư viện Scene-Graph như OpenSceneGraph và các thư viện GUI như AntTweakBar
Trang 6kém hiệu quả và không được ưa chuộng ngay cả với Engine được thiết kế một cách chuyên nghiệp
b Mostly-ready Game Engine
Mostly-ready Game Engine, những Engine nằm ở tầng trung Các nhà thiết kế Game nghiệp dư rất thích những Engine dạng này Chúng được thiết kế rất đầy đủ với mọi tính năng cần thiết, vẽ, tương tác, GUI, vật lý… ngoài ra chúng còn kèm theo rất nhiều tool mạnh Những Engine tầng này khá phong phú từ ORGE và Genesis3D (open-source), rẻ tiền như Torge hoặc đắc tiền như Unreal, id Tech và Gamebryo
Về mức độ, những Engine kể trên đều cần lập trình thêm để gắn kết mọi thứ với nhau nhằm tạo nên một Game hoàn chỉnh Hầu như mọi Mostly-ready Game Engine đều có phần hạn chế một ít so với roll-your-own Engine Vì mặc dù nó là sản phầm của rất nhiều người tham gia phát triển trải qua thời gian dài nhằm mang đến cho khách hàng những “tiện nghi” tốt nhất nhưng không phải khách hàng nào cũng giống nhau và phát triển những Game tương tự nhau
c Point-and-click Game Engine
Point-and-click Engine được xếp ở tầng cao nhất Những Engine này ngày càng trở nên phổ biến Nó có tất cả mọi tool với đầy đủ chức năng cho phép chúng ta chỉ việc chọn, click và chọn để tạo ra Game Những Engine như vậy, kể cả GameMaker, Torque Game Builder, và Unity3D được thiết kế để càng thân thiện với người dùng càng tốt Nó cũng yêu cầu ít lập trình hơn Điều này không có nghĩa việc lập trình không cần, nhưng nếu so với 2 loại Engine kể trên trên thì loại Engine này cần ít nhất
Nhược điểm rất lớn của những Engine point-and-click này đến từ việc những nhà phát triển bị hạn chế rất nhiều, vì với loại Engine này, chúng chỉ có thể cho ra một loại giao diện như tương tự nhau hoặc khác nhau một ít Nhưng điều này không có
Trang 7Khô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 (không), 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 Zero Tuy nhiên, để đơn giản hơn, chúng ta cũng sử dụng không gian cục bộ (Local Space – đượ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ệ này, đượ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 81.2.3 Vec-tơ (Vectors)
Chúng ta cũng sẽ có khái niệm vector 3D trong hệ trục toạ độ 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 hữu ích 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
1.2.4 Camera (Cameras)
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 của kịch bản trò chơi
Với khả năng điều chỉnh tầm nhìn (Field fo Vision - FOV), 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ờ (Motion Blurs), và những hiệu ứng khác đượ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
Hầu hết các 3D Game hiện đại sử dụng nhiều Camera để hiển thị các phần của thế giới trong trò chơi, Unity thực hiện điều này một cách dễ dàng bằng cách cho phép
có nhiều Camera trong một cảnh duy nhất, điều này có thể được viết mã điều khiển Camera tại bất kỳ điểm nào trong suốt thời gian chạy Nhiều camera có thể được sử dụng trong trò chơi để điều khiển việc kết xuất những đơn vị hình ảnh 2D và 3D riêng biệt như là một phần của quá trình tối ưu Ví dụ, đối tượng có thể được gom nhóm trong trong một lớp, và Camera được chỉ định để kết xuất hình ảnh của đối tượng trong
Trang 9phải làm để kế xuất hình ảnh của đối tượng lên màn hình
1.2.6 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 (Visual Appearence) 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à Textures (kết cấu) Shaders là những mã kịch bản phụ trách phong cách kết xuất hình ảnh
Trang 10- Nhà phát triển: Unity Technologies
- Phiên bản mới nhấ
- Được viết bởi ngôn ng
- Phát triển Game cho các h
gói), Wii, iPhone/iPad, Xbox 360,
dụng lợi thế của tốc độ biên d
biên dịch ra Mono trước khi nó
thực thi code vào những th
Ngoài thư viện Mono, Unity c
mền khác vào chức năng c
OpenGL và DirectX cho k
CHƯƠNG 2 UNITY ENGINE
CHUNG
Hình 2.1 Logo của Unity Engine
Unity Technologies ất: 3.5.2 (phát hành vào ngày 11/4/2012)
ng khác
ợ của Just-In-Time Compilation (JIT), sử dụC++ Mono Bằng việc sử dụng JIT, những Engine như Unity
biên dịch Những đoạn code do chúng ta viết
c khi nó được thực thi Điều này rất quan trọng cho
ng thời điểm cần thiết trong suốt thời gian ch
n Mono, Unity cũng tận dụng chức năng của những
ăng của nó, như Engine mô phỏng vật lý PhysicX cOpenGL và DirectX cho kết xuất hình ảnh 3D, OpenAL cho âm thanh
Windows, Mac OS X (tạo và đóng
nh 3D, OpenAL cho âm thanh Tất cả các
Trang 112.2 CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG CỦA UNITY
2.2.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 (Redering) cùng nhiều hỗ trợ cho phép áp dụng các công nghệ phổ biến trong lĩnh 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 xuất hình ảnh đồng thời tăng cường chất lượng hình ảnh sau khi kết xuất
Một số hỗ trợ:
- Unity cung cấp sẵn 100 Shaders với đầy đủ các loại phổ biến nhất
- Hỗ trợ Surface Shaders, Occlusion Culling, GLSL Optimizer
- Hỗ trợ LOD
2.2.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
Trang 12Unity 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.2.4 Substances (Texture thông minh)
Substances 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 xuất của Texture
2.2.5 Physics (vật lí)
PhysX là một Engine mô phỏng và xử lí vật lý 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 để đả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, Rigitbodies, Ragdolls, Joints, Cars, …
2.2.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, 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.2.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
Trang 13Realtime Networking, Remote Procedure Calls, Backend Connectivity, Web Browser Integration, Web Connectivity
2.3.1 Assets
Assets là những tài nguyên xây dựng nên một dự án Unity Từ những tập tin hình ảnh, mô hình 3D đến các tập tin âm thanh Unity gọi các tập tin mà chúng ta dùng để tạo nên trò chơi là tài sản (Assets) Điều này lí giải tại sao tất cả các tập tin, thư mục của các dự án Unity đều được lưu trữ trong một thư mục có tên là “Assets”
2.3.2 Scenes
Trong Unity, chúng ta cần hiểu một cảnh (hay một phân đoạn) nghĩa là một màn chơi riêng biệt hoặc một khu vực hay thành phần có trong nội dung của trò chơi (ví dụ như Game menu) Bằng cách tạo nên nhiều Scenes cho trò chơi, chúng
ta có thể phân phối thời gian tải hoặc kiểm tra các phần khác nhau của trò chơi một cách riêng lẽ
2.3.3 Game Object
Khi Assets được sử dụng trong Scene, chúng trở thành Game Object – một thuật ngữ được sử dụng trong Unity (đặc biệt là trong mảng lập trình) Tất cả các
Trang 14chức năng cần thiết để xây dựng nên bất kỳ một thành phần nào trong kịch bản Game mà chúng ta đã tưởng tượng
2.3.4 Components
Components có nhiều hình thức khác nhau Chúng có thể xác định hành vi, cách xuất hiện,… hay ảnh hưởng đến các khía cạnh khác trong chức năng của Game Object trong trò chơi
Bằng cách “gắn” chúng vào trong Game Object, chúng ta ngay lập tức có thể
áp dụng tác động của chúng lên đối tượng Những Components phổ biến trong quá trình phát triển trò chơi đều được Unity hỗ trợ sẵn Ví dụ như thành phần Rigidbody
đã được đề cập hay các yếu tố đơn giản khác như ánh sáng, Camera và nhiều thành phần khác Để tạo nên các yếu tố tương tác trong trò chơi, chúng ta sẽ sử dụng Script (mã kịch bản), chúng cũng được xem như là một Components trong Unity
2.3.5 Scripts
Được Unity xem như một Components, Script là một thành phần thiết yếu trong quá trình phát triển trò chơi và đáng được đề cập đến như một khái niệm “chìa khóa” Unity cung cấp cho chúng ta khả năng viết Script bằng cả 3 loại ngôn ngữ là: JavaScript, C# và Boo (một dẫn xuất của ngôn ngữ Python)
Unity không đòi hỏi chúng ta phải học làm thế nào để lập trình trong Unity, nhưng hầu như chúng ta phải sử dụng Script tại mỗi thành phần trong kịch bản mà chúng ta phát triển Unity đã xây dựng sẵn một tập hợp đa dạng các lớp, hàm mà chúng ta hoàn toàn có thể ứng dụng trong quá trình lập trình cho trò chơi của mình
Để viết script, chúng ta sẽ làm việc với một trình biên tập Script độc lập của Unity, hoặc với chương trình Mono Developer được tích hợp và đồng bộ với Unity trong những phiên bản mới nhất hiện nay
Mono developer là một IDE khá tốt để lập trình khi cung cấp nhiều chức năng tương tự như Visual studio Mã nguồn viết trên Mono Developer sẽ được cập
Trang 15Hình 2.2 Giao diện của Unity
∗ Chú thích:
- Scene (1): Nơi mà trò chơi sẽ được xây dựng
- Hierarchy (2): Danh sách các Game Object trong scene
- Inspector (3): Những thiết lập, thành phần, thuộc tính của đối tượng (hoặc Asset) đang được chọn
- Game (4): Cửa sổ xem trước, nó chỉ hoạt động trong chế độ “Play” (Preview – xem trước)
- Project (5): Danh sách các Assets của dự án, được ví như thư viện của dự
án
Trang 16trước (Front On) Cửa sổ này sẽ kết hình xuất đầy đủ những hình ảnh trong thế giới của trò chơi mà chúng ta tạo ra dưới dạng một vùng biên tập mà chúng ta có thể biên tập, chỉnh sửa trực tiếp thế giới đó
Khi kéo thả Assest vào cửa sổ Scene, Assets sẽ trở thành Game Object Cửa
sổ Scene được ràng buộc cùng với cửa sổ Hierarchy, cửa sổ Hierarchy liệt kệ danh sách các Game Object có trong Scene và được sắp xếp theo thứ tự chữ cái từ A-Z
Hình 2.3 Các nút chức năng cho cửa sổ Scene
Cửa sổ Scene còn đi kèm với 4 bốn nút chức năng hữu ích được hiển thị dưới dạng hình ảnh như trên Chúng có thể được lựa chọn thông qua các phím tắt Q, W,
E và R Những nút này có các chức năng như sau:
- Công cụ bàn tay (Q): Công cụ này cho phép chúng ta di chuyển đến một khu vực nào đó trong Scene bằng thao tác kéo thả thuộc trái
- Công cụ di chuyển (W): Công cụ này cho phép chúng ta chọn một đối tượng trong cảnh và thực hiện thao tác di chuyển, thay đổi vị trí của đối tượng đó Khi chọn, tại vị trí của đối tượng sẽ hiển thị các trục và mặt phẳng gắn liền với đối tượng cho phép chúng ta di chuyển đối tượng trượt theo các trục, mặt phẳng hoặc di chuyển một cách tùy ý
- Công cụ xoay (E): Công cụ này có đặc điểm và cách sử dụng giống với công cụ di chuyển, tuy nhiên thay vì để di chuyển vị trí của đối tượng thì công cụ này giúp chúng ta xoay đối tượng xoay quanh trục hay tâm của đối tượng
- Công cụ điều chỉnh tỉ lệ (R): Cũng tương tự như công cụ di chuyển và xoay, công cụ này cho phép chúng ta tùy chỉnh kích thước, tỉ lệ của đối tượng một cách tùy ý
Trang 17Ngoài việc hiển thị các Component của đối tượng được chọn, cửa sổ Inspector còn hiển thị các thiết đặt chung của hệ thống hay của trò chơi khi ta chọn chúng từ menu Edit
Trang 18Hình 2.5 Cửa sổ Inspector
Trong hình trên, chúng ta thấy cửa sổ Inspector đang hiển thị một vài thuộc tính, Components của một đối tượng đang được chọn Trong đó, bao gồm 2 Components là Transform và Animation Cửa sổ Inspector sẽ cho phép chúng ta thay đổi các thiết đặt trên Các Components này còn có thể được tạm thời vô hiệu hóa vào bất kỳ lúc nào chúng ta muốn bằng cách bỏ chọn Checkbox ở góc trên bên trái của mỗi Component, việc này sẽ rất hữu ích cho chúng ta khi muốn kiểm tra hay thử nghiệm các Components này Ngoài ra, cửa Inspector còn cho phép chúng
ta vô hiệu hóa toàn bộ một đối tượng đang được chọn bằng cách bỏ chọn Checkbox
ở trên cùng góc trái của cửa sổ Inspector
2.4.3 Cửa sổ Project
Trang 19Hình 2.6 Cửa sổ Project
Cửa sổ Project là cửa sổ cho phép chúng ta nhìn thấy trực tiếp nội dung của thư mục Assets của dự án Mỗi dự án Unity đều được chứa trong một thư mục cha Trong đó có 3 thư mục con là Assets, Library và Temp (chỉ có khi Unity đang chạy) Đặt tất cả các Assets vào thư mục Assets có nghĩa là ngay lập tức chúng ta sẽ thấy chúng xuất hiện trong cửa sổ Project Ngoài ra, khi thay đổi vị trí của Assets trong thư mục Assets hay lưu tập tin lại từ một chương trình ứng dụng thứ 3 nào khác (ví
dụ như Photoshop), sẽ làm cho Unity nhập lại (Re-Import) Assets, phản ánh sự thay đổi này ngay lâp tức trong cửa sổ Project và Scene có sử dụng Assets vừa được thay đổi
Cửa sổ Project được tích hợp nút Create, nút này cho phép chúng ta tạo mới bất kì một Assets mới nào, ví dụ như Script, Prefabs, Materials, …
2.4.4 Cửa sổ Game
Cửa sổ Game sẽ được gọi khi chúng ta nhấn vào nút Play (là một hành động thực hiện test trò chơi) Cửa sổ này cho phép chúng ta tùy chọn về thiết đặt tỉ lệ màn
Trang 20chúng sẽ trở về như ban đầu (trước khi nhấn nút Play) sau khi kết thúc chế độ Testing
Trang 213.2 ĐẶC ĐIỂM
3.2.1 Một số đặc điểm chung
Giống như đa số các tựa Game bắn súng, Game FPS được đại diện bởi các loại
vũ khí tầm xa và sự đa dạng trong số lượng kẻ địch Vì được xây dựng trong môi trường 3D, thể loại Game này cần được thiết kế sát với thực tế hơn các Game 2D, về
cơ bản Game FPS cần mô phỏng chính xác về trọng lực, ánh sáng, âm thanh và những
va chạm Game FPS thường được chơi trên máy tính cá nhân thông qua sự kết hợp giữa bàn phím và chuột hay thông qua các cần và nút điều khiển tích hợp trên controller của các hệ máy console Cách điều khiển trong Game FPS bao gồm những thao tác cơ bản phổ biến như đi, chạy, ngắm và bắn
Trong Game FPS, đối tượng phổ biến được hiển thị trên màn hình là đôi tay và
vũ khí của nhân vật, bên cạnh đó là hệ thống HUD hiển thị các thông tin về sức khỏe, đạn dược và vị trí của nhân vật trong địa hình
3.2.2 Yếu tố chiến đấu
Thông thường các Game FPS đều được liệt kê vào thể loại hành động với các yếu tố hành động nhịp độ nhanh và có tính chất bạo lực Thỉnh thoảng cũng có khác
Trang 22chơi thực hiện chiến đấu cận chiến khi đối thủ đến quá gần hay khi vũ khí tầm xa không còn hiệu lực (như hết đạn, kẹt đạn) Bên cạnh các Game bắn súng mang yếu tố hành động nhịp độ nhanh với xu hướng điện ảnh thì một số tựa Game theo xu hướn chiến thuật khi mô tả sát với thực tế hơn về cách chiến đấu và chiến thuật trong các pha hành động
Vũ khí đối tượng quan trọng trong Game FPS, chúng thường được thiết kế chi tiết với đầy đủ các bộ phận và mô phỏng đầy những cảm giác và đặc điểm khi sử dụng như sự sức nặng, độ chính xác, mức độ sát thương, sự rung giật, …
3.2.3 Phong cách thiết kế màn chơi
Game FPS thông thường tuyến tính với các màn chơi kết nối với nhau nhưng được thiết kế riêng biệt nhằm tối ưu hóa sự chi tiết của môi trường, giảm tải xử lí của máy tính đồng thời phân đoạn nội dung Bên cạnh phong cách đó, nhiều tựa Game FPS
áp dụng các công nghệ hiện đại cho phép giảm bớt sự tuyến tính và tăng mức độ rộng lớn của môi trường trong Game
3.3 MỘT SỐ TỰA GAME TIÊU BIỂU
- Series Game FPS đề tài khoa học viễn tưởng đã trở thành huyền thoại: Half Life
- Series Game FPS lấy đề tài chiến tranh thành công nhất: Call Of Duty
Trang 23cây, xe, máy bay, các nhân v
Khi phát triển Game
cây, xe, máy bay, các nhân vật…
ng thành quả sau quá trình modelling (nhân vđóng một vai trò rất lớn trong quá trình phát tri
p trình (scripting) có vai trò tạo nên khả năng tương tác và trí thông minh cho các
o nên một phần lớn các đối tượng trong Game
ả của việc scripting vào
Game trên Unity cũng như với hầu hết các Game
sau quá trình modelling (nhân vật, cây)
n trong quá trình phát triển Game, nếu việc
ng tác và trí thông minh cho các đối
Game cho phép làm chủ
Game Engine khác,
Trang 24Các phần mềm thiết kế, dựng hình 3D đều cung cấp đầy đủ các công cụ, chức năng tương tự nhau với mục đích cuối cùng là cho phép chúng ta tạo ra các mô hình 3D hoàn chỉnh Các công cụ đó có thể là những công cụ vẽ hình 2D như Line, Circle, Rectangle, … Những công cụ vẽ hình 3D như Box, Plane, Spherical, … Những lệnh chuyển đổi, hiệu chỉnh cho phép chúng ta tùy chỉnh các đơn vị của một đối tượng 3D (đỉnh - vertex, cạnh - egde, poly – đa giác, face – mặt, element – đơn vị) Mô hình 3D cuối cùng là một hoặc một tập hợp của các mô hình 3D với các đơn vị cơ bản (tiêu biểu
là poly) thể hiện hình dạng của đối tượng mà ta muốn mô phỏng dưới dạng mô hình 3D trong máy tính Lúc này, mô hình có thể được xem như là một khung hay một lưới thô được chuẩn bị cho nhiều bước kế tiếp
Hình 4.2 Modelling tạo ra mô hình 3D mô phỏng một ngôi nhà
Để tạo nên vẻ bề ngoài của mô hình như các thành phần màu sắc, sự phản xạ ánh sáng, … chúng ta sử dụng các hình ảnh được biên tập từ các phần mềm biên tập,
xử lí ảnh như Photoshop cùng các chức năng và lệnh hiệu chỉnh liên quan để áp (lát) vào mô hình Các công việc thiết kế và áp (lát) hình ảnh này gọi là Texturing và Mapping mà chúng ta có thể gọi nôm na bằng tiếng Việt là tạo và áp vật liệu cho mô hình Thông thường, công việc này là một công đoạn riêng và độc lập với Modelling,
Trang 25Hình 4.3 Mô hình 3D sau khi áp vật liệu
4.1.2 Phần mềm dựng hình 3D chuyên dụng
Autodesk 3D Studio Max: Đây là một trong những phần mềm dựng hình 3D nổi tiếng và mạnh nhất thế giới Chương trình được phát triển bởi hãng Autodesk (một hãng chuyên về phát triển phần mềm đồ họa 3D nổi tiếng bậc nhất thế giới với các chương trình như 3D Studio Max, Maya, Auto CAD, …) với đầy đủ các tính năng hỗ trợ dựng hình 3D, biên tập vật liệu, diễn hoạt, dựng phim 3D…
Một số thành phần và chức năng cơ bản trong 3D Studio Max:
- Các công cụ dựng hình: Geometry, Shapes, Light, Camera, …
- Các tập lệnh hỗ trợ dựng và hiệu chỉnh mô hình và áp vật liệu: Loft, Edit poly, Boolean, UVW Mapping, Unwrap UVW…
Trang 26quy mô của trò chơi mà chúng ta nên lựa chọn những phần mềm khác nhau với những quy mô, khả năng chuyên biệt và giá thành khác nhau
4.2 THIẾT KẾ MÔI TRƯỜNG VÀ NHÂN VẬT
4.2.1 Thiết kế môi trường
Trong quá trình thiết kế môi trường, chúng ta có thể chia làm 4 công đoạn cơ bản nối tiếp nhau là:
- Dựng hình – Modelling: Thiết kế mô hình 3D mô phỏng các đối tượng từ thực tế hoặc trí tưởng tượng (kịch bản, ý tưởng)
- Thiết kế địa hình (terrains): Ở bước này, chúng ta tạo ra địa hình với mục đích phản ánh “phần nền” của môi trường như đất, sa mạc các, đồi núi, … Nhằm mục đích cuối cùng là làm “nền” để có thể đặt các đối tượng khác lên Việc thiết kế địa hình (terrains) khi phát triển một trò chơi bằng Unity có 2 lựa chọn là: dựng địa hình bằng một ứng dụng dựng hình như mọi mô hình 3D khác hoặc sử dụng công cụ thiết kế địa hình của Unity
- Phối cảnh: Nhập tất cả các mô hình 3D đã được thiết kế và xuất bởi phần mềm dựng hình 3D vào Unity Thực hiện các thao tác kéo thả, tủy chỉnh để xác định vị trí, kích thước của các mô hình trong cảnh
Trang 27Hình 4.4 Môi trường của một cảnh trong demo
- Áp dụng các hiệu ứng: Thiết kế và áp dụng các hiệu ứng thành phần của môi trường như ánh sáng, lửa, nước, khó bụi, … sao cho phù hợp với kịch bản bằng các hệ thống bức xạ hạt (Particles system) hay các hiệu ứng hình ảnh (Image effects) (Particles system và Image effects sẽ được đề cập cụ thể trong chương 3 - Hiệu ứng)
Việc thiết kế môi trường có thể ví von như việc xây nhà, trồng cây khi công việc chủ yếu của chúng ta là tạo ra các mô hình từ các phần mềm hỗ trợ và bố cục vị trí của chúng trong Unity
4.2.2 Thiết kế địa hình (Terrains)
Trang 28phần mềm dựng hình 3D rất khó kiểm soát, đồng thời các thao tác nhập xuất và chỉnh sửa địa hình sau khi đã nhập vào Unity sẽ trải qua nhiều công đoạn phức tạp gây mất thời gian và tạo ra nhiều rủi ro Lựa chọn này thường được ưu tiên với những địa hình
có các tính chất như diện thích nhỏ và ít phức tạp với mục đích cuối cùng là nhằm tối
ưu hóa về mặt đồ họa của trò chơi
Lựa chọn thứ 2 – sử dụng công cụ xây dựng địa hình được cung cấp sẵn của Unity là một lựa chọn cho hầu hết các dự án với lí do nhanh chóng, hiệu quả mà không phức tạp
Terrains trong Unity cũng là một Game Object với Components cơ bản là Transform, Terrain và Terrain Collider Trong đó Component Terrain là thành phần đặc biệt đáng chú ý Đó thật ra là một script đã được xây dựng sẵn bởi Unity, script này hoạt động như một Editor có thể chạy trực tiếp trong quá trình thiết kế Nó cung cấp cho chúng ta các công cụ:
Hình 4.5 Rise and lower the terrain height
- Rise and lower the terrain height: Công cụ này cung cấp cho chúng ta tính năng thực hiện tạo độ cao hoặc sâu cho các khu vực trong địa hình
Trang 29Hình 4.6 Set the terrain height
- Set the terrain height: Cho phép chúng ta xác định chính xác độ cao
Hình 4.7 Smooth the terrain height
- Smooth the terrain height: Cho phép chúng ta làm cho địa hình được phẳng
và liền mạch một cách tự nhiên hơn
Trang 30Hình 4.8 Paint the terrain texture
- Paint the terrain texture: Với công cụ này, chúng ta có thể chọn nhiều texture sau đó vẽ phối hợp (sơn) lên bề mặt địa hình để tạo màu sắc, chất liệu cho địa hình
Trang 31Hình 4.9 Place trees
- Place trees: Giúp chúng ta đặt hàng loạt các cây một cách ngẫu nhiên về số lượng, kích thước và vị trí từ những mô hình cây mà chúng ta đã chuẩn bị
Trang 32Hình 4.10 Place plants, stones and other small foilage
- Place plants, stones and other small foilage: Tương tự như Place trees, công
cụ này cho chúng ta áp dụng đối với các thành phần nhỏ hơn trên địa hình như cỏ, những hòn đá nhỏ, …
Trang 33Hình 4.11 Setting for the terrain
- Setting for the terrain: Cho phép chúng ta tùy chỉnh các lựa chọn chung cho địa hình như độ chi tiết của cây và các đối tượng, các thông số của gió tác động đến địa hình, …
Các công cụ trên đều được sử dụng chủ yếu qua các thao tác tùy chọn số liệu và dùng chuột vẽ trực tiếp vào cửa sổ Scene Sau khi phối hợp sử dụng các chức năng trên, chúng ta đã hoàn thành địa hình một cách đơn giản và nhanh chóng Trong suốt quá trình phát triển trò chơi, chúng ta hoàn toàn có thể chỉnh sửa địa hình cũng bằng những công cụ này
Trang 34Hình 4.12 Toàn cảnh một địa hình cơ bản được dựng trực tiếp bằng Unity
Hình 4.13 Địa hình dưới góc nhìn của nhân vật
Trang 35Hình 4.14 Một mô hình nhân vật
Việc thiết kế nhân vật cũng tương tự như giai đoạn đầu cùa việc thiết kế môi trường, đó là dựng mô hình 3D Tuy nhiên khi phát triển về sau, việc thiết kế nhân vật không chỉ đơn giản là tạo ra một mô hình tĩnh không có khả năng tương tác mà nhân vật cần phải có thêm các yếu tố khác (sẽ được đề cập sau) như khả chuyển động (được thông qua quá trình thiết kế diễn hoạt), trí thông minh và khả năng tương tác với môi trường và các nhân vật khác (thông qua mảng lập trình)
Khác với thiết kế môi trường khi được hỗ trợ một phần bởi Unity, việc thiết kế
mô hình nhân vật khá phức tạp khi gần như phụ thuộc hoàn toàn vào các ứng dụng dựng hình 3D, điều này đòi hỏi chúng ta phải có những kỹ năng cần thiết để đảm bảo nhân vật được thiết kế hoàn chỉnh và phù hợp với trí tưởng tượng (kịch bản)
Nhân vật là một trong những mô hình 3D cần được chăm chút và xây dựng chi
Trang 36o nên các chuyển động trong cảnh Hoạt cảnh th
ng hệ thống Frame làm căn bản chuyển động Các frame mang
a các mô hình trong cảnh xuất hiện trong khoảng thgây cảm giác chuyển động
Hình 5.1 Một hoạt cảnh thay đạn
n hoạt nhằm chỉ việc thiết kế các chuyển động Đ
có một hoặc nhiều mô
nh thường được tạo
ng Các frame mang
ng thời gian đủ nhanh
ng Đối với phát triển
Trang 37Diễn hoạt đối tượng (diễn hoạt nhân vật) thường được thực hiện trong các ứng dụng hỗ trợ thiết kế diễn hoạt và được xuất ra kèm theo các mô hình 3D như một thành phần dữ liệu của mô hình cho phép lập trình viên truy xuất và sử dụng chúng Trong khi đó diễn hoạt cắt cảnh thường được thực hiện trực tiếp trong Engine (Unity) bằng cách sử dụng dữ liệu hoạt cảnh của các đối tượng riêng lẽ kết hợp với một vài diễn hoạt khác được thiết kế trực tiếp bằng công cụ tạo diễn hoạt trong Unity để xây dựng nên một đoạn cắt cảnh, thông thường các đoạn cắt cảnh này được xây dựng thành một scene riêng để thuận tiện cho việc diễn hoạt và chia nhỏ màn chơi nhằm làm cho đoạn cắt cảnh được tập trung thiết kế chi tiết hơn
5.2 THIẾT KẾ DIỄN HOẠT BẰNG PHẦN MỀM CHUYÊN DỤNG
Việc thiết kế diễn hoạt trên các phần mềm hỗ trợ sẽ đòi hỏi nhiều kỹ năng và kinh nghiệm hơn so với diễn hoạt trong Unity Đa số các phần mềm hỗ trợ thiết kế diễn hoạt đều dựa trên 2 thành phần cơ bản đó là: hệ thống khung xương và hệ thống frame
Hệ thống khung xương phổ biến là biped và bone, đây là những thành phần cần được gắn vào đối tượng (nhân vật) trước khi thực hiện diễn hoạt nhằm mục đích ràng buộc chuyển động của các bộ phận trên đối tượng với nhau cũng như nhằm làm chủ thể điều
Trang 38và góc xoay của các thành phần của đối tượng (hay của hệ thống xương) ứng với những thời điểm khác nhau
Một số phần mềm hỗ trợ thiết kế diễn hoạt: Autodesk 3D Studio Max, Autodesk Maya, Autodesk Motion Builder, Blender, …
Việc thiết kế diễn hoạt được đề cập ở trên được làm trực tiếp bởi người thiết kế thông qua trí tưởng tượng và các phép thử Ngoài cách này, chúng ta còn một cách thiết kế diễn hoạt khác đó là sử dụng công nghệ Motion Capture, công nghệ này cho phép chúng ta sử dụng các hệ thống khung xương và frame trong các phần mềm thiết
kế diễn hoạt cùng việc kết nối giữa máy tính với máy camera và các cảm biến được gắn với một diễn viên diễn hoạt nhằm ghi lại các chuyển động của diễn viên sau đó lưu lại thành dữ liệu diễn hoạt được biết với tên gọi là Motion Capture Data mà chúng ta có thể sử dụng vào trong diễn hoạt của các nhân vật trong trò chơi Cách diễn hoạt có ưu điểm rất mạnh là mô phỏng chuyển động trực tiếp từ thực tế vào nên chuyển động sẽ rất tự nhiên và gần như giống thật, tuy nhiên nó cần được đầu tư một khoảng chi phí khá lớn cho các thiết bị kỹ thuật hỗ trợ và thuê diễn viên diễn hoạt
5.3 DIỄN HOẠT VỚI UNITY
Unity cung cấp khả năng thiết kế diễn hoạt tương tự như các ứng dụng hỗ trợ thiết kế diễn hoạt khác Bao gồm hệ thống Keyframe và khả năng tùy chỉnh thuộc tính của các Frame Tuy nhiên trong Unity không hỗ trợ hệ thống khung xương mà diễn hoạt sẽ được thực hiện trực tiếp trên đối tượng hoặc hệ thống khung xương được thiết
kế từ trước trong các phần mềm hỗ trợ diễn hoạt
Trang 39Hình 5.2 Cửa sổ thiết kế diễn hoạt trong Unity
Cửa sổ Animation trong Unity được truy xuất bằng cách vào menu Window/Animation Tại đây, chúng ta thấy giao diện của cửa sổ thiết kế diễn hoạt (hay cửa sổ biên tập Animtion) tương tự như nhiều phần mềm hỗ trợ diễn hoạt khác Cửa sổ cho phép chúng ta tạo ra các Animation Clip cho bất kỳ một đối tượng hay đối tượng con của một đối tượng nào đó đang được chọn trong scene, chúng ta có thể record, tạo
ra các frame trên thanh time line, điều chỉnh vị trí và thuộc tính của các frame này, chạy thử animation, …
Trang 40Hình 5.3 Animation event
Khi thiết kế diễn hoạt trong Unity, chúng ta được Unity cung cấp cho một khả năng rất hữu ít đó là Animation Event, chức năng này cho phép chúng ta gọi và thực thi một hàm bất kỳ có trong script được gắn với đối tượng được diễn hoạt tại một điểm bất kỳ trên timeline