Saat ini saya menggunakan Fisika Peluru untuk mensimulasikan fisika di dunia saya. Saat ini, saya memiliki pemain yang dapat dikontrol dan dapat bergerak dengan ApplyForce, namun belum memiliki kemampuan untuk memutar.
Namun, saya mengunci gerakan sudut ke sumbu Y (pitch), tetapi sepertinya tidak berhasil:
Saat inisialisasi:
// Player.cpp
m_physicsBodyComp->LockRotation({0.f, 1.f, 0.f});
// PhysicsBodyComponent.cpp
void tse::PhysicsBodyComponent::LockRotation(const TSVector3 & a_axis) {
if(m_rigidBody)
m_rigidBody->setAngularFactor(btVector3(a_axis.GetX(), a_axis.GetY(), a_axis.GetZ()));
}
Juga, apa yang mungkin menimbulkan masalah juga: Sebelum simulasi fisika saya mengatur transformasi benda tegar menjadi transformasi komponen transformasi saya, dan setelah simulasi fisika saya mengatur transformasi komponen transformasi menjadi transformasi benda tegar.
// Before physics simulation
void tse::PhysicsBodyComponent::UpdateTransformComponent() {
if(m_rigidBody) {
if(m_transformComponent->m_wasDirty && m_transformComponent->IsValid()) {
btQuaternion _quat;
_quat.setEuler(m_transformComponent->m_rotation.GetY(), m_transformComponent->m_rotation.GetX(), m_transformComponent->m_rotation.GetZ());
btTransform _trans;
_trans.setRotation(_quat);
_trans.setOrigin(m_transformComponent->m_position.GetVecBt());
m_rigidBody->setWorldTransform(_trans);
m_transformComponent->m_wasDirty = false;
Activate();
}
}
}
// After physics simulation
void tse::PhysicsBodyComponent::Update(float a_deltaTime) {
if(m_rigidBody) {
if(m_bodyType == PhysicsBodyType::DYNAMIC) {
btTransform & _trans = m_rigidBody->getWorldTransform();
DirectX::XMVECTOR _rotation;
btQuaternion _quat = _trans.getRotation();
_rotation.m128_f32[0] = _quat.getX();
_rotation.m128_f32[1] = _quat.getY();
_rotation.m128_f32[2] = _quat.getZ();
m_transformComponent->SetPosition(TSVector3(_trans.getOrigin()));
m_transformComponent->SetRotation(_rotation);
}
}
}
Jadi masalahnya saya mengunci putaran sumbu x dan z, tetapi tetap mengubah putaran sumbu x dan z (GIF masalahnya ditunjukkan di bawah). Seperti yang saya bilang tadi, saya belum melakukan rotasi pemain. Setiap rotasi yang Anda lihat pada GIF di bawah ini murni dilakukan oleh Bullet Physics. Saya hanya memindahkan pemain dengan AddForce.
Apakah saya melakukan sesuatu yang salah atau apakah ini bug yang diketahui dalam fisika Bullet? Terima kasih sebelumnya..!