InvokeRepeating, CancelInvoke
Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 23 trên 71.
InvokeRepeating(nameof(Blink), 0.5f, 0.5f) gọi Blink lần đầu sau 0.5 giây, rồi gọi lại sau mỗi 0.5 giây cho đến khi bị hủy. Số thứ nhất là thời gian chờ trước lần gọi đầu tiên, số thứ hai là khoảng thời gian giữa các lần gọi. CancelInvoke(nameof(Blink)) dừng hàm này, còn CancelInvoke() không có tên sẽ dừng mọi Invoke mà tập lệnh đã lên lịch.
Đèn cảnh báo này nhấp nháy cho đến khi bạn nhấn Space, sau đó đèn sáng liên tục:
Light lamp;
void Start()
{
lamp = GetComponent<Light>();
InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}
void Blink()
{
lamp.enabled = !lamp.enabled;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
CancelInvoke(nameof(Blink));
lamp.enabled = true;
}
}Bộ hẹn giờ trong chương về tạo vật thể cũng làm được việc tương tự bằng một trường float và một phép kiểm tra trong Update(). Với InvokeRepeating, Unity tự theo dõi thời gian và thực hiện các lần gọi. Bạn đặt lệnh gọi InvokeRepeating trong Start(): nếu đặt trong Update(), lệnh sẽ lên lịch thêm một lần gọi lặp lại ở mỗi khung hình.
Thử thách
DễKhiến mạch nước phun trào ba lần theo lịch.
- Trong
Start(), gọiInvokeRepeating(nameof(Erupt), 1f, 2f);. - Viết
void Erupt(): tăngeruptionsthêm 1, gọiball.AddForce(Vector3.up * power, ForceMode.Impulse);và ghi nhật ký"Eruption " + eruptions. - Ở cuối
Erupt(), khieruptions == 3, gọiCancelInvoke(nameof(Erupt));.
Nhấn Chơi: quả bóng được phóng lên ba lần, cách nhau 2 giây. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Geyser : MonoBehaviour
{
public Rigidbody ball;
public float power = 6f;
int eruptions;
void Start()
{
// Phun trào sau khi nhấn Play 1 giây, rồi cứ 2 giây phun trào một lần
}
// Erupt(): đếm số lần phun trào, đẩy quả bóng lên và ghi nhật ký; dừng sau lần thứ ba
}
Tất cả bài học trong Vật lý và lối chơi
1Rigidbody
Trọng lực và khối lượngĐẩy bằng AddForceNhảy bằng xung lựcFixedUpdate cho vật lýVận tốcVật thể động họcÔn tập: Bệ phóng4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine đầu tiên của bạnVòng lặp trong CoroutineDừng CoroutineÔn tập: đếm ngược10Dự án: Thoát khỏi đấu trường
Đấu trườngThợ săn2Va chạm
OnCollisionEnterMình đã va chạm với gì?Vỡ khi va chạmĐứng trên mặt đấtĐộ nảy và ma sátHình dạng colliderÔn tập: Tường có thể phá vỡ5Dự án: Cuộc đua thu thập xu
Quả bóng lănThu thập xuTự luyện tập: Playground Unity