Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Một trò chơi chạy mượt trên máy tính có thể giật mạnh trên điện thoại tầm trung. Thiết bị di động có giới hạn về CPU, GPU, bộ nhớ và nhiệt độ. Bài viết tổng hợp các kỹ thuật tối ưu Unity quan trọng nhất cho game di động.
Đừng tối ưu theo cảm tính. Unity Profiler cho biết thời gian CPU, GPU, bộ nhớ và bộ thu gom rác. Hãy kết nối trực tiếp với thiết bị thật và thử trên máy cấu hình thấp mà bạn muốn hỗ trợ. Xác định xem trò chơi bị giới hạn bởi CPU hay GPU rồi mới chọn hướng xử lý.
Mỗi lần CPU yêu cầu GPU vẽ một nhóm đối tượng gọi là draw call, và quá nhiều sẽ gây nghẽn.
Tạo đối tượng liên tục sinh rác, dẫn đến đợt thu gom rác gây khựng bất chợt. Dùng object pooling để tái sử dụng thay vì liên tục Instantiate và Destroy:
using System.Collections.Generic;
using UnityEngine;
public class BulletPool : MonoBehaviour
{
[SerializeField] private GameObject bulletPrefab;
[SerializeField] private int initialSize = 20;
private readonly Queue<GameObject> pool = new Queue<GameObject>();
void Awake()
{
for (int i = 0; i < initialSize; i++)
{
var b = Instantiate(bulletPrefab, transform);
b.SetActive(false);
pool.Enqueue(b);
}
}
public GameObject Get(Vector3 position)
{
var b = pool.Count > 0 ? pool.Dequeue() : Instantiate(bulletPrefab, transform);
b.transform.position = position;
b.SetActive(true);
return b;
}
public void Return(GameObject b)
{
b.SetActive(false);
pool.Enqueue(b);
}
}
private Rigidbody2D rb;
void Awake()
{
rb = GetComponent<Rigidbody2D>(); // lấy một lần
}
void FixedUpdate()
{
rb.velocity = new Vector2(speed, rb.velocity.y);
}
Điện thoại sẽ giảm xung nhịp khi nóng, làm trò chơi tụt hiệu năng sau vài phút. Đặt tốc độ khung hình mục tiêu hợp lý, ví dụ 30 hoặc 60 tùy loại trò chơi, thay vì để chạy tối đa không cần thiết. Việc này tiết kiệm cả pin.
void Start()
{
Application.targetFrameRate = 60;
QualitySettings.vSyncCount = 0;
}
Chọn backend IL2CPP và kiến trúc ARM64 cho bản phát hành Android để có hiệu năng tốt và đáp ứng yêu cầu của cửa hàng. Bật nén và loại bỏ mã không dùng (stripping) để giảm dung lượng, rồi kiểm thử kỹ.
Quy trình hiệu quả là đo bằng Profiler trên thiết bị thật, xử lý điểm nghẽn lớn nhất, đo lại. Giảm draw call, dùng pooling, tránh cấp phát mỗi khung hình và nén texture đúng cách đã giải quyết phần lớn vấn đề hiệu năng.
Đừng chỉ thử trên máy mạnh của bạn. Hãy chuẩn bị ít nhất một máy cấu hình thấp và một máy tầm trung để đại diện. Chơi liên tục khoảng nửa tiếng để xem hiệu năng có tụt khi máy nóng không. Cho phép người chơi chọn mức chất lượng đồ họa, và đặt giá trị mặc định theo cấu hình phát hiện được. Cách này giúp trò chơi chạy được trên nhiều loại máy mà không phải hy sinh trải nghiệm cho người dùng máy mạnh.
Nếu bạn muốn học làm game Unity từ cơ bản đến phát hành trên di động, hãy xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment