Отцентрировать Pivot

Лучший способ помочь другим, поделиться своими находками.

Отцентрировать Pivot

Сообщение VBProgr 25 фев 2014, 17:05

Положить в Editor. Меню Custom/Create Mesh Aligner Parent. Использовать на объектах сцены с MeshRenderer.
Синтаксис:
Используется csharp
using UnityEditor;
using UnityEngine;

public class MeshPivotAlign
{
    [MenuItem("Custom/Create Mesh Aligner Parent")]
    public static void AlignMesh()
    {
        var mr = Selection.activeGameObject.GetComponentInChildren<MeshRenderer>();
        var diff = mr.bounds.center - mr.transform.position;
        var go = new GameObject(mr.name);
        var tr = go.transform;
        tr.position = mr.transform.position + diff;
        tr.parent = mr.transform.parent;
        mr.transform.parent = tr;
        go.layer = mr.gameObject.layer;
        Selection.activeGameObject = go;
    }
}
 
skype: vbprogr
Добавить vbprogr в Skype
VBProgr
UNITрон
 
Сообщения: 319
Зарегистрирован: 24 сен 2011, 14:11

Re: Отцентрировать Pivot

Сообщение _Ignat_ 25 фев 2014, 17:31

Может быть я ошибаюсь, но я вроде видел стандартный метод для этой операции.
А так - (3A4OT)
Изображение
| · участник клуба GCC · |
Аватара пользователя
_Ignat_
UNITрон
 
Сообщения: 311
Зарегистрирован: 11 дек 2013, 20:26
Откуда: Российская Федерация
  • Сайт

Re: Отцентрировать Pivot

Сообщение VBProgr 27 май 2014, 15:41

Обновление. Поддержка нескольких мешей, но, возможно, не идеальная.
Синтаксис:
Используется csharp
using UnityEditor;
using UnityEngine;
using System.Linq;

public class MeshPivotAlign
{
    [MenuItem("Custom/Create Mesh Aligner Parent")]
    public static void AlignMesh()
    {
        GameObject originalObject = Selection.activeGameObject;
        var renderers = originalObject.GetComponentsInChildren<MeshRenderer>();
        var min = new Vector3(renderers.Min(r => r.bounds.min.x), renderers.Min(r => r.bounds.min.y), renderers.Min(r => r.bounds.min.z));
        var max = new Vector3(renderers.Max(r => r.bounds.max.x), renderers.Max(r => r.bounds.max.y), renderers.Max(r => r.bounds.max.z));
        var b = new Bounds();
        b.SetMinMax(min, max);
        var diff = b.center - originalObject.transform.position;
        var go = new GameObject(originalObject.name);
        var tr = go.transform;
        tr.position = originalObject.transform.position + diff;
        tr.parent = originalObject.transform.parent;
        originalObject.transform.parent = tr;
        go.layer = originalObject.gameObject.layer;
        Selection.activeGameObject = go;
    }
}
skype: vbprogr
Добавить vbprogr в Skype
VBProgr
UNITрон
 
Сообщения: 319
Зарегистрирован: 24 сен 2011, 14:11


Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6