Phát triển game 2D cơ bản với Unity: Từ ý tưởng đến sản phẩm
Mục lục bài viết
1. Unity là gì và tại sao chọn nó?
Unity là một trong những game engine phổ biến nhất thế giới, dùng để tạo game 2D và 3D. Hơn 50% game mobile được làm bằng Unity.
Tại sao Unity cho game 2D?
- Dễ học: C# dễ hơn C++ (Unreal).
- Tài liệu phong phú: Hàng ngàn tutorial miễn phí.
- Asset Store: Sprite, âm thanh, script có sẵn.
- Cross-platform: Build cho Windows, Mac, iOS, Android, WebGL.
- Cộng đồng lớn: Stack Overflow, Unity Forum, Reddit.
Yêu cầu:
- Cài Unity Hub + Unity Editor (bản Personal miễn phí).
- Cơ bản C# (biến, hàm, class).
- Visual Studio hoặc VS Code.
2. Tạo project 2D đầu tiên
Bước 1: Mở Unity Hub > New Project > 2D Core.
Bước 2: Đặt tên (ví dụ: 'MyFirstGame'), chọn thư mục.
Bước 3: Unity Editor mở ra: bạn thấy Scene, Game, Hierarchy, Project, Inspector.
Giao diện chính:
- Scene: Nơi bạn xây dựng game world.
- Game: Nơi xem game khi chạy.
- Hierarchy: Danh sách objects trong scene.
- Project: File assets (sprite, script, âm thanh).
- Inspector: Thuộc tính của object đang chọn.
Assets/ chứa mọi thứ.Tạo thư mục: Scenes, Scripts, Sprites, Audio, Prefabs: giữ ngăn nắp ngay từ đầu.
3. Sprite và Animation
Import Sprite:
- Kéo file ảnh .png vào thư mục Sprites.
- Chọn ảnh > Inspector > Sprite Mode > Multiple (nếu là spritesheet).
- Mở Sprite Editor > Slice > Automatic > Áp dụng.
Tạo Player:
- Kéo sprite vào Hierarchy: GameObject được tạo.
- Thêm Sprite Renderer component (có sẵn).
- Thêm Box Collider 2D: để phát hiện va chạm.
- Thêm Rigidbody 2D: để vật lý tác động.
Animation:
- Window > Animation > Animation.
- Chọn Player > Create > Animation Clip.
- Thêm keyframes cho các sprite khác nhau.
- Dùng Animator Controller và Parameters để chuyển animation.
4. Scripting cơ bản với C#
Tạo folder Scripts > Right-click > Create > C# Script.
Script mặc định: ```csharp
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5f;
void Update()
{
float moveX = Input.GetAxis("Horizontal");
float moveY = Input.GetAxis("Vertical");
Vector2 movement = new Vector2(moveX, moveY);
transform.Translate(movement * speed * Time.deltaTime);
}
}
```
Quan trọng:
Start(): chạy 1 lần khi object được tạo.Update(): chạy mỗi frame.FixedUpdate(): cho vật lý, chạy theo fixed time step.OnCollisionEnter2D(): khi va chạm.
Time.deltaTime là thời gian giữa 2 frame: nhân vào để movement không phụ thuộc FPS.5. Vật lý 2D và va chạm
Rigidbody 2D:
- Dynamic: Chịu tác động vật lý (trọng lực, lực đẩy).
- Kinematic: Không chịu vật lý nhưng có thể tương tác.
- Static: Không di chuyển (platform, wall).
Collider 2D:
- Box, Circle, Polygon, Capsule, Edge.
- Chọn loại phù hợp: Polygon chính xác nhất nhưng nặng.
Xử lý va chạm:
```csharp
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
// Mất máu
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Coin"))
{
Destroy(other.gameObject);
score += 10;
}
}
```
6. UI, âm thanh và build
UI:
- GameObject > UI > Text/Button/Image.
- UI tự động scale theo màn hình.
- Canvas Scaler > Scale With Screen Size.
Âm thanh:
- Import .mp3/.wav vào Audio.
- Thêm Audio Source component.
- Gán clip, chỉnh Volume, Loop, Play On Awake.
- Gọi
audioSource.Play()trong script.
Build game:
- File > Build Settings > Thêm scene.
- Chọn platform > Build.
- Unity tự động compile và tạo file .exe/.apk.
🙋 Câu hỏi thường gặp
Học Unity có khó không?
Cơ bản khá dễ: bạn có thể làm game 2D đơn giản trong 1 tuần. Phần khó là tối ưu, hệ thống phức tạp (RPG, online). Bắt đầu với game platformer hoặc top-down shooter.
Nên học Unity hay Godot?
Unity có tài liệu phong phú hơn, nhiều việc làm hơn. Godot nhẹ, mã nguồn mở, tốt cho 2D. Nếu bạn mới: học Unity trước, chuyển sang Godot sau.