Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
1,52 MB
Nội dung
BỘ MÔN CÔNG NGHỆ PHẦN MỀM ĐẠI HỌC BÁCH KHOA HÀ NỘI BÀI TẬP THỰC HÀNH ĐỒ HỌA MÁY TÍNH VÀ THỰC TẠI ẢO LÀM QUEN VỚI UNITY ENGINE Trịnh Thành Trung MỤC LỤC BÀI – LÀM QUEN VỚI UNITY Chuẩn bị Các khái niệm Unity Tìm hiểu giao diện Unity 4 Chạy thử demo Angry Bot Unity BÀI – XÂY DỰNG MỘT KHUNG CẢNH ĐƠN GIẢN Tạo dự án Thêm tài nguyên vào dự án 10 Tạo đối tượng game 10 Chạy thử game 12 Sử dụng mơ hình 12 BÀI – SCRIPTING CƠ BẢN 14 Viết script cho Player 14 Viết script cho Street 15 Viết script cho Enemy 15 Xử lý va chạm 15 BÀI – VIẾT SCRIPT BỔ SUNG 17 Giới hạn di chuyển Player 17 Cho phép Player có khả tăng tốc giảm tốc 17 Tính điểm 17 BÀI – THÊM CÁC YẾU TỐ TRÒ CHƠI 18 BÀI – THIẾT KẾ ĐỊA HÌNH 19 Tạo địa hình 19 Thiết kế đảo 20 Vẽ texture 20 Đi dạo quanh đảo 23 BÀI – CÁC TÍNH NĂNG ĐỊA HÌNH NÂNG CAO 24 Đặt 24 Vẽ cỏ hoa lên địa hình 25 Skybox 26 Ánh sáng 26 Nước 27 BÀI – LÀM QUEN VỚI UNITY Chuẩn bị Download Unity địa http://unity3d.com/unity/download/ Cài Unity vào máy Các khái niệm Unity Scene Trong Unity, Scene (khung cảnh) coi chơi vùng game Một số thành phần game Scene Menu Game Object Để làm game Unity, cần phải đưa vào mô hình, texture, âm (gọi chung tài nguyên) Tuy nhiên để sử dụng tài nguyên cần phải có Game Object (đối tượng game) Các đối tượng ln có thành phần Transform xác định Position (vị trí), Rotation (độ xoay) Scale (độ phóng đại) chúng Script Để xây dựng game logic Unity, cần phải code ngôn ngữ kịch mà Unity hỗ trợ, bao gồm: Javascript, C# Script Boo Script Thông thường cài đặt Unity kèm theo cơng cụ soạn thảo mã, ví dụ Mono Develop sử dụng cơng cụ mà thích Tìm hiểu giao diện Unity Giống nhiều công cụ phát triển khác, giao diện Unity có thành phần dễ dàng thay đổi vị trí Mặc định Unity cung cấp layout khác nhau, chuyển đổi qua lại cách vào menu Windows | Layouts… 4 Mặc định by 4 Split Tall Wide Scene/Game window Thực chất Scene Game hai cửa sổ khác Tuy nhiên cửa sổ Game kích hoạt chạy thử game Cửa sổ Scene cửa sổ mà sử dụng để thiết kế game Cửa sổ hiển thị tất đối tượng khung cảnh Unity có khả tự đọng tạo đối tượng tài nguyên kéo thả vào cửa sổ Chú ý phía cửa sổ có cơng cụ Trong đó: Hand (phím tắt Q): Giúp di chuyển bên khung cảnh Sử dụng phím trái chuột để di chuyển tịnh tiến (pan), phím phải để quay (rotate), phím để di chuyển tịnh tiến (pan) nút cuộn để zoom Lưu ý: Phím phải, phím nút cuộn chuột sử dụng với công cụ khác Translate (phím tắt W): Dùng để di chuyển đối tượng chọn Rotate (phím tắt E): Dùng để xoay đối tượng chọn Scale (phím tắt R): Dùng để phóng to thu nhỏ đối tượng chọn Hierachy window Cửa sổ Hierachy hiển thị tất đối tượng Project theo dạng Chọn đối tượng cửa sổ đối tượng khung cảnh cửa sổ Scene đồng thời chon Project window Cửa sổ Project chứa tất tài nguyên game, tổ chức theo thư mục dự án Cửa sổ Project cho phép tạo môt số tài nguyên (Script, Material…) Inspector window Cửa sổ Inspector sổ thay đổi theo ngữ cảnh, tùy thuộc vào đối tượng chọn mà cửa sổ hiển thị thành phần, thuộc tính phù hợp đối tượng Mẹo: Ở bất kz cửa sổ ấn phím Space cửa sổ chuyển thành Fullscreen Ấn phím Space lại lần để trở kích thước ban đầu Chạy thử demo Angry Bot Unity Chọn File | Open Project Mở demo Angry Bot Unity, thường nằm thư mục C:\Users\Public\Documents\Unity Projects\4-0_AngryBots (Hoặc download file Angry Bots.zip đây) Ấn Play để chơi thử game Thốt game Tìm chon đối tượng quan trọng, quan sát giá trị cửa sổ Inspector Thay đổi vị trí, giá trị đối tượng game Ấn Play để kiểm tra thay đổi BÀI – XÂY DỰNG MỘT KHUNG CẢNH ĐƠN GIẢN Ví dụ có { tưởng game đơn giản sau • Tên trò chơi: Đua xe • Thể loại: Endless Running Game • Các đối tượng game: Người chơi, chướng ngại vật, đường • Mơ tả trị chơi: Người chơi ln phóng xe phía trước tránh vật cản Các vật cản sinh ngẫu nhiên đường Trò chơi kết thúc người chơi đâm phải vật cản Sau nghiên cứu để xây dựng game Tạo dự án Chọn File | New Project… Chọn đường dẫn ấn Create Thêm tài nguyên vào dự án Down file tài nguyên game Để thêm tài nguyên vào dự án, có hai cách: Cách 1: Ở cửa sổ Project nhấp phải chọn Import New Assets… Lưu { thêm file lần Cách 2: Chọn toàn tài nguyên dự án cửa sổ duyệt file Windows (có thể bao gồm thư mục), sau kéo thả vào cửa sổ Project Unity Tạo đối tượng game Tạo đối tượng đường o Ở cửa sổ Hierarchy chọn Create | Plane (hoặc vào menu GameObject | Create Other | Plane) o Chọn đối tượng vừa tạo Nhìn sang cửa sổ Inspector đổi tên đối tượng thành Street1 o Mục Transform đặt vị trí cho Plane (0, 0, 0) Đặt Scale cho đường (1, 1, 2) 10 BÀI – SCRIPTING CƠ BẢN Ý tưởng viết script sau: Player ln tiến phía trước với vận tốc không đổi Sử dụng chuột để điều khiển xe sang trái, sang phải Camera theo Player Enemy ngẫu nhiên xuất đường Chỉ Enemy xuất lúc Nếu Player chạm vào Enemy game kết thúc Viết script cho Player Trong cửa sổ Project chọn Create | C# Script Đặt tên cho script, ví dụ PlayerCallback Chọn script PlayerCallback, ấn vào Open… cửa sổ Inspector Như thấy, Unity soạn sẵn cho ta script using UnityEngine; using System.Collections; public class PlayerCallback : MonoBehaviour { // Use this for initialization void Start() { } // Update is called once per frame void Update() { } } Ở có lớp PlayerCallback thừa kế từ MonoBehaviour với phương thức Start() gọi đối tượng khởi tạo, Update() gọi liên tục vòng đời đối tượng Dưới mã phương thức Update() để Player ln di chuyển phía trước với vận tốc 0.5f this.transform.position += new Vector3(Input.GetAxis("Mouse X"), 0, 0.5f); Camera.main.transform.position += new Vector3(0, 0, 0.5f); 14 Lưu lại, ấn F8 để kiểm tra xem có lỗi khơng Sau ta quay lại cửa sổ làm việc Unity, kéo đoạn mã vừa tạo thả vào đối tượng Player Viết script cho Street Nếu ta chạy thử đoạn mã thấy xe văng thẳng đường Để khắc phục cần viết đoạn mã cho script Ý tưởng liên tục đưa đối tượng Street mà camera vừa qua đặt lên Street mà camera chiếu tới Như hình lúc có Street hiển thị cần đối tượng để xử lý mà không cần phải tạo nhiều đối tượng không dùng đến Đoạn mã cho ý tưởng sau if (Camera.main.transform.position.z >= (this.transform.position.z + 20)) { this.transform.position += new Vector3(0, 0, 60); } Tương tự trên, tạo script (ví dụ StreetCallback) viết mã phương thức Update() Sau kéo script vào đối tượng Street game Viết script cho Enemy Đoạn mã sau giúp cho đối tượng Enemy xuất ngẫu nhiên đường if (Camera.main.transform.position.z >= (this.transform.position.z + 20)) { Vector3 np = this.transform.position; np.x = 0; np += new Vector3(Random.Range(-4.5f, 4.5f), 0, Random.Range(40, 60)); this.transform.position = np; } Tạo script EnemyCallback kéo script vào đối tượng Enemy game Xử lý va chạm Chúng ta cần viết hàm xử lý va chạm cho game Unity hỗ trợ cho tính xét xử lý va chạm, nhiên mặc định để tối ưu hiệu có đối tượng cho phép Unity xử lý vật l{ cho đối tượng Để cho phép đối tượng có khả xử lý va chạm, ta chọn đối tượng vào menu Component | Physics | Rigidbody Ở ta chọn đối tượng Player Chọn Player, mục Inspector xuất thêm số component Đánh dấu chọn vào Is Trigger component Box Collider để kích hoạt kiện OnTriggerEnter xảy va 15 chạm bỏ mục Use Gravity component Rigid Body không sử dụng trọng lực game Mở script PlayerCallback, thêm vào phương thức OnTriggerEnter sau void OnTriggerEnter(Collider obj) { if (obj.name == "Enemy") { Debug.Log("Crashed!"); } } Lưu lại chạy thử game Chúng ta có đối tượng Player chạy thẳng phía trước với Enemy xuất ngẫu nhiên măt đường Chúng ta dùng chuột để điều khiển Player Mỗi lần Player đụng phải Enemy cửa sổ Console dòng chữ “Crashed!” 16 BÀI – VIẾT SCRIPT BỔ SUNG Chúng ta xây dựng game đơn giản, nhiên để thực chơi cần phải cải thiện nhiều Dưới số gợi ý Giới hạn di chuyển Player Hiện Player di chuyển đường (mà khơng đâm phải chướng ngại vật nào) Chúng ta khắc phục nhiều cách Ví dụ: Giới hạn tọa độ x Player, cho phép Player di chuyển phạm vi đường Đặt thêm đối tượng Rigidbody hai bên đường để cản trở di chuyển Player Cho phép Player có khả tăng tốc giảm tốc Ý tưởng: Khi bắt đầu chuyển động vận tốc xe 0, sau vận tốc xe bắt đầu tăng dần đến vận tốc tối đa đặt trước Khi đâm phải chướng ngại vật vận tốc xe giảm dần Thực hiện: Đưa vào biến vận tốc biến gia tốc cho PlayerCallback Tính điểm Ý tưởng: Khi bắt đầu chuyển động vận tốc xe 0, sau vận tốc xe bắt đầu tăng dần đến vận tốc tối đa đặt trước Khi đâm phải chướng ngại vật vận tốc xe giảm đột ngột 0, sau vận tốc từ từ tăng lên Khi xe chạm vào vỉa hè vận tốc xe giảm dần 0.1 Bổ sung vào game yếu tố: Fuel Score Fuel game số đặt trước, sau giảm dần Score quãng đường mà người chơi Khi Fuel Player giảm tốc độ xe giảm dần Khi tốc độ xe giảm hồn tồn trị chơi kết thúc tính Final Score người chơi 17 BÀI – THÊM CÁC YẾU TỐ TRỊ CHƠI Các bạn tự suy nghĩ đưa vào yếu tố trị chơi theo { Viết script để thực yêu cầu Gợi ý: Chúng ta thêm yếu tố khác giúp game hay hơn, ví dụ thêm xe chở xăng, loại enemy khác nhau, loại đường khác nhau… Về yếu tố đồ họa bổ sung thêm mơ hình cối, hay Cube mơ hình tơ… 18 BÀI –ĐỊA HÌNH Tạo địa hình Để tạo địa hình Unity, ta chọn menu GameObjects | Create Others | Terrain Chọn Terrain vừa tạo, ta thấy cửa sổ Inspector sau Trong (Raise / Lower Terrain): Sử dụng để nâng cao bề mặt địa hình Sử dụng kết hợp với phím Shift để hạ địa hình (Paint Height): Sử dụng phím Shift ấn vào độ cao để lấy mẫu, sau ta sử dụng công cụ để nâng độ cao đến mẫu (Smooth Terrain): Làm mịn bề mặt địa hình, giúp địa hình vùng lân cận có độ cao tương đồng (Paint Texture): Vẽ texture lên địa hình (Place Trees): Đặt lên bề mặt địa hình (Paint Details): Đặt chi tiết nhỏ cỏ hoa lên bề mặt địa hình (Terrain Settings): Thay đổi thiết lập địa hình 19 Thiết kế hịn đảo Để làm quen với cơng cụ thiết kế địa hình Unity, tiến hành thiết kế đảo Dựng địa hình Trước tiên sử dụng cơng cụ Raise / Lower Terrain, Smooth Terrain Paint Height tạo hình hịn đảo dạng hình vẽ Vẽ texture Unity cung cấp cho số texture tài nguyên khác cho việc thiết kế địa hình Để sử dụng tài nguyên chọn menu Assets | Import Package | Terrain Assets Chúng ta sử dụng texture tự tạo muốn Chọn công cụ Paint Texture , ấn vào button Edit Textures chọn Add Texture… Sau thêm vào texture Grass (Hill), Good Dirt, Grass & Rock Cliff (Layered Rock) Mục Normal map để trống khơng sử dụng Normal map Chúng ta để nguyên giá trị size texture (15, 15), trừ Cliff (Layered Rock) chọn size (70, 70) 20 Ngay sau vừa thêm vào texture tồn địa hình phủ texture Vì địa hình phần lớn cỏ xanh nên dễ dàng bạn nên thêm texture Glass (Hill) Tiếp theo bạn chọn texture Good Dirt để tơ vào vùng xung quanh hịn đảo Brush thích hợp Lưu ý bạn chỉnh Brush size, Opacity Target Strength Brush Kết thu tương tự hình sau: 21 Tiếp theo, sử dụng texture Grass&Rock để vẽ vùng núi cao, theo tư tưởng vùng núi cao cỏ khó mọc vùng đồng Cuối cùng, dùng texture Cliff (Layered Rock) để vẽ lên đỉnh núi cao Chúng ta có hịn đảo (tương đối) hồn chỉnh sau 22 Đi dạo quanh đảo Như đảo tương đối hồn tất Giờ dạo vịng quanh hịn đảo để kiểm tra xây dựng Chọn menu Assets | Import Package | Character Controller Sau cửa sổ Project vào thư mục Standard Assets/Character Controllers chọn First Person Controller thả vào khung cảnh Chỉnh vị trí mong muốn cho đối tượng vừa tạo, lưu { phải cao bề mặt địa hình Để tránh xung đột ta nên xóa đối tượng Main Camera game Chạy game dạo vịng quanh hịn đảo 23 BÀI – CÁC TÍNH NĂNG ĐỊA HÌNH NÂNG CAO Đặt Chọn địa hình vừa tạo, ấn vào công cụ Place Tree Ấn vào Edit Trees… chọn Add Tree Trong cửa sổ Add Tree ra, ấn vào vòng tròn bên cạnh mục Tree chọn mơ hình bất kz Ở ta chọn mơ hình Palm có sẵn Terrain Asset Ta thay đổi giá trị Bend Factor, độ tác động gió lên độ nghiêng (ví dụ: 2) Việc đặt lên địa hình tương tự việc vẽ texture lên địa hình Chú ý vẽ zoom xa Unity tự động không hiển thị lên cửa sổ Scene, đặt lên địa hình nên zoom vào khoảng cách định 24 Vẽ cỏ hoa lên địa hình Chọn cơng cụ Paint Details cơng cụ địa hình Cũng tương tự vẽ cây, dùng công cụ để vẽ chi tiết nhỏ cỏ, hoa, lá… lên bề mặt địa hình Các chi tiết sử dụng công nghệ billboarding, thực chất texture 2D ln quay phía người chơi tạo cảm giác 3D Tương tự, ta ấn vào Edit Details… chọn Add Grass Texture Tiếp theo, ta chọn Detail Texture Grass, chọn màu sắc Healthy Color Dry Color cho phù hợp với màu sắc địa hình Để cỏ mọc rải rác đồng thời giảm thiểu tiêu tốn tài nguyên máy tính, ta nên chọn Brush thưa vẽ cỏ lên địa hình Tương tự vẽ cối, Unity không hiển thị chi tiết zoom vào thật gần 25 Skybox Chọn menu Assets | Import Package | Skyboxes Chọn menu Edit | Render Settings… Ở cửa sổ Inspector ấn vào Skybox Material chọn skybox phù hợp Ánh sáng Địa hình vừa tạo cảnh ngồi trời, sử dụng Directional Light để làm nguồn ánh sáng cho khung cảnh Với loại ánh sáng khác làm tương tự Chọn menu GameObject | Create Other | Directional Light Ta chọn đối tượng ánh sáng rotate hướng ánh sáng cho phù hợp Mặc dù ta thay đổi vị trí đối tượng việc khơng có tác dụng game ánh sáng chiếu Directional Light ánh sáng song song Tạo Flare cho ánh sáng Hiệu ứng light flare hiệu ứng sử dụng nhiều game; tức người chơi nhìn vào nguồn ánh sáng quầng ánh sáng mơ ánh sáng chiếu vào ống kính máy quay tạo 26 Để sử dụng hiệu ứng này, trước tiên ta phải import tài nguyên tạo ánh sáng Chọn menu Assets | Import Package | Light Flares Sau ta chọn nguồn ánh sáng chúng ta, vừa tạo Directional Light Trong cửa sổ Inspector ta ấn vào mục Flare chọn Sun Lưu { sử dụng sun flare phải đặc biệt lưu { đến hướng ánh sáng chiếu vào cho phù hợp với skybox sử dụng, đặc biệt skybox có hình ảnh mặt trời Nước Chúng ta tiếp tục sử dụng địa hình mà tạo để tạo biển bao quanh đảo Chọn menu Asset | Import Package | Water (Basic) Chọn Daylight Simple Water thư mục Standard Assets/Water (Basic) thả vào cửa sổ Scene Chỉnh vị trí cho độ cao y cao mặt đất tâm đặt địa hình Sau phóng to đối tượng Water để bao trùm địa hình Kết thu hình 27 Ta chạy thử game để kiểm tra kết 28