Попробую перенести сюда с stackoverflow свой код, но если что вот ссылка на вопрос там же, только на англ.языке:https://stackoverflow.com/questions/68313100/verlet-integration-problem-with-distance-constraint-and-collision-detection-jitt
Так же сама статья, по которой писал:http://toqoz.fyi/game-rope.html
Буду благодарен за ответы, советы и любую помощь) Не прошу за меня писать ничего, просто хотелось бы понять, где допустил ошибку или чего не хватает. Заранее спасибо)
Гифка того, как дергается:
Скрытый текст:
Вариант столкновения со сферой:
Синтаксис:
Используется csharp
float radius = collision.Size.x * Mathf.Max(
Mathf.Max(collision.Transform.localScale.x, collision.Transform.localScale.y),
collision.Transform.localScale.z);
for (int j = 0; j < collision.CollisionAmount; j++)
{
Particle particle = particles[collision.CollidingNodes[j]];
float distance = (collision.Transform.position - particle.current).magnitude;
if (distance > radius + collisionRadius)
{
continue;
}
Vector3 direction = (particle.current -
collision.Transform.position).normalized;
Vector3 newPosition = collision.Transform.position +
direction * (radius + collisionRadius);
particle.current = newPosition;
particles[collision.CollidingNodes[j]] = particle;
}
break;
То как выглядит Fixed Update():
Синтаксис:
Используется csharp
void FixedUpdate()
{
UpdatePinned();
CollectCollisionInfo();
UpdatePositions();
for (int i = 0; i < solveIterations; i++)
{
AdjustDistances();
AdjustCollisions();
}
UpdateVisual();
}
{
UpdatePinned();
CollectCollisionInfo();
UpdatePositions();
for (int i = 0; i < solveIterations; i++)
{
AdjustDistances();
AdjustCollisions();
}
UpdateVisual();
}