-
Thông tin
-
Hỏi đáp
Bài 1 - Làm quen với Unity - Bài giảng Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội
Để làm quen với Unity, các bạn mở project FPS Microgame (download tại đây) hoặc đối với một số phiên bản Unity, các bạn chọn New Project, sau đó tìm FPS Microgame ở mục Learning hoặc All templates. Nếu Unity yêu cầu bạn nâng cấp, các bạn có thể đồng ý cho. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!
Môn: Cấu trúc dữ liệu và giải thuật (ET2100)
Trường: Đại học Bách Khoa Hà Nội
Thông tin:
Tác giả:
Preview text:
BÀI 1 – LÀM QUEN VỚI UNITY 1. CHUẨN BỊ
Download Unity tại địa chỉ http://unity3d.com/unity/download/
Ghi chú: Các bạn sinh viên nên đăng ký Unity Student Plan
(https://unity.com/products/unity-student#apply-unity-student-plan)
để được sử dụng phiên bản tương ứng với Unity Pro cùng gói tài nguyên trị giá $80.
Để làm quen với Unity, các bạn mở project FPS Microgame (download tại đây) hoặc đối
với một số phiên bản Unity, các bạn chọn New Project, sau đó tìm FPS Microgame ở mục
Learning hoặc All templates. Nếu Unity yêu cầu bạn nâng cấp, các bạn có thể đồng ý cho
Unity tự động nâng cấp và chuyển đổi sang phiên bản mới.
Các bạn có thể chạy thử project bằng cách ấn nút Play .
Để phóng to toàn màn hình, các bạn chuyển sang cửa sổ Game trước khi ấn nút Play, sau
đó chọn lựa chọn Maximize when Playing.
2. CÁC KHÁI NIỆM CỦA UNITY Scene
Trong Unity, mỗi một Scene (khung cảnh) có thể coi như một màn chơi hoặc một vùng
trong game. Một số thành phần của game cũng có thể là một Scene như Menu Game Object
Để làm game trong Unity, chúng ta cần phải đưa vào các mô hình, texture, âm thanh.. (gọi
chung là các tài nguyên). Tuy nhiên để có thể sử dụng được các tài nguyên này chúng ta
cần phải có các Game Object (đối tượng game). Các đối tượng này luôn có thành phần
Transform xác định Position (vị trí), Rotation (độ xoay) và Scale (độ phóng đại) của chúng. Script
Để có thể xây dựng được game logic trong Unity, chúng ta cần phải code bằng các ngôn
ngữ kịch bản mà Unity hỗ trợ bằng C# hoặc kéo thả bằng Unity Visual Scriting (tên cũ là
Bolt). Thông thường khi cài đặt, Unity sẽ cho phép chúng ta cài đặt một bộ công cụ soạn
thảo mã nguồn như Visual Studio Code, hoặc chúng ta có thể lựa chọn công cụ soạn thảo
mã nguồn mà chúng ta muốn.
3. TÌM HIỂU VỀ GIAO DIỆN CỦA UNITY
Giao diện Unity cũng khá quen thuộc, tương tự như các ứng dụng khác với các shortcut
quen thuộc: Ctrl+N để New, Ctrl+O để Open, Ctrl+S để Save (Ghi chú: Nhớ lưu project của
bạn thường xuyên), Ctrl+Z để Undo (Rất hữu dụng khi chẳng may thao tác nhầm)
Cũng giống như nhiều bộ công cụ phát triển khác, giao diện của Unity có các thành phần
có thể dễ dàng thay đổi vị trí được. Mặc định Unity cung cấp 4 layout khác nhau, chúng ta
có thể chuyển đổi qua lại bằng cách vào menu Windows | Layouts… 2 1 3 4
Mặc định: Giao diện này quen thuộc với khá nhiều người sử dụng, đặc biệt đối với các lập trình viên
do có nét tương đồng với các IDE như Visual Studio… 1 2 3 4
2 by 3: Giao diện này thích hợp cho các màn hình dài, cho phép nhanh chóng quan sát cả cửa sổ thiết
kế và giao diện trò chơi cùng lúc 2 1 4 3
4 Split: Phù hợp cho các level designer, có thể quan sát cùng lúc 3 hình chiếu của màn chơi cùng với
phối cảnh của màn chơi. 2 1 4 3
Tall: Cho phép nhìn cửa sổ Scene dài hơn 1 4 2 3
Wide: Cho phép nhìn cửa sổ Scene rộng hơn 1
Scene/Game window
Thực chất Scene và Game là hai cửa sổ khác nhau. Tuy nhiên cửa sổ Game chỉ được kích
hoạt khi chúng ta chạy thử game. Cửa sổ Scene là cửa sổ chính mà chúng ta sử dụng để
thiết kế game. Cửa sổ này hiển thị tất cả các đối tượng của khung cảnh hiện tại. Unity có
khả năng tự động tạo đối tượng mới mỗi khi một tài nguyên khi được kéo thả vào cửa sổ này.
Khi ở trong cửa sổ Scene, các bạn có thể dùng các thao tác với chuột để chuyển góc nhìn trong khung cảnh như sau:
• Phím trái chuột để chọn
• Phím phải chuột để quay (rotate),
• Phím giữa để di chuyển tịnh tiến (pan),
• Nút cuộn chuột để zoom.
Ngoài ra, các bạn có thể kết hợp với các phím Alt khi thao tác với chuột:
• Phím Alt + Phím trái chuột để quay (rotate)
• Phím Alt +Phím phải chuột để zoom
Phía trên cửa sổ này chúng ta có thanh công cụ Trong đó: •
Hand (phím tắt Q): Giúp chúng ta di chuyển bên trong khung cảnh. Kéo
và thả dùng phím trái chuột để di chuyển tịnh tiến (pan) khung cảnh •
Translate (phím tắt W): Dùng để di chuyển đối tượng đang được chọn •
Rotate (phím tắt E): Dùng để xoay đối tượng đang được chọn •
Scale (phím tắt R): Dùng để phóng to và thu nhỏ đối tượng đang được chọn
• Và một số công cụ hỗ trợ khác Lưu ý:
1. Trong Unity cũng như các phần mềm đồ họa khác, trục hướng lên
trên luôn là trục Oy (không phải là Oz như trong hình học giải tích) 2
Hierachy window
Cửa sổ Hierachy hiển thị tất cả các đối tượng của Project theo dạng cây. Chọn một đối
tượng trong cửa sổ này thì đối tượng đó trên khung cảnh ở cửa sổ Scene cũng đồng thời được chọn. 3 Project window
Cửa sổ Project chứa tất cả các tài nguyên của game, được tổ chức theo các thư mục của
dự án. Cửa sổ Project cũng cho phép chúng ta tạo ra môt số các tài nguyên cơ bản (Script, Material…) 4
Inspector window
Cửa sổ Inspector là của sổ thay đổi theo ngữ cảnh, tùy thuộc vào đối tượng đang được
chọn mà cửa sổ sẽ hiển thị các thành phần, thuộc tính phù hợp của đối tượng đó.
Mẹo: Ở bất kỳ cửa sổ nào khi ấn phím Space thì cửa sổ đó sẽ chuyển thành
Fullscreen. Ấn phím Space lại lần nữa để trở về kích thước ban đầu.
4. LÀM QUEN VỚI LẬP TRÌNH GAME TRONG UNITY
A) TẠO MỘT DỰ ÁN MỚI HOẶC SỬ DỤNG DỰ ÁN HIỆN TẠI Để tạo dự án mới
• Chọn File | New Project…
• Chọn đường dẫn và ấn Create
B) THÊM TÀI NGUYÊN VÀO DỰ ÁN.
Để thêm các tài nguyên này 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 ý là chỉ có thể thêm một file một lần
• Cách 2: Chọn toàn bộ các tài nguyên của dự án ở cửa sổ duyệt file của Windows (có
thể bao gồm cả các thư mục), sau đó kéo và thả vào cửa sổ Project của Unity
Các bạn thử download một ảnh bất kỳ (Gợi ý: Tìm kiếm trên mạng với từ khóa “texture”), sau đó import vào project C) TẠO ĐỐI TƯỢNG GAME
Tạo vật thể khối lập phương
• Ở cửa sổ Hierarchy chọn Create | Cube (hoặc vào menu GameObject | Create Other | Cube)
• Chọn đối tượng vừa tạo. Nhìn sang cửa sổ Inspector đổi tên đối tượng thành MyCube
• Mục Transform đặt vị trí cho MyCube tại (0, 0, 0). Đặt Scale cho hộp là (2, 2, 2)
• Tạo material cho MyCube: Kéo ảnh các bạn đã import vào đối tượng MyCube trên cửa
sổ Scene. Unity sẽ tự động tạo ra một material mới và gán vào đối tượng đó. (Hoặc
chúng ta có thể làm từng bước bằng cách Create | Material trong cửa sổ Project và gán
texture vào, sau đó mới gán material cho đối tượng đường đi) Lưu ý
Trong không gian đồ họa, một vật thể có kích thước 1 đơn vị so với một
vật thể có kích thước 2 đơn vị không có gì khác một vật thể có kích thước
100 đơn vị so với một vật thể có kích thước 200 đơn vị. Tuy nhiên, trong
môi trường Unity, nên quy ước 1 đơn vị tương đương với 1 mét trong
thế giới thực. Việc này đặc biệt quan trọng trong các thao tác liên quan
tới xử lý vật lý sau này Mẹo
Nhấp đúp vào đối tượng trên cửa sổ Hierarchy (hoặc chọn đối tượng rồi
ấn F trên cửa sổ Scene) để nhanh chóng di chuyển đến đối tượng đó trên cửa sổ Scene Tạo camera
• Lúc New Scene, Unity cho các bạn lựa chọn tạo khung cảnh empty hoặc có sẵn Main
Camera. Nếu đã có Main Camera rồi thì các bạn dùng luôn. Nếu chưa có thì chúng ta
có thể tạo các Camera mới.
• Di chuyển và xoay camera ở vị trí thích hợp để có thể dễ dàng nhìn thấy MyCube. Nhìn
vào hình preview ở góc phải phía dưới. Ví dụ:
Tạo ánh sáng
• Tương tự Main Camera, lúc tạo khung cảnh mới nếu bạn không chọn lựa chọn tạo
khung cảnh empty thì Unity cũng tạo ra cho bạn một ánh sáng Directional Light (dạng
như ánh sáng mặt trời).Chúng ta có thể dùng luôn, hoặc tạo ra các ánh sáng bằng cách
Create | Light trong cửa sổ Hierarchy, hoặc chúng ta có thể thay đổi Ambient Light
o Để thay đổi thuộc tính cho Directional Light hoặc các loại ánh sáng khác, chọn đối
tượng ánh sáng đó và điều chỉnh các thuộc tính màu sắc, cường độ ở Inspector.
o Để thiết lập Ambient Light thì hơi khác một chút: Vào Window | Rendering | Lighting
D) VIẾT SCRIPT CHO KHỐI LẬP PHƯƠNG
Unity hỗ trợ lập trình bằng ngôn ngữ C# hoặc bằng kéo thả. Phần này sẽ hướng dẫn các
bạn cả hai phương pháp lập trình này.
- Ý tưởng: Khối lập phương sẽ từ từ bay lên trên cho đến khi độ cao bằng 2, sau đó
sẽ reset tọa độ về vị trí ban đầu. -
Thực hiện: Tạo một biến để lưu trữ giá trị chiều cao của khối lập phương. Cho biến
này mỗi một khung hình – frame (đối với máy cấu hình tốt thì mỗi khung hình
khoảng 1/60s) tăng lên một giá trị nhỏ. Khi nào giá trị này lớn hơn 2 thì sẽ đặt giá
trị này bằng 0. Tại mỗi khung hình, ta đặt tọa độ y của vật thể bằng giá trị này (Theo
ghi chú ở trên, tọa độ y của các vật thể trong không gian đồ họa tương ứng với độ cao của vật thể đó).
CÁCH 1 – LẬP TRÌNH BẰNG C#
Tạo một script và gán cho đối tượng MyCube bằng cách như sau: Chọn đối tượng MyCube,
ở cửa sổ Inspector chọn AddComponent, New Script và đặt tên, vd. MyCubeBehaviour.
(Cách khác: Tại cửa sổ Project nhấp phải chuột chọn Create | C# Script, đặt tên là
MyCubeBehaviour.cs rồi kéo và thả vào đối tượng MyCube)
Nhấp đúp vào file MyCubeBehaviour.cs mới được tạo ra, ta sẽ thấy đoạn mã như sau. using System.Collections;
using System.Collections.Generic; using UnityEngine;
public class MyCubeBehaviour : MonoBehaviour {
// Start is called before the first frame update void Start() { }
// Update is called once per frame void Update() { } }
Khi chúng ta chạy trò chơi, những gì chúng ta viết trong Start() sẽ được gọi đầu tiên. Sau
đó tại mỗi khung hình, trò chơi sẽ thực hiện các lệnh viết trong Update().
Ý tưởng: Cho độ cao của hộp tăng dần, đến khi cao quá 2 đơn vị thì lại chuyển độ cao về 0 đơn vị.
Để thực hiện ý tưởng này, ta thực hiện việc viết mã nguồn như sau.
- Bước 1 – Tạo một biến lưu trữ chiều cao: Ngay trước dòng void Start(), chúng
ta tạo một biến tên là boxHeight kiểu float, giá trị ban đầu là 0. float boxHeight = 0;
- Bước 2 – Cập nhật giá trị chiều cao mỗi frame: Trong hàm void Update(), sau dấu ngoặc nhọn { boxHeight += 0.001f;
- Bước 3 – Cập nhật tọa độ cho MyCube:
this.transform.position = new Vector3(0, boxHeight, 0);
Ý tưởng là gán cho thuộc tính vị trí của đối tượng hiện tại (this) một tọa độ (thực
chất là một Vector3) (0, boxHeight, 0)
- Bước 4 – Đặt lại chiều cao nếu giá trị boxHeight lớn hơn 2 if (boxHeight > 2) boxHeight = 0;
Ấn nút play để chạy thử “game”
CÁCH 2 – KÉO THẢ BẰNG VISUAL SCRIPTING
(dành cho phiên bản Unity 2021 trở lên) Bước 1:
Chọn đối tượng MyCube, ở cửa sổ Inspector chọn AddComponent, Script Machine.
Component này sẽ được thêm vào cửa sổ Inspector như hình: Bước 2:
Tiếp theo, tạo Graph: Ở trên Script Machine component, click vào nút New để tạo một
Graph mới, một cửa sổ Save sẽ xuất hiện, hiển thị những mục trong folder Assets của bạn.
Đặt tên cho file là MyCubeVisualScript để tạo ra file mới có tên là MyCubeVisualScript.asset
(Cách khác: Tạo file Graph trong cửa sổ Project và kéo file đó vào phần Graph bên trong
Component Script Machine trên cửa sổ Inspector) Bước 3:
Tiếp theo, nhấn vào nút Edit Graph, cửa sổ Script Graph sẽ hiện ra như sau: Bước 4:
Tại Graph Variables, click vào [New Varible Name] nhập tên biến là boxHeight sau đó
nhấn vào nút +, 2 trường mới là Type và Value sẽ hiện ra. Với Type, chọn Float còn Value để là 0. Bước 5:
Click chuột phải vào background trong cửa sổ Graph window, một context menu Unit sẽ
xuất hiện, nó có tên là Fuzzy Finder. Tại thanh tìm kiếm, nhập vào Transform.SetPosition
Sau khi chọn xong, một unit mới sẽ hiện ra:
Tương tự như vậy ta sẽ thêm một số unit khác, cụ thể như sau: - Get Graph Variable
- Add (in Math/Scalar) - Set Graph Variable
- Vector 3: Create Vector 3 (X, Y, Z) - Less (in logic) - If (in control) - Interger (in system)
Sau khi thêm các unit trên vào, Script Graph của ta sẽ như sau:
Bước 6: Nối các Unit với nhau như hình dưới rồi ấn nút play để chạy thử game:
5. TÌM HIỂU VỀ UNITY ASSET STORE
Unity cung cấp cho người dùng một “chợ” các tài nguyên nhiều thể loại. Các bạn có thể
truy cập và download về các tài nguyên mô hình, âm thanh, script, các công cụ và cả các
game starter pack (các trò chơi đã viết sẵn các mechanics đơn giản để phát triển). Trong
đó, rất nhiều các tài nguyên là miễn phí. Các bạn có thể truy cập bằng cách vào menu
Window | Asset Store, hoặc truy cập từ trình duyệt vào https://assetstore.unity.com/ Luyện tập:
Các bạn tự download các game template có sẵn trên Unity và làm quen với việc thay đổi
thuộc tính các đối tượng game có sẵn (vd. phóng to, thu nhỏ, di chuyển vị trí…). Các bạn
cũng có thể thêm các mô hình mới vào trò chơi tùy theo sở thích. Gợi ý các bạn một số các game template hoàn chỉnh:
Các template do Unity cung cấp (xem toàn bộ tại đây): - 3D Game Kit / 2D Game Kit - Creator Kit: FPS / RPG - Adventure Sample Game Các template khác: - Extreme Drift - AnyRPG Core - Low Poly Game Kit
- Low Poly Shooter Pack: Free Sample 3D Game Kit Adventure Sample Game Extreme Drift Low Poly Game Kit Low Poly Shooter Pack
Ghi chú: Một số package cần được cài đặt thông qua Package Manager. Các bạn vào menu
Window | Package Manager để cài và gỡ các gói này.
6. TÙY BIẾN CÁC PACKAGE CÓ SẴN
Đối với các phiên bản Unity Education, Unity Student, khi tạo ra project mới, chúng ta có
thể chọn một trong các template có sẵn như FPS Microgame, Karting Microgame. Các
template này cũng được tích hợp Unity Learn, cho phép chúng ta có thể thay đổi và tạo
thêm các chức năng vào trò chơi theo từng bước được hướng dẫn trực tiếp trên giao diện của Unity. Karting Microgame
Tutorial trực tiếp trên giao diện Unity
Document Outline
- BÀI 1 – LÀM QUEN VỚI UNITY
- 1. Chuẩn bị
- 2. Các khái niệm của Unity
- 3. Tìm hiểu về giao diện của Unity
- 4. Làm quen với lập trình game trong unity
- a) Tạo một dự án mới hoặc sử dụng dự án hiện tại
- b) Thêm tài nguyên vào dự án.
- c) Tạo đối tượng game
- d) Viết script cho khối lập phương
- 5. Tìm hiểu về Unity Asset Store
- 6. Tùy biến các package có sẵn