我正在用c ++创建一个游戏引擎,其语法与Unity非常相似。 我创建了一个名为PointGravity的组件,该组件使用牛顿的万有引力定律将场景中的所有实体吸引到其中。
但是,当用物体绕轨道进行测试时,由于PointGravity也会将其拉到物体上,因此会产生摆动效果。但是它在一个方向上的摆动远大于在另一个方向上的摆动,导致其向一侧移动,如此处所示:Video
m_entity是点重力所在的实体 这是代码:
void PointGravity::Update()
{
mass = m_entity->GetComponent<RigidBody>()->mass; //Gets the mass from the rigidbody on the same entity
std::vector<Entity*> entities = EntityManager::GetInstance()->GetEntities(); //Retrieves a vector list of all entities in the scene
for (int i = 0; i < entities.size(); i++)
{
if (entities[i] == m_entity)
continue;
if (!entities[i]->GetComponent<RigidBody>())
continue;
if (entities[i]->GetComponent<RigidBody>()->ignoreGravity)
continue;
//Gravity calculation
Vector3 direction = m_entity->GetComponent<Transform>()->position - entities[i]->GetComponent<Transform>()->position;
float distance = direction.Magnitude();
if (distance < 0.1)
continue;
//float massProduct = m_entity->GetComponent<RigidBody>()->mass * entities[i]->GetComponent<RigidBody>()->mass;
float forceMagnitude = (m_entity->GetComponent<RigidBody>()->mass * entities[i]->GetComponent<RigidBody>()->mass) / pow(distance, 2) * 0.01;
Vector3 force = direction.Normalize()*forceMagnitude;
m_entity->GetComponent<RigidBody>()->AddForce(force*-1);
entities[i]->GetComponent<RigidBody>()->AddForce(force);
}
}
黄色石头是上面带有PointGravity的石头,棕色石头的切向速度为10,在黄色石头上方的位置为10。我不知道是什么导致了这个问题。