Я пытаюсь сделать реалистичный переход между анимацией ходьбы и процессом падения с помощью тряпичной куклы. По сути, при вызове функции «DoRagdoll» я добавляю предыдущую силу из анимации ходьбы ко всем компонентам жесткого тела в отношении их масс. Затем я деактивирую компонент аниматора и включаю гравитацию для всех твердых тел. Это работает, но все равно выглядит странно. Я уже много пробовал, как на сайте документации Unity, по поводу проблем с ragdolls, а также я поиграл с соединениями различных частей тела. Я использовал систему buildin для создания ragdoll. Любые идеи о том, как улучшить переход или как создать более реалистичный рэгдолл?
void Awake()
{
rbs = GetComponentsInChildren<Rigidbody>();
DoRagdoll(false);
foreach (Rigidbody rb in rbs)
{
rb.useGravity = false;
//rb.isKinematic = true;
}
}
public void DoRagdoll (bool isRagdoll)
{
if (isRagdoll)
{
foreach (Rigidbody rb in rbs)
{
rb.AddForce(rb.mass * rb.velocity, ForceMode.Impulse);
}
}
GetComponent<Animator>().enabled = !isRagdoll;
if (isRagdoll)
{
foreach (Rigidbody rb in rbs)
{
rb.maxDepenetrationVelocity = 0.01f;
rb.useGravity = true;
//rb.isKinematic = false;
}
NavMeshAgent agent = GetComponent<NavMeshAgent>();
//GameObject.FindGameObjectWithTag("pelvis").GetComponent<PelvisPush>().PushPelvis();
rbSlowdown = true;
ragdollOn = true;
}
else
{
GetComponent<NavMeshAgent>().speed = GameObject.FindGameObjectWithTag("root").GetComponent<OldmanMovement>().movSpeed;
foreach (Rigidbody rb in rbs)
{
rb.useGravity = false;
//rb.isKinematic = true;
}
ragdollOn = false;
}
}