BRO_TIGER
@BRO_TIGER
Indie Developer (C#, JS)

Как смещать позицию с помощью Дочерних объектов, тем самым сместить позицию в Центр?

Всем привет! Не так давно, примерно месяц назад наткнулся на интересный Ассет в Магазине Ассетов, называется "Fast Bouyancy"... Это физика воды которая мне очень нужна для игры, и более реалистичней самописного варианта! Задался вопросом как изменять Центр Массы походу добавления игроком деталей...
Вот как вызывается:

floatingGameEntityFlat.centerOfMassOffset = new Vector3(0, 0, 0);


Как можно заметить это переменная внутри класса которая имеет тип Vector3...
Так как вся Физика заложена в Родителе надо с помощью Дочерних объектов смещать "Центр Масс", но я не представляю как... Если информации не хватит обращайтесь, добавлю...
Заранее Спасибо!
  • Вопрос задан
  • 347 просмотров
Решения вопроса 2
MrMureno
@MrMureno Куратор тега Unity
VR for all
https://docs.unity3d.com/ScriptReference/Rigidbody...
Не знаю поможет ли эта ссылка вам, но подозреваю что floatingGameEntityFlat.centerOfMassOffset банально переопределяет вот это вот)
Там же есть метод заставляющий Физическое тело (Rigidbody) пересчитать центр масс, а считается он банально на основе геометрии коллайдеров , из которых "слепленн" объект
Ответ написан
BRO_TIGER
@BRO_TIGER Автор вопроса
Indie Developer (C#, JS)
Denis Gaydak Спасибо за ответ, но я сам решил эту проблему) А решил её с помощью МешРендерера в дочерних объектах и их [bounds] и тем самым смог менять позицию в центр! Вот как выглядит код с помощью которого я меняю позицию в центр. (Оказалось centerOfMassOffset не нужен был мне нужна была позиция)
public void FitToChildren()
    {
        bool hasBounds = false;
        Bounds bounds = new Bounds(Vector3.zero, Vector3.zero);

        for (int i = 0; i <ship.transform.childCount; ++i)
        {
            Renderer childRenderer = ship.transform.GetChild(i).GetComponent<Renderer>();
            if (childRenderer != null)
            {
                if (hasBounds)
                {
                    bounds.Encapsulate(childRenderer.bounds);
                }
                else
                {
                    bounds = childRenderer.bounds;
                    hasBounds = true;
                }
            }
        }

        playerShip.transform.position = bounds.center - ship.transform.position;
    }


Ещё раз Спасибо!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы