--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn Unity. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Unity. Hiển thị tất cả bài đăng

Học làm game (5) - Lập trình với Unity

Bài trước: Học làm game (4) - Unity (game Tetris tiếp)

-----

1         Lập trình với Unity

1.1       Khởi tạo game

– Phần này chúng ta sẽ lập trình để phát sinh các khối hình ngẫu nhiên.

– Mỗi khối hình luôn có 4 ô vuông (như đã thiết kế ở bước trước).

– Tổng cộng có 7 loại khối hình khác nhau (biến thể), có tên tương ứng là O-Tetromino, I-Tetromino, T-Tetromino, L-Tetromino, J-Tetromino, S-Tetromino và Z-Tetromino.

– Chữ Tetris là viết ghép của Tetra (nghĩa là 4) và tennis (quần vợt)

Chúng ta sẽ tạo một GameObject rỗng, đặt tên là Spawner (máy đẻ trứng, chúng ta sẽ dùng nó để phát sinh ngẫu nhiên các khối hình). Để Spawner ở phía trên đầu của phân cảnh.

Trong GameObject, viết hàm spawnNext để sinh ngẫu nhiên các khối.

Bấm chuột phải vào vùng Project\Assets > chọn Create > chọn C# Script > đặt tên là Spawner.  


Để lập trình, bấm đúp chuột vào Spawner để mở Visual Studio.

Trên máy tính đang cài Visual Studio 2022, tuy nhiên lại bị báo lỗi này và không thể mở cửa sổ để lập trình.

Đọc thông báo lỗi, và coi phiên bản của Visual Studio đang mở, thì phát hiện ra, Unity đã mở mặc định Visual Studio 2008. Bản này cũ quá, nên không hỗ trợ Unity.

 Để chọn được phiên bản Visual Studio, cần tìm được tập tin thực thi của nó. Bấm phím cửa sổ trên bàn phím > gõ Visual Studio 2022 > chuột phải vào nó, chọn Open file location > hệ thống sẽ mở vị trí của shortcut (C:\ProgramData\Microsoft\Windows\Start Menu\Programs) > chuột phải vào shortcut, chọn Open file location sẽ thấy được tập tin thực thi của VS 2022 trong C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE , có tên là Devenv.exe. Chọn Devenv.exe.

Trong mục External Script Editor, bấm chuột vào mục Visual Studio 2008 > chọn Browser > và tìm tới tập tin Devenv.exe.

Vậy là đã mở được cửa sổ lập trình cho Spawner.


Trong lớp Spawner, khai báo để tạo mảng có tên là groups, phạm vi truy cập là public, thuộc kiểu GameObject để chứa các kiểu khối hình.

public class Spawner : MonoBehaviour

{

    public GameObject[] groups;

    // Start is called before the first frame update

    void Start()

Trong lớp Spawner, viết hàm spawnNext để chọn một kiểu khối hình ngẫu nhiên trong mảng groups và xuất ra giao diện trò chơi bằng Instantiate.

   public GameObject[] groups;

    public void spawnNext()

    {

        int i = Random.Range(0, groups.Length);

        Instantiate(groups[i], transform.position, Quaternion.identity);

    }

    // Start is called before the first frame update

    void Start()

Instantiate sẽ khởi tạo một khối ngẫu nhiên tại vị trí i. Tham số transform.position là vị trí của Spawner, tham số Quaternion.identity là chế độ xoay mặc định.

Spawner sẽ gọi hàm spawnNext() để sinh ra khối đầu tiên khi game bắt đầu.

    void Start()

    {

        spawnNext();

    }

Unity sẽ tự động gọi hàm Start() khi nạp phân cảnh và Spawner khởi chạy.

Trong Unity, chọn Spawner trong cửa sổ Hierarchy, chọn Add Component bên Inspector > chọn Scripts > chọn Spawner.

Kéo từng khối hình từ cửa sổ Project vào Groups của Spawner. Nếu không có mục Groups, bạn kiểm tra lại xem đã lưu lại mã nguồn bên Visual Studio chưa.



Bạn bấm Play, màn hình trò chơi sẽ xuất hiện khối đầu tiên. Bạn có thể giảm tọa độ Y của Spawner thành 12 để thấy khối hình hợp lý hơn.



-----

Cập nhật: 19/3/2023

Bài sau: Học làm game (6) - Lập trình với Unity (LT chức năng)

Học làm game (4) - Unity (game Tetris tiếp)

 Bài trước: Học làm game (3) - Làm quen với Unity

-----

Tạo các khối hình (groups) I, J, L, T, S, Z, O

Tạo GameObject rỗng bằng cách bấm vào menu GameObject > chọn Create Empty. Unity sẽ tạo ra một GameObject trong cửa sổ Hierarchy.

Chuột phải vào GameObject > chọn Remane > đổi tên thành GroupO

Kéo ảnh block trong cửa sổ Assets thả vào đối tượng GroupO trong cửa sổ Hierarchy, làm 4 lần.


Chúng ta sẽ thiết lập tọa độ cho các block để tạo ra khối-O (GroupO). Chọn lần lượt các block, và thiết lập giá trị như sau:

– Block: X = 0 Y = 0

– Block (1): X = 0 Y =1

– Block (2): X =1 Y =0

– Block (3): X = 1 Y =1

Kết quả,


Với mỗi Khối hình, chúng ta sẽ tạo ra một Prefab bằng cách kéo Khối hình (GroupO) từ cửa sổ Hierarchy vào cửa sổ Project.

– Prefab là viết tắt của pre-fabricated, nghĩa là chế sẵn (chế tạo sẵn, tiền chế). Prefab là một GameObject hoàn chỉnh sau khi thêm các thuộc tính và được lưu trữ để tái sử dụng. Các GameObject được nhân bản từ một prefab sẽ giống nhau hoàn toàn. Để tạo ra một prefab, chỉ cần kéo một GameObject từ cửa sổ Hierarchy vào cửa sổ Project.


Sau khi tạo xong prefab, chúng ta không cần GroupO trong cửa sổ Hierarchy nữa, nên có thể chuột phải vào nó > chọn Delete để xóa.

Tạo các khối hình còn lại I, J, L, T, S, Z

– Giả sử, mỗi ô vuông (block) có kích thước mỗi cạnh là 1cm, vậy khi thiết lập tọa độ X = 0, Y = 0, ô vuông này sẽ được đặt ở đâu trên hệ tọa độ Oxy. Bạn có thể chọn biểu tượng như trong hình dưới đây để quan sát và suy nghĩ. Tọa độ (x,y) có phải là của tâm của ô vuông không?


GroupI

– Block: X = 0 Y = 0

– Block (1): X = 0 Y = 1

– Block (2): X =0 Y = 2

– Block (3): X = 0 Y = 3

GroupJ

– Block: X = 0 Y = 0

– Block (1): X = 1 Y = 0

– Block (2): X = 1 Y = 1

– Block (3): X = 1 Y = 2

GroupL

– Block: X = 0 Y = 0

– Block (1): X = 1 Y = 0

– Block (2): X = 0 Y = 1

– Block (3): X = 0 Y = 2

GroupT

– Block: X = 1 Y = 0

– Block (1): X = 1 Y = 1

– Block (2): X = 0 Y = 1

– Block (3): X = 2 Y = 1

GroupS

– Block: X = 0 Y = 0

– Block (1): X = 1 Y = 0

– Block (2): X = 1 Y = 1

– Block (3): X = 2 Y = 1


GroupZ

– Block: X = 0 Y = 0

– Block (1): X = 1 Y = 0

– Block (2): X = 0 Y = 1

– Block (3): X = -1 Y = 1


Vậy là chúng ta đã tạo xong các khối hình. Mỗi khối hình là một prefab.


1.3       Xem và đọc thêm

[1] Về Unity: https://vi.wikipedia.org/wiki/Unity_(ph%E1%BA%A7n_m%E1%BB%81m_l%C3%A0m_game)

[2] Unity: https://en.wikipedia.org/wiki/Unity_(game_engine)

[3] https://noobtuts.com/unity/2d-tetris-game

[4] https://www.youtube.com/watch?v=89it3LA6RvI&list=PLBIVlCN8diTBOSFTedMDZ5tndeVdvRSsq&index=4

1.4       Bài tập và thực hành

Bài tập 1. Viết lại các đoạn mã trong phần lý thuyết.

1.5       Câu hỏi ôn tập

Câu 1. Phát biểu nào về Unity không đúng?

A. Unity là một phần mềm làm game (game engine) đa nền tảng

B. Sử dụng ngôn ngữ lập trình JavaScript

C. Hỗ trợ làm game 2D, 3D

D. Unity có thể tạo ra game chạy trên máy tính, thiết bị di động, trình duyệt, console, thực tế ảo

Câu 2. The __________ is a hierarchical text representation of every GameObject in the Scene. Each item in the Scene has an entry in the hierarchy, so the two windows are inherently linked. The hierarchy reveals the structure of how GameObjects attach to each other.

A. Scene view

B. Inspector window

C. Project window

D. Hierarchy window

Câu 3. The ________allows you to view and edit all the properties of the currently selected GameObject

A. Inspector window

B. Project window

C. Hierarchy window

D. Game view

Câu 4. ______ là một GameObject hoàn chỉnh sau khi thêm các thuộc tính và được lưu trữ để tái sử dụng. Các GameObject được nhân bản từ một ____ sẽ giống nhau hoàn toàn. Để tạo ra một ______, chỉ cần kéo một GameObject từ cửa sổ Hierarchy vào cửa sổ Project.

A. Scene

B. Prefab

C. Character

D. Asset

Câu 5. Trong quá trình thiết kế khối hình (Group) cho game Tetris, bạn thiết lập các tọa độ cho các ô vuông tương ứng là: Block: X = 1 Y = 0; Block (1): X = 1 Y = 1; Block (2): X = 0 Y = 1; Block (3): X = 2 Y = 1. Kết quả sẽ tạo ra khối hình gì?

A. GroupO

B. GroupL

C. GroupT

D. GroupI

Đáp án: 1(B), 2(D), 3(A), 4(B), 5(C)

-----

Cập nhật: 19/3/2023

Bài sau: Học làm game (5) - Lập trình với Unity


Học làm game (3) - Làm quen với Unity

Bài trước: Học làm game (2) - Lập kế hoạch

-----

1         Unity

Như trong phần Các công cụ để lập trình game đã đề cập, Unity là một trong rất nhiều các phần mềm dùng để lập trình game. Phần này sẽ tập trung tìm hiểu cơ bản về công cụ này.

Phần này chúng ta sẽ tập trung vào một số chủ đề sau:

– Rèn luyện phương pháp tự học, bắt đầu là xem và làm theo; vừa làm vừa ghi chép để hệ thống lại kiến thức

– Bằng cách làm theo clip, bước đầu có thể tạo ra được một game đơn giản bằng Unity

– Gặp các khái niệm, kiến thức chưa biết, chúng ta sẽ tìm kiếm tài liệu để đọc và học thêm

1.1       Tổng quan về Unity

Unity là một phần mềm làm game (game engine) đa nền tảng, do tập đoàn Unity Technologies của Đan Mạch tạo ra năm 2005.

Unity có thể tạo ra game chạy trên máy tính, thiết bị di động, trình duyệt, console, thực tế ảo.

Hỗ trợ làm game 2D, 3D. Sử dụng ngôn ngữ lập trình C#.

Các phiên bản của Unity

Phiên bản

Năm ra đời

Unity 2.0

2007

Unity 3.0

2010

Unity 4.0

2012

Unity 5.0

2015

Unity

2017 đến nay

1.2       Cài đặt và làm quen với Unity

Cài đặt

– Vào trang chủ của Unity: https://unity.com/

– Chọn phiên bản phù hợp hệ điều hành của bạn, phù hợp với yêu cầu sử dụng.

– Ví dụ: chọn phiên bản 2018.3.x.

– Thực hiện cài đặt

– Tạo tài khoản trên hệ thống Unity

Làm quen với Unity

– Chúng ta sẽ làm quen với Unity thông qua việc làm game Tetris đơn giản.

– Tham khảo bài viết: https://noobtuts.com/unity/2d-tetris-game

– Mở Unity > vào menu File > chọn New Project > điền các thông tin

– Bấm Create project để tạo dự án

– Ở khung Hierarchy (bên trái) > mục SampleScene > chọn Main Camera. Thiết lập màu của Background là màu đen (black), Size = 8, Position: X = 4.5, Y = 7.5, Z = -10. Xem hình minh họa.

– Size: kích thước chiều dọc của khung nhìn camera, đơn vị tính là [On an orthographic camera, the orthographic size dictates how many units in world space the screen’s height is divided into. So on a screen height of 1080 with orthographic size of 5, each world space unit will take up 108 pixels (1080 / (5*2)). It’s 5 * 2 because orthographic size specifies the size going from the center of the screen to the top.] 

– Orthographic: phép chiếu song song, được sử dụng trong các game 2D, các đối tượng sẽ được vẽ đúng tỉ lệ dù ở bất kì khoảng cách nào của chiều sâu.

Đọc thêm về Hierarchy và giao diện của Unity: https://docs.unity3d.com/Manual/Hierarchy.html


– Cửa sổ Hierarchy (B) hiển thị mọi GameObject trong một phân cảnh (scene). GameObject là khái niệm quan trọng nhất trong Unity Editor.

– SampleScene là phân cảnh mặc định của Unity. Trong đó có camera là một GameObject mặc định, tên là Main Camera.

– Camera là một con mắt quan sát Phân cảnh, từ đó sẽ xuất hiện tất cả các sự kiện trong game lên màn hình.

– Mỗi đối tượng trong game được gọi là GameObject. Ví dụ: nhân vật (characters), bóng đèn, cây, âm thanh.

– Cửa sổ phân cảnh (scene window) cho phép chúng ta tương tác với game đang được xây dựng, gồm lựa chọn và thay đổi vị trí của phân cảnh, nhân vật, và các loại GameObject khác.

– Cửa sổ theo dõi (Inspector view) cho phép bạn xem và thay đổi tất cả các thuộc tính của một GameObject đang được chọn.

Tạo các khối hình có tên I, J, L, T, S, Z, O, như sau:


Chuột phải vào ô vuông trên trang web > để lưu ảnh về thư mục Assets của dự án game Tetris.

– Assets có nghĩa là tài sản, là nơi chứa các tài nguyên để tạo ra game, ví dụ hình ảnh, âm thanh.


 
Chọn khối vuông (block) trong cửa sổ Project > thiết lập cấu hình trong cửa sổ Inspector theo hình sau > nhớ bấm Apply để lưu lại cấu hình.


Lưu ý: giá trị của mục Pixels Per Unit sẽ xác định kích thước của game.

Làm khung chữ nhật

Chúng ta sẽ tải tiếp ảnh đường viền từ trang web (https://noobtuts.com/unity/2d-tetris-game) về để làm khung cho trò chơi.

Lưu ảnh đường viền (border.png) vào thư mục Assest của dự án game Tetris.

Thiết lập thuộc tính cho border:


Kéo border từ vùng Project vào cùng Hierarchy, làm 2 lần:

– Cửa sổ Project hiển thị các Assets có thể dùng được trong dự án, các Assets được đưa và dự án sẽ xuất hiện ở đây.


Khung chữ nhật sẽ có chiều rộng là 10 đoạn (block) và chiều cao là 20 đoạn. Tọa độ của các đoạn này trong hệ trục tọa độ Oxy sẽ nằm trong khoảng (0,0) đến (10, 19). Đoạn đầu tiên sẽ có Ox là 0 và Oy là 0.

Thiết lập giá trị cho border và border (1) như hình sau:

Khi tạo khung chúng ta sử dụng chức năng biến đổi hình (transform), với tỉ lệ phóng lớn (scale) là 40. Unity sẽ phóng lớn border theo trục Oy cả chiều lên trên và xuống dưới, nên tọa độ ban đầu của border sẽ có giá trị Oy là 10. Mục đích để khung trò chơi sẽ nằm ở giữa màn hình.

Để thêm một khoảng nhỏ cho không gian đường viền, nhằm đường viền không chiếm vào vùng chơi, chúng ta sẽ cho tọa độ của border lùi sang bên trái và bên phải một chút. Thay vì tọa độ của border là (0,10) thì sẽ là (-0.5, 10); và của border (1) thay vì (9,10) thì sẽ là (9.5, 10).

Khi chúng ta bấm nút Play, giao diện game sẽ như sau:


-----

Cập nhật: 16/3/2023

-----

Bài sau: Học làm game (4) - Unity (game Tetris tiếp)

-----

Bạn muốn tự học HTML bài bản? Xem thêm