Mặc dù tôi đã không làm việc với động cơ vật lý đạn đặc biệt, tôi đã làm một cái gì đó rất giống với động cơ vật lý khác. Cách mà tôi giải quyết là thiết lập vận tốc tuyến tính của cơ thể cứng nhắc thay vì dịch trực tiếp. Chuyển động và va chạm sau đó được tự động xử lý bởi giai đoạn cập nhật động cơ vật lý.
Từ các tài liệu dường như có một btRigidBody::setLinearVelocity
phương pháp mà bạn có thể sử dụng. Vì vậy, ví dụ, nếu bạn không muốn bất kỳ gia tốc nào xảy ra, chỉ cần đặt vận tốc tuyến tính thành một giá trị phù hợp bất cứ khi nào nhân vật di chuyển và đặt nó trở lại (0,0,0) khi nhân vật được cho là dừng lại (nghĩa là khi người chơi nhả chìa khóa).
Đối với những giá trị nào sẽ sử dụng, cách tiếp cận thông thường sẽ là bắt đầu với tốc độ mong muốn của nhân vật của bạn (dưới dạng float / vô hướng) và sau đó nhân nó với một vectơ chuẩn hóa đang chỉ theo hướng bạn muốn di chuyển. Từ những gì tôi có thể thấy btVector3
lớp đã có các phương thức cho tất cả điều này.
Ngoài ra, bạn có thể coi việc coi nhân vật là một đối tượng vật lý hoàn chỉnh và xử lý chuyển động bằng cách sử dụng applyForce
hoặc applyImpulse
phương thức. Những điều này sẽ dẫn đến việc tăng tốc cơ thể, vì vậy các nhân vật của bạn sẽ có động lực và kết quả có thể sẽ đẹp hơn theo cách này. Nhưng bạn cần phải thực hiện một số biện pháp bổ sung, ví dụ, bằng cách đảm bảo vận tốc tuyến tính không bao giờ vượt quá một giới hạn nhất định, bằng cách kẹp nó hoặc chơi xung quanh với giảm xóc / ma sát. Vì vậy, nó sẽ khó hơn một chút để thực hiện và finetune.
Thử nghiệm với cả hai phương pháp và sau đó chọn phương pháp ứng xử gần nhất với nhu cầu của bạn.