Làm game 2D đầu tiên trong Unity: nhân vật di chuyển và nhảy

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Bạn muốn tự làm game nhưng chưa biết bắt đầu từ đâu? Bài hướng dẫn này đưa bạn qua phần quan trọng nhất của mọi game platformer 2D: cho nhân vật chạy sang trái, sang phải và nhảy lên bằng Unity và ngôn ngữ C#.

Chuẩn bị dự án

Cài Unity Hub, sau đó cài một phiên bản Unity LTS và tạo project mới với mẫu 2D. Khi Unity mở ra, bạn sẽ thấy các cửa sổ chính: Scene (nơi dựng màn chơi), Game (xem như người chơi), Hierarchy (danh sách đối tượng), Inspector (chỉnh thuộc tính) và Project (các tệp tài nguyên).

Bước 1: Tạo nhân vật và mặt đất

  1. Trong Hierarchy, chuột phải chọn 2D Object > Sprites > Square, đổi tên thành Ground, kéo giãn thành một dải phẳng ở dưới màn hình.
  2. Thêm component Box Collider 2D cho Ground để có va chạm.
  3. Tạo thêm một Sprite (ví dụ Capsule hoặc Square nhỏ) tên Player đặt phía trên Ground. Sau này bạn có thể thay bằng hình nhân vật riêng.
  4. Thêm cho Player hai component: Rigidbody 2D (để chịu trọng lực) và Box Collider 2D.

Nhấn Play, nếu Player rơi xuống và đứng yên trên Ground thì vật lý đã hoạt động. Trong Rigidbody 2D, hãy bật Freeze Rotation Z để nhân vật không bị lăn ngã.

Bước 2: Script di chuyển

Trong cửa sổ Project, chuột phải chọn Create > C# Script, đặt tên PlayerController rồi kéo vào đối tượng Player. Mở file và viết:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 12f;

    private Rigidbody2D rb;
    private float moveInput;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        moveInput = Input.GetAxisRaw("Horizontal");

        if (Input.GetButtonDown("Jump"))
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
        }
    }

    void FixedUpdate()
    {
        rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
    }
}

Giải thích ngắn gọn: Update chạy mỗi khung hình nên phù hợp để đọc phím bấm; FixedUpdate chạy theo nhịp vật lý cố định nên phù hợp để đặt vận tốc. Trục "Horizontal" ứng với phím A, D hoặc mũi tên trái, phải. Ở các phiên bản Unity mới, thuộc tính vận tốc của Rigidbody2D có thể được đổi tên thành linearVelocity; nếu trình biên dịch báo lỗi hoặc cảnh báo ở rb.velocity, hãy đổi theo gợi ý của Unity.

Bước 3: Chỉ cho nhảy khi đang đứng trên đất

Với code trên, bạn có thể nhảy liên tục trên không. Để khắc phục, ta kiểm tra xem nhân vật có đang chạm đất không bằng một vòng tròn kiểm tra nhỏ đặt ở chân.

  1. Tạo một đối tượng trống con của Player tên GroundCheck đặt sát chân.
  2. Tạo Layer tên Ground và gán cho đối tượng mặt đất.
  3. Cập nhật script như bên dưới.
public Transform groundCheck;
public float checkRadius = 0.15f;
public LayerMask groundLayer;
private bool isGrounded;

void Update()
{
    moveInput = Input.GetAxisRaw("Horizontal");
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, groundLayer);

    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpForce);
    }
}

Quay lại Inspector của Player, kéo GroundCheck vào ô tương ứng và chọn layer Ground cho groundLayer. Giờ nhân vật chỉ nhảy được khi chạm đất.

Bước 4: Camera đi theo nhân vật

Cách đơn giản nhất là kéo đối tượng Main Camera thành con của Player trong Hierarchy, nhưng camera sẽ rung theo từng chuyển động. Cách tốt hơn là dùng gói Cinemachine hoặc viết script đặt vị trí camera dần về phía Player. Với người mới, cách kéo làm con là đủ để thử nghiệm.

Mẹo chỉnh cảm giác chơi

  • Tăng Gravity Scale của Rigidbody 2D lên khoảng 3 để cú nhảy dứt khoát hơn.
  • Chỉnh moveSpeed và jumpForce ngay trong Inspector khi đang Play để thấy kết quả tức thì (nhớ ghi lại giá trị ưng ý vì thay đổi lúc Play sẽ mất khi dừng).
  • Tạo Physics Material 2D ma sát bằng 0 để nhân vật không dính vào tường.

Kết luận

Bạn đã có nền tảng của một game platformer: nhân vật chịu vật lý, di chuyển theo phím và nhảy có điều kiện. Từ đây, việc thêm đồng xu, kẻ địch, hoạt ảnh và màn chơi mới đều xây trên cùng ý tưởng này.

Nếu bạn muốn đi từ prototype đến một game hoàn chỉnh có thể phát hành, các khóa học Unity tại codebem.com sẽ là điểm xuất phát phù hợp.

author_photo
Nguyễn Đình Cường

0 comment