UNITY 3D SIMULATION FIRST-PERSON LOW-POLY COURSEWORK

Khu Bếp Diệu Kỳ (The Magical Kitchen)

> MISSION_OVERVIEW

Đây là đồ án môn học tâm huyết mà mình đã thực hiện toàn bộ các khâu từ Lập trình, Thiết kế đồ họa (Art) đến Game Design. Trò chơi là một mô phỏng quản lý quầy bếp góc nhìn thứ nhất, nơi người chơi phải chạy đua với thời gian để phục vụ các món ăn theo yêu cầu. Dự án là minh chứng cho khả năng làm việc độc lập và tư duy sản phẩm trọn vẹn của mình.

> TECHNICAL_CHALLENGES

1. Grabbing & Pivot Alignment

Vấn đề: Khi sử dụng Raycast để cầm nắm vật thể, object thường bị lệch hoặc xoay không đúng hướng mong muốn do sai Pivot, gây cảm giác khó chịu khi đặt bánh vào lò.
Giải pháp: Mình đã tinh chỉnh lại Pivot của toàn bộ model 3D và viết logic offset vị trí khi OnGrab để vật thể luôn nằm gọn trong tay người chơi một cách tự nhiên nhất.

2. Cooking Logic (Update vs State Machine)

Vấn đề: Xử lý logic nướng bánh. Lúc đó do chưa áp dụng State Machine Pattern nên việc kiểm soát trạng thái (Sống -> Chín -> Cháy) khá phức tạp.
Giải pháp: Sử dụng Collider Trigger để phát hiện vật phẩm vào lò và xử lý bộ đếm thời gian (Timer) trực tiếp trong hàm Update. (Bài học rút ra: Sau dự án này mình đã tìm hiểu và áp dụng State Machine cho các dự án sau để code sạch và dễ bảo trì hơn).

// MicrowaveLogic.cs - Xử lý nướng bánh
private void OnTriggerEnter(Collider other) {
  if (other.CompareTag("Food") && !isCooking) {
    currentFood = other.gameObject;
    isCooking = true;
    currentTimer = 0f;
  }
}

private void Update() {
  if (isCooking && currentFood != null) {
    currentTimer += Time.deltaTime; // Đếm ngược
    if (currentTimer >= requiredCookTime) CompleteCooking();
  }
}

> KEY_FEATURES

  • Interaction: Sử dụng module Raycast của XR Interaction Toolkit để xử lý trỏ và cầm nắm vật lý.
  • Data Management: Dùng ScriptableObjects để lưu trữ dữ liệu món ăn và load động bằng Resources.Load.
  • Gameplay: Cơ chế nấu ăn thực tế (Lò vi sóng, Pha chế) và hệ thống Đơn hàng ngẫu nhiên.

> VISUAL_DATA