LỊCH SỬ GIẢI QUYẾT VẤN ĐỀVới vấn đề nêu trên thi có rất nhiều công cụ hỗ trợ nổi tiếng giúp cho việc phát triển Game và được nhiều lập trình viên sử dung Game 3D như: Blender, Cinema4D h
Trang 1MỤC LỤC
Trang 2Hình 3 5 Diễn hoạt trong Unity
Hình 3 6 Diễn hoạt thay đạn
Hình 3 7 Hệ thống diễn hoạt
Hình 3 8 Điều chỉnh diễn hoạt
Hình 3 9 Thành phần trạng thái trong hệ thống diễn hoạtHình 3 10 Chuyển trạng thái trong hệ thống diễn hoạt
Hình 3 11 Paramaters trong hệ thống diễn hoạt
Hình 3 12 Layer trong hệ thống diễn hoạt
Hình 3 13 Công cụ nâng địa hình
Hình 3 14 Công cụ hạ địa hình
Hình 3 15 Công cụ tạo độ mượt địa hình
Hình 3 16 Công cụ tạo bề mặt địa hình
Hình 3 17 Công cụ tạo cây
Hình 3 18 Công cụ tạo cây cỏ, đá
Hình 3 19 Công cụ tùy chỉnh địa hình
Hình 3 20 Địa hình trong trò chơi
Hình 3 21 Hệ thống hạt
Hình 3 22 Hiệu ứng khi bắn
Hình 3 23 Mô hình chức năng của plugin giao diện
Trang 3Hình 3 25 Giao diện trong trò chơi
Hình 3 26 Thành phần script của nhân vật
Hình 3 27 Thành phần Camera của nhân vật góc nhìn thứ nhấtHình 3 28 Xa/gần của Camera
Hình 3 29 Mô phỏng người chơi ở góc nhìn thứ nhất
Hình 3 30 Vị trí của trang bị trong thẻ Inspector
Hình 3 31 Giao diện túi trang bị
Hình 3 32 Mô tả Ray Casting
Hình 3 43 Tìm ngược lại để ra ô cha
Hình 3 44 Hệ thống lưới tìm đường đi
Hình 3 45 Cờ báo hiệu trạng thái
Trang 4Hình 3 52 Hiệu ứng sau khi sử dụng kỹ thuật tối ưu
Hình 3 53 Hướng dẫn người chơi
Trang 5DANH MỤC BẢNG
Bảng 3 1 Thuộc tính của trang bị vũ khí
Bảng 3 2 Trang bị, vũ khí, hiệu ứng và thuộc tính
Bảng 3 3 Thuộc tính, chức năng của quái vật
Trang 6KÍ HIỆU VÀ VIẾT TẮT THUẬT NGỮ
(Giao diện người dùng)
(Ngôn ngữ đổ bóng OpenGL)
4 LOD Level of detail (cấp độ chi tiết)
(Bắn súng góc nhìn thứ nhất)
(Điều khiển góc nhìn thứ nhất)
Trang 7TÓM TẮT
Trong xã hội hiện đại, cùng với sự phát triền mạnh mẽ của khoa học công nghệ, các hình thức giải trí ngày càng trở nên đa dạng và phong phú để đáp ứng nhu cầu giải trí của con người Trong đó, game là một trong những hình thức giải trí tốt với nhiều thể loại game đặc sắc khác nhau Tuy nhiên, để thiết kế một game thì cần tốn nhiều thời gian, công sức Chính vì vậy, để đáp ứng cho sự phát triền của game, các nhà khoa học công nghệ game đã cho ra đời các Game Engine để giảm thời gian thiết kế và tăng hiệu quả cũng như chất lượng game, đặc biệt là những nhóm phát triền game không chuyên Hiện nay, có rất nhiều Game Engine phổ biến như: Cry Engine, Unreal, X-Ray, Vision,
… Trong đó, Unity3D là Game Engine được đánh giá tốt nhất và được nhiều người lựa chọn nhất Đặc biệt Unity3d hỗ trợ trên nhiều nền tảng: PC, Adroid, Windows Phone, Mac, …và trình duyệt Web Player với chất lượng hình ảnh tốt và đặc sắc Đây cũng là
lý do em chọn đề tài
Từ khóa: Game Engine, nhu cầu giải trí, Unity3D
Trang 8In the modern society, beside the growing up of techonology, many kinds of entertaiment also develop to reponse human needed and game become more and more popular in the world Inside of intertaiment, game is more diversity and plentiful with a lot of type gameplay However, to build a good game, it isn’t easy and has to spend to time and efford To solve this problem, a lot of Game Engines were created to help the game developing easier especially for amateurs Nowadays, there are many popular Game Engines such as: Cry Engine, Unreal, X-Ray, Vision, …In these, Unity3D is the most Game Engines and many people are chosen and good review The special things
of Unity is it suporting multi-platform such as: PC, Adroid, Windows Phone, Mac, …and web brower with Unity Web Player with high quaility game This is reason why I choose Unity to perform this topic
Key Word: Game Engine, entertaiment, Unity3D
Trang 9CHƯƠNG 1: TỔNG QUAN1.1 ĐẶT VẤN ĐỀ
Ở thế kỉ XXI, công nghệ vi xử lý và card đồ họa đang dần tiên tiến cho ra đời nhiều sản phẩm Game với cách chơi và hình ảnh sinh động, đưa thế giới ảo trong Game như đời thực Ngành công nghiệp Game ngay phát triển mạnh mẽ và hấp dẫn người chơi với nhiều lối chơi khác nhau Có rất nhiều nhà phát hành game thân thuộc với các gamer trên thế giới như: Clover Studios, Konami, Nintendo, Capcom , những hãng game này cho ra đời rất nhiều game với công nghệ đột phá trên nhiều thiết bị và nền tảng khác nhau: PC, mobile, tablet Phía sau những Game và nhà phát hành Game điều có một Game Engine - một công cụ hỗ trợ cho những nhà sản xuất Game, giúp những lập trình viên Game viết Game một các nhành chóng, hiệu quả cao Tại Việt Nam, ngành công nghiệp Game đang phát triển theo hình thức phát hành Game Đa số các công ty ở Việt Nam chỉ phát triển Game với những dự án nhỏ, đồ họa kém hấp dẫn không lôi cuốn được nhiều game thủ
Với xã hội ngày nay thì nhu cầu giải trí ngày càng được chú trọng Sau thời gian học tập và làm việc mệt mỏi, chơi game là cách giải trí hiệu quả và tốt nhất Chơi game còn giúp cho tư duy bản thân con người trở nên nhạy bén, nhanh nhẹn Và một game hiện nay được cộng đồng game Việt Nam cũng như thế giới yêu thích đó là game “Thể loại hành động bắn súng góc nhìn thứ nhất”
Trang 101.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ
Với vấn đề nêu trên thi có rất nhiều công cụ hỗ trợ nổi tiếng giúp cho việc phát triển Game và được nhiều lập trình viên sử dung Game 3D như: Blender, Cinema4D hay 3DsMax.Từ việc tạo ra những khối câu, những khối lập phương đơn giản đến những hình ảnh phức tạp bằng cách xử lý và ghép những khối hình đơn giản lại.Có rất nhiều công cụ hỗ trợ được phát triển : Unreal, X-Ray, Vision, Unity 3D, Trong đó công cụ được ưa chuộng và giúp cho việc viết Game trở nền tiết kiệm thời gian, hiệu quả đó là Unity 3D.Công cụ nay hỗ trợ trên đa nền tảng như Windows, Adroid, IOS, Xbox, Wii Ngoài ra, phần mềm Unity 3D còn tương tác với nhiều chương trình đồ họa 3D khác giúp cho việc thiết kế đồ họa trở nền sống động, chân thực hơn
1.3 HƯỚNG GIẢI QUYẾT VẤN ĐỀ
Từ những xu hướng và những bất cập trên, em sẽ khảo sát và nghiên cứu về một Engine Game, đó là Unity Engine
Unity Game là một trong những engine khá phổ biến, có khả năng phát triển trò chơi trên đa nền tảng Unity tạo ra được nhiều thể loại game với nhiều góc nhìn khác nhau,
có hỗ trợ mô hình trực tiếp, với nguồn tài liệu hấp dẫn được cộng đồng lập trình viên
ưa chuộng Unity đến nay cho ra đời 2 phiên bản: Unity Pro (có tính phí) và Unity Free (không tính phí) Unity không chỉ dành cho những công ty phát triển Game chuyên nghiệp mà còn dành cho tất cả giới làm game nghiệp dư cũng có thể dễ dàng
Trang 111.4 CÁCH GIẢI QUYẾT VẤN ĐỀ
Đề tài nay thuộc hướng tìm hiểu về công nghệ tư đó xây dựng và phát triển các ứng dụng game Mục tiêu chủ yếu của đề tài nay là Engine Unity Game Việc xây dựng các game dựa trên nhiều thuật toán xử lý character, camera, wave path, các và chạm, các hiệu ứng giúp cho scene, character trong không gian 3D với mô hình game thể loại bắn súng hành động góc nhìn thứ nhất Để thực hện mục đích trên nội dung đề tài cần đạt được những tiêu chí sau:
• Tìm hiểu về tổng quan về Unity, tạo các hình thể trong không gian 3 chiều
• Tìm hiểu các vấn đề trong game như: tạo nhân vật (character), môi trường (scene), tài nguyên, âm thanh(sound), các text hay các hiệu ứng hạt (particle),
• Tìm hiểu về cách giải quyết, tạo ra kịch bản (scrpit), giao diện đồ họa, cách khởi tạo và quản lý trong môi trường game
• Xây dựng và phát triển thể loại hành động bắn súng góc nhìn thứ nhất (FPS)
Trang 12CHƯƠNG 2: SƠ LƯỢC VỀ UNITY 3D2.1 GIỚI THIỆU SƠ LƯỢC VỀ UNITY 3D
Hình 2 Logo Unity
• Nhà phát triển: Unity Techonologies
• Phiên bản mới nhất: Unity version 5.4.1, 28/7/2016
• Ngôn ngữ phát triển: C#, Boo, Javascrpit
• Phát triển Game trên đa hệ điềuhành: Windows, MAC OS X, Wii, Iphone/Ipad, Xbox 360, Android, PS3
• Giấy phép: Độc quyền
• Wesbsite: www.unity3d.com
Unity3D là phần mềm làm game trực tiếp theo thời gian thực, mà không cần render, cho phép người design game có thể thiết kế InterfaceGraphic, map hay character…từ một phần mềm thứ 2 (thường là các phần mềm thiết kế đồ họa chuyên nghiệp như 3Dsmax, Blender, Maya, XSL,Cinema4D,Cheetah3D, Modo, Autodesk FBX, LightWave…) sau đó chỉ việc import nó vào trong Unity với định dạng của tập tin là
*.FBX hay *.dae, *.3DS, *.dxf và *.obj, nhưng định dạng *.FBX hay được dùng vì được tối ưu hóa hơn, còn dùng các định dạng khác ngoài FBX thì phải cài phần mền thiết kế character tưng ứng thì mới dùng được (tức là dùng Maya có định dạng *.mb,
*.mà thì muốn dùng được phải cài Maya)
Ngoài ra khi chúng ta design được một game thì chúng ta có thể xuất được ra một file.exe và có thể chạy và chơi được trên PC khác
Trang 13Uinty sử dụng thư viện mã nguồn mỡ C++ Mono, được sự hỗ trợ của Just-In-Tìme Compilation(JIT) nền tốc độ biên dịch rất nhanh Những đoạn code do chúng ta viết sẽ được Unity biên dịch ra Mono trước khi 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 quá trình chạy (Run time).Ngoài thư viện Mono, Unity cũng tận dụng được những chức năng của những phần mềm khác, như Engine mô phỏng vật lý PhysicX của Nvidia, OpenGL và DirectX cho kết xuất hình ảnh 3D, OpenAL cho âm thanh Tất cả các thư viện này được xây dựng thành các tính năng tư động hoặc trực quan vào Unity
Một thế mạnh nữa của Unity là chúng ta có thể chạy demo game của chúng ta ngay trong khi design, nó có hỗ trợ hai chế độ là Scene và Game, rất thuận tiện cho việc test thử các mô-đun Game
Khi tải Unity về các chúng ta cài đặt bình thường, đến khi kết thúc cài đặt nền các chúng ta chọn phiên bản Pro thì cần phải mua, còn nếu là người dùng free thì các chúng ta chọn kích hoạt qua web, chỉ cần có kết nối mạng internet, sau đó chọn cài đặt thủ công và nhập mail, chọn free là chúng ta có thể sử dụng một bản Unity free
Trang 14Egine – Đặc điểm CryEngine 3 jMonkeyEngine Unity 3D
Languge
blend, …Level Editor Sandbox jMonkey Plaforms MonoDevelop
extensions
Bảng 2 Bảng so sánh đặc điểm Unity Engine với các Engine khác
2.2 CÁC ĐẶC ĐIỂM VÀ TÍNH NĂNG CỦA UNITY3D
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
Trang 15Hình 2 Kết xuất hình ảnh
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
Trang 162.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 nghệ và kỹ thuật về ánh sáng được Unity hỗ trợ: Lingtmapping, Realtime Shadows, hiệu ứng Sunshafts và Lens Flares
Hình 2 Minh họa về ánh sáng
2.2.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
Hình 2 Minh họa địa hình
Trang 172.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
Hình 2 Minh họ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, …
Trang 182.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)
Hình 2 Hệ thống lưới định hướng
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
2.2.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 Scrip và Boo
Trang 192.2.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 tăng cung cấp bởi Networking như: State Synchronization, Realtime Networking, Remote Procedure Calls, Backend Connectivity, Web Browser Integration, Web Connectivity
2.3 CÁC THÀNH PHẦN TRONG UNITY3D
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”
Hình 2 Minh họa tài nguyên
Trang 202.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ẽ
Hình 2 Minh họa phân đoạn (cảnh)
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 Game Object đều chứa ít nhất một thành phần là Transform Transform là thông tin về vị trí, góc xoay và tỉ lệ của đối tượng, tất cả được mô tả bởi bộ 3 số X, Y, Z trong hệ trục tọa độ Thành phần này có thể được tùy biến lại trong quá trình lập trình nhằm thay đổi vị trí, góc quay và tỉ lệ của đối tượng qua các đoạn mã Từ các thành phần cơ bản này, chúng
ta sẽ tạo ra Game Object với các thành phần khác, bổ sung chứ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
Trang 212.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
Hình 2 Các thành phần trong Unity
Trang 222.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)
Hình 2 Minh họa script gắn vào đối tượng
Trang 23Unity 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 nhật và lưu trữ trong dự án Unity
Hình 2 Script trong Mono Develop
Trang 242.3.6 Prefabs
Prefabs cho phép chúng ta lưu trữ các đối tượng với những Components và những
thiết đặt hoàn chỉnh Có thể so sánh với khái niệm cơ bản là MovieClip trong Adobe
Flash, Prefabs chỉ đơn giản là một Container (một đối tượng chứa) rỗng mà chúng ta
có thể đưa bất kì một đối tượng hay dữ liệu mẫu nào mà chúng ta muốn tái sử dụng về
sau.
Hình 2 Minh họa về Prefab
Trang 252.3 GIAO DIỆN CỦA UNITY 3D
Giao diện của Unity có khả năng tùy chỉnh bố trí tương tự như nhiều môi trường làm việc khác Dưới đây là một kiểu bố trí điển hình trong Unity:
Hình 2 Giao diện của Unity
Chú thích:
• Scene: Nơi mà trò chơi sẽ được xây dựng
• Hierarchy: Danh sách các Game Object trong scene
• Inspector: 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: Cửa sổ xem trước, nó chỉ hoạt động trong chế độ “Play” (Preview – xem trước)
Trang 262.3.1 Cửa sổ Scene và Hierarchy
Cửa sổ scene là nơi mà chúng ta sẽ xây dựng các thực thể, đối tượng của dự án vào đó Cửa sổ cung cấp góc nhìn phối cảnh (Perspective (góc nhìn 3D), chúng ta có thể chuyển qua các góc nhìn khác như từ trên xuống hoặc từ dưới lên (Top Down), từ trái sang phải hoặc phải sang trái (Side On), từ trước ra sau hoặc sau đến trướ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 Minh họa cửa sổ Scene
Trang 27Cử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ụ 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 282.3.2 Cửa sổ Inspector
Cửa sổ Inspector có thể được xem như một công cụ cho phép chúng ta tùy chỉnh các thiết đặt, các thành phần của Game Object hoặc Assets đang được chọn Cửa sổ này sẽ hiển thị đầy đủ các Components của đối tượng mà chúng ta chọn Nó cho phép chúng
ta điều chỉnh các biến của Components dưới các hình thức như: Textbox, Slider, Button, Drop-dowm Menu… Ngoà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
Hình 2 Minh họa 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
Trang 29Hình 2 Minh họa cửa sổ Project
Trang 302.3.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 hình, nó phản ánh phạm vi trong Scene mà người chơi có thể thấy được với mỗi tỉ lệ màn hình tương ứng, ví dụ như với mỗi tỉ lệ màn hình 4:3, 16:9 thì người chơi sẽ có một phạm
vi nhìn thấy khác nhau Sau khi nhấn vào nút Play, chúng ta sẽ ở chế độ Testing, lúc này mọi thay đổi về các thuộc tính, Components, … của đối tượng sẽ chỉ là tạm thời Tức là chúng sẽ trở về như ban đầu (trước khi nhấn nút Play) sau khi kết thúc chế độ
Testing.
Hình 2 Minh họa cửa sổ trò chơi
Trang 312.4 TỔNG QUAN KIẾN TRÚC GAME ENGINE UNITY 3D
2.4.1 Kiến trúc tổng quan
Engine Unity hỗ trợ cho chúng ta UnityAPI để viết các 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 scrpit nào gắn lên đó Nếu muốn gắn scrpit vào đối tượng, ta bắt buộc phải thừa kế class đó tù lớp MonoBehaviour của UnityAPI và tên class phải trùng với file scrpit 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
Bên trong UnityAPI chứa rất nhiều lớp hỗ trợ lập trình game, trong đó có một số lớp quan trọng như:
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 thừa kế 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ệ đối tượng
• Input: hỗ trợ lập trình với các thiết bị ngoại vi khác
• Camera: giúp lập trình camera
• Light: giúp tạo ánh sáng trong game
• Projector: giúp chiếu các texture lên bề mặt vật thể
• ParticleEmitter: hỗ trợ tạo các hiệu ứng về hạt
• Audio: hỗ trợ về lập trình âm thanh
• Animation: chạy chuyển động với mô hình nhân vật
• Rigidboy: giúp tạo các hiệu ứng vật lý liên quan đến trọng lực, khố lượng
• 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 về va chạm vật lý giữa các vật thể
• GUI: giúp hỗ trợ lập trình giao diện người dùng trong Unity3D
Trang 322.4.2 Chu kỳ sống của các thành phần script gắn trên đối tượng game
Hình 2 Chu kỳ sống của thành phần trong script
Trang 33Trong script Unity, có một số chức năng sự kiện được thực hiện theo một thứ tự xác định trước như một script được thực thi Tùy theo trạng thái của scene mà sự kiện tương ứng được gọi:
Chương trình biên soạn (Editor)
• Reset(): hàm này được gọi lại để khởi tạo các thuộc tính của script khi nó lần đầu được gắn vào đối tượng
Khi Scene đầu tiên được tải (Frist Scene Load), các chức năng này được gọi sau khi một scene bắt đầu (một lần cho mỗi đối tượng trong scene):
• Awake(): hàm nay luôn được gọi trước hàm Start() và cũng chỉ sau một prefab được khởi tạo
• OnEnable(): chỉ được gọi khi đối tượng đang hoạt động Chức năng này được gọi chỉ sau khi đối tượng được kích hoạt Điều này xảy ra trong trường hợp MonoBehaviour dược tạo, chẳng hạn như khi một mức độ được nạp hoặc một GameObject với các thành phần script được khởi tạo
Trước khi cập nhật khung hình đầu tiên (Before the first time farme update)
• Start(): hàm này được gọi đầu tiên nếu script được kích hoạt Cho đối tượng được thêm vào scene, hàm Start() sẽ được gọi trên tất cả script trước khi cập nhật
Ở giữa khung hình (In between frame)
• OnApplicationPause(): hàm này được gọi cuối khung hình, nơi tạm dừng được phát hiện, có hiệu quả giữa các bản cập nhật khung bình thường Một khung phụ sẽ được phát hành sau sự kiện OnApplicationPause được gọi để cho phép hiển thị đồ họa
Thứ tự cập nhật:
• FixedUpdate(): được gọi nhiều lần trong mỗi khung hình Tất cả những tính toán vật lý sẽ có hiệu lực sau khi gọi hàm này FixedUpdate được gọi trên một
bộ đếm đáng tinh cậy và không phụ thuộc vào tỉ lệ khung hình
• Update(): được gọi mỗi lần trong một khung hình
• LastUpdate(): được gọi mỗi lần trong một khung hình sau khi hàm Update() kết thúc
Kết xuất hình ảnh (Rendering):
• OnPreCull(): được gọi trước khi camera chọn cảnh Việc lựa chọn quyết định
Trang 34• OnGUI(): được gọi lại nhiều lần mỗi khung hình để đáp ứng sự kiện GUI Những sự kiện giao diện (Layout)
• OnDrawGizmo(): được sử dụng để vẽ Gizmos trong khung nhìn scene cho các mục đích trực quan
Coroutines: là những thành phần chương trình máy tính khái quát chương trình con cho đa nhiệm, bằng cách cho phép nhiều điểm kiểm soát đình chỉ và hồi phục việc thực thi tại các điểm nhất định Coroutines phù hợp cho việc cài đặt nhiều thành phần chương trình giống nhau như nhiệm vụ hợp tác (cooperative tasks), (exceptions), vòng lặp sự kiện (event loop), vòng lặp (iterators), danh sách vô hữu hạn (infinite lists), ống dẫn (pipes)
• Yield(): coroutine sẽ tiếp tục sau khi tất cả các hàm Update() được gọi trong khung hình kế tiếp
• Yield WaitForSeconds(): coroutine tiếp sau một khoảng thời gian chờ, sau khi tất cả các hàm Update() được gọi trong khung hình
• Yield WaitForFixedUPdate(): coroutine tiếp tục sau khi tất cả các hàm FixedUpdate() được gọi trên tất cả các script
• Yield WWW(): coroutine tiếp tục sau khi tải về WWW đã hoàn thành
• Yield StartCorountine(): nối kết các coroutine và chời đợi cho coroutine hoàn thành lần đầu tiên
Trang 35 Khi đối tượng bị hủy (When the Object is destroyed)
• OnDestroy(): hàm được gọi sau khi cập nhật tất cả các khung hình cho đến khung hình cuối thể hiện sự tồn tại của đối tượng
Khi thoát khỏi ứng dụng (When quitting)
• OnApplicationQuit(): chức năng được gọi trên tất cả các đối tượng game trước khi ứng dụng được hủy Trong trình soạn thảo, chức năng được gọi khi người dùng dừng chế độ playmode Trong phần web, chức năng được gọi khi khung nhìn web được đóng
• OnDisible(): chức năng được gọi khi hành vi trở nên vô hiệu hóa hoặc không hoạt động
Trang 36CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU
3.1 NẠP VÀ HIỂN THỊ MÔ HÌNH 3D
3.1.1 Đặt vấn đề
Game 3D được xây dựng từ rất nhiều mô hình 3D đặt trên không gian 3 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ị mô hình 3D trong game là vô cùng quan trọng
Mô hình 3D được tạo từ rất nhiều đa giác để tạo nên khối vật thể Mô hình trong game thường có thể chia làm 2 loại: tĩnh và động Mô hình loại tĩnh thường là địa hình và các vật thể dùng để trang trí như nhà, đá, cây cối, … Mô hình động thường là mô hình nhân vật và các loại lính, quái vật
3.1.2 Cách giải quyết
Các mô hình 3D thường được thiết kế sẵn bằng các phần mềm chuyên dụng như Blender, 3Ds MAX, Cinema 4D, … Sau đó được đưa vào game engine để sự dụng.Unity Engine hỗ trợ rất nhiều định dạng mô hình 3D: 3DS, OBJ, MAX, FBX, BLEND,
MA, … Tuy nhiên, khi đưa mô hình vào project để sử dụng thì Unity tự chuyển các mô hình thành định dạng FBX Sau đó, mô hình sẽ được nạp sẵn các Component cần thiết
và được chuyển thành một Prefab để có thể tái sử dụng
Trang 37Các mô hình có thể được nạp bằng cách kéo thả vào trong cửa sổ sau đó được tùy chỉnh sao cho hợp lý Mô hình được đưa vào game thường có 3 loại: Generic, Humnoid, Legacy Trong đó, 2 loại Generic và Humanoid điều khiển chuyển động thông qua Animator (máy trạng thái) Còn chuyển động của Legacy được lưu trong một thành phần gọi là Animation và được điều khiển thông qua các câu lệnh.
•Mô hình Humanoid
Hệ thống chuyển động của mô hình là một hệ thống tương tự với mô hình khung xương người Một bước cơ bản trong việc tạo ra chuyển động cho mô hình là thiết lập ánh xạ giữa các cấu trúc xương trong mô hình nhân vật và cấu trúc xương người đơn giải trong mô hình Humanoid Thuật ngữ này được gọi là Avatar
Hình 3 Mô hình Humanoid
Trang 38• Mô hình Legacy
Hệ thông mô hình chuyển động Legacy thích hợp cho các mô hình chuyển động với các khung xương đặc biệt mà việc điều khiển khung xương không thông qua máy trạng thái Unity sử dụng hệ thống chuyển động riêng của mô hình và cho khả năng tương thích ngược
Hình 3 Mô hình Legacy
•Mô hình Generic
Mô hình chuyển động này không giống con người cũng được hỗ trợ mặc dù không có trong hệ thống Avatar và tính năng khác Trong hệ thống Mecanim, hình ảnh động không giống với con người được gọi là Generic Animations
Trang 39Chúng ta đã nạp được mô hình trong trò chơi, vậy làm thế nào để làm cho các mô hình
đó có thể chuyển động trong môi trường không gian 3 chiều
3.2.2 Cách giải quyết
Trong các mô hình 3D cần phải có các hoạt cảnh (Animation) bên trong để hỗ trợ cho
Trang 40đượ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.
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, …
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
Hình 3 Diễn hoạt trong Unity