Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
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#.
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).
Ground, kéo giãn thành một dải phẳng ở dưới màn hình.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.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ã.
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.
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.
GroundCheck đặt sát chân.Ground và gán cho đối tượng mặt đất.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.
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.
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).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.
Nguyễn Đình Cường
0 comment