Nhảy bằng xung lực
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 3 trên 71.
AddForce nhận tham số thứ hai là ForceMode, cho biết cách sử dụng vectơ. Nếu không truyền tham số này, bạn sẽ nhận được ForceMode.Force, một lực đẩy kéo dài trong một bước vật lý, nên cần cộng lực đó qua từng bước. Một cú đá, cú nhảy hoặc vụ nổ xảy ra tức thời, đó là ForceMode.Impulse: toàn bộ lực đẩy được áp dụng trong một lần, làm thay đổi tốc độ một lượng bằng xung lực chia cho khối lượng.
Quả bóng đá này (0.5 kg) sẽ bị đá khi bạn nhấp chuột. Tốc độ của nó tăng thêm (0, 2, 6) / 0.5 = (0, 4, 12) m/s ở bước vật lý tiếp theo, rồi trọng lực và mặt cỏ sẽ tác động lên nó:
void Update()
{
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
}
}Bạn có thể gọi lực đẩy một lần từ Update() ở khung hình xảy ra cú nhấp chuột: Unity giữ lực đó và áp dụng ở bước vật lý tiếp theo. Bốn chế độ khác nhau theo hai cách: áp dụng tức thời hoặc trong một bước, và có tính đến khối lượng hay không:
Force: áp dụng trong một bước, chia cho khối lượng (động cơ, gió).Acceleration: áp dụng trong một bước, không tính đến khối lượng.Impulse: áp dụng tức thời, chia cho khối lượng (cú đá, cú nhảy).VelocityChange: áp dụng tức thời, không tính đến khối lượng: vectơ được cộng thẳng vào tốc độ.
Thử thách
DễKhi nhấn phím Space, hãy làm cho ếch nhảy một lần.
- Bên dưới chú thích, viết
if (Input.GetKeyDown(KeyCode.Space)). - Bên trong câu lệnh đó, gọi
rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);để ếch có khối lượng 2 kg.
Nhấn Chơi rồi nhấn Space: ếch bật lên rồi rơi xuống. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class FrogJump : MonoBehaviour
{
public float jumpImpulse = 10f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Space: một lực đẩy lên duy nhất với cường độ jumpImpulse
}
}
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