Как приземлить один объект на другой вместе с костями? Родитель mesh'а приземляемого объекта - кости (bones/armature). Карта масс в наличии Главное условие: опускать необходимо вместе с костями. Т.е. процесс опускания объекта должен рассчитываться по mesh'у, но при этом кости перемещаться вместе с ним. Рассматриваемые варианты как скрипты, так и физика. Уже совершённые попытки:скрипт Drop to ground - не хочет опускать объектфизика Rigid Body - отправляет объект в иное измерение
Один из способов сделать это - использовать физическое опускание объекта вместе с костями.
Для этого вы можете применить компонент Rigidbody к вашему объекту, который приземляется. Затем в настройках Rigidbody укажите, что объект имеет кинематическое свойство, чтобы он не отталкивался другими объектами.
Далее, вы можете в скрипте контролировать движение объекта, опуская его вниз вместе с костями. Вы можете использовать функцию Rigidbody.MovePosition() для перемещения объекта.
Пример кода:
using UnityEngine; public class DropToGround : MonoBehaviour { public Rigidbody rb; public Transform groundCheck; public LayerMask groundLayer; void FixedUpdate() { // Проверяем, находится ли объект над поверхностью bool isGrounded = Physics.CheckSphere(groundCheck.position, 0.1f, groundLayer); if (!isGrounded) { // Опускаем объект вниз rb.MovePosition(transform.position - Vector3.up * Time.deltaTime); } } }
В этом примере скрипт проверяет, находится ли объект над поверхностью (проверяет коллизии с землей с помощью Physics.CheckSphere). Если объект не находится на земле, то он опускается вниз с помощью функции MovePosition.
Вы можете использовать этот подход или изменить его под ваши требования и настройки. Не забывайте также настроить правильные значения карты масс для объектов и их костей.
Один из способов сделать это - использовать физическое опускание объекта вместе с костями.
Для этого вы можете применить компонент Rigidbody к вашему объекту, который приземляется. Затем в настройках Rigidbody укажите, что объект имеет кинематическое свойство, чтобы он не отталкивался другими объектами.
Далее, вы можете в скрипте контролировать движение объекта, опуская его вниз вместе с костями. Вы можете использовать функцию Rigidbody.MovePosition() для перемещения объекта.
Пример кода:
using UnityEngine;public class DropToGround : MonoBehaviour
{
public Rigidbody rb;
public Transform groundCheck;
public LayerMask groundLayer;
void FixedUpdate()
{
// Проверяем, находится ли объект над поверхностью
bool isGrounded = Physics.CheckSphere(groundCheck.position, 0.1f, groundLayer);
if (!isGrounded)
{
// Опускаем объект вниз
rb.MovePosition(transform.position - Vector3.up * Time.deltaTime);
}
}
}
В этом примере скрипт проверяет, находится ли объект над поверхностью (проверяет коллизии с землей с помощью Physics.CheckSphere). Если объект не находится на земле, то он опускается вниз с помощью функции MovePosition.
Вы можете использовать этот подход или изменить его под ваши требования и настройки. Не забывайте также настроить правильные значения карты масс для объектов и их костей.