Chuyển động chậm
Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 35 trên 60.
Time.timeScale nằm giữa 0 và 1 sẽ tạo hiệu ứng chuyển động chậm. Khi ở mức 0.25, Time.deltaTime bằng một phần tư thời gian khung hình thực, vì vậy xe di chuyển bằng speed * Time.deltaTime chỉ đi được một phần tư quãng đường mỗi giây thực, các vật thể Rigidbodies bay và rơi với một phần tư tốc độ, còn WaitForSeconds(1f) kéo dài 4 giây thực. Trên 1, trò chơi chạy nhanh: 2 là tốc độ gấp đôi.
Vật lý cần thêm một dòng nữa. Mỗi bước vật lý vẫn đưa trò chơi tiến thêm Time.fixedDeltaTime, tức 0.02 giây thời gian trong trò chơi, và ở mức 0.25, mỗi bước kéo dài 0.08 giây thực: FixedUpdate() chỉ chạy 12.5 lần mỗi giây thực, nên các vật thể chỉ di chuyển một lần sau mỗi năm khung hình và bị giật. Giảm bước theo cùng hệ số, rồi khôi phục cả hai giá trị sau đó, vì Unity không tự đặt lại fixedDeltaTime. Tập lệnh này làm chậm trò chơi khi bạn giữ phím Space:
float normalStep;
void Awake()
{
normalStep = Time.fixedDeltaTime; // 0.02 trong dự án mới
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Time.timeScale = 0.25f;
Time.fixedDeltaTime = normalStep * Time.timeScale;
}
if (Input.GetKeyUp(KeyCode.Space))
{
Time.timeScale = 1f;
Time.fixedDeltaTime = normalStep;
}
}Với bước nhỏ hơn, vật lý vẫn chạy 50 bước mỗi giây thực và mỗi bước ứng với một phần tư thời gian trong trò chơi, vì vậy chuyển động chậm vẫn mượt mà. Bước được tính bằng giây trong trò chơi, nên code trong FixedUpdate() sử dụng Time.deltaTime vẫn hoạt động như cũ.
Thử thách
Trung bìnhChơi cảnh sao chổi bay qua SlowZone trong chuyển động chậm.
- Trong
SlowZone.cs, viếtvoid OnTriggerEnter(Collider other): đặtTime.timeScalethànhslowScalevàTime.fixedDeltaTimethành0.02f * slowScale. - Viết
void OnTriggerExit(Collider other): đặt chúng về1fvà0.02f.
Nhấn Chơi rồi nhấn phím Space: sao chổi lướt qua vùng này với tốc độ 0.4. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// Chuyển động chậm khi có vật ở trong vùng
}
Tất cả bài học trong Xây dựng trò chơi thực tế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàngTự luyện tập: Playground Unity