SOLO DEV ACTION RUNNER PHYSICS COURSEWORK

FINISHER: LEVEL UP PHASE

> MISSION_OVERVIEW

Đây là dự án Action Runner góc nhìn thứ 3 mà mình phát triển độc lập (Solo). Lấy cảm hứng từ cơ chế Leviathan Axe huyền thoại trong God of War, người chơi điều khiển nhân vật vừa di chuyển tốc độ cao, vừa ném rìu tiêu diệt quái vật cản đường và phá hủy "Lõi Năng Lượng" cuối màn chơi. Dự án tập trung nặng vào Toán học (Vector/Bézier Curves) để xử lý quỹ đạo vũ khí và cảm giác chiến đấu (Game Feel).

> TECHNICAL_CHALLENGES

1. Leviathan Axe Mechanic (Ném & Gọi Rìu)

Vấn đề: Làm sao để chiếc rìu khi gọi về bay theo một quỹ đạo cong đẹp mắt chứ không bay thẳng tuột, và phải xoay đúng chiều để cán rìu nằm gọn vào tay nhân vật.
Giải pháp: Mình sử dụng công thức Bézier Curve bậc 2 (Quadratic Bézier) để tính toán đường bay cong. Điểm điều khiển (Control Point) được tính động dựa trên vị trí của người chơi và chiếc rìu để tạo độ cong tự nhiên. Đồng thời sử dụng Quaternion.Slerp để xoay rìu khớp với tay khi bắt được.

2. Runner & Combat Hybrid

Vấn đề: Kết hợp giữa việc chạy liên tục (Runner) và đánh nhau (Combat) rất dễ gây rối loạn nhịp độ (Pacing).
Giải pháp: Thiết kế màn chơi theo dạng "Arena on Rails" - nhân vật vẫn di chuyển về phía trước nhưng có những đoạn chậm lại (Slow-mo) khi tung đòn kết liễu (Finisher) để người chơi cảm nhận được sức nặng của đòn đánh.

// AxeRecall.cs - Logic gọi rìu về bằng Bezier Curve
private Vector3 GetBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2) {
  // Công thức B(t) = (1-t)^2 * P0 + 2(1-t)t * P1 + t^2 * P2
  float u = 1 - t;
  float tt = t * t;
  float uu = u * u;

  Vector3 p = uu * p0; // Điểm bắt đầu (Vị trí rìu)
  p += 2 * u * t * p1; // Điểm uốn cong (Curve Point)
  p += tt * p2; // Điểm đích (Tay người chơi)
  return p;
}

> KEY_FEATURES

  • Recallable Weapon: Ném vũ khí đi găm vào tường/quái và gọi về bất cứ lúc nào.
  • Dynamic Camera: Camera lắc nhẹ (Screen Shake) khi rìu va chạm và Zoom khi thực hiện đòn kết liễu.
  • Boss Fight: Cơ chế phá hủy Core với thanh máu và các đợt quái bảo vệ.

> VISUAL_DATA