Pivot модели

Импорт текстур, моделей, звуков и пр.

Pivot модели

Сообщение KuzmaProduction 04 сен 2010, 22:42

Подскажите как переместить пивот модели... нужно назначить центр модели на рукоятку чтобы привязать корректно...
Mayaвец.. 3д - 2д аниматор...
Аватара пользователя
KuzmaProduction
UNIт
 
Сообщения: 62
Зарегистрирован: 02 сен 2010, 11:54
  • ICQ

Re: Pivot модели

Сообщение Paul Siberdt 04 сен 2010, 23:03

Пивот существует лишь в пакетах моделирования и представляет собой смещение локального центра объекта относительно мирового центра. Чтобы объекты можно было совместить, экспортите их так, чтобы в 3D-редакторе их пивот находился в нуле координат и отсутствовала какая-либо история или трансформации на объекте. Как раз холодное оружие так в большинстве случаев и экспортят - рукоятками в нуле.

Если ничего поделать с моделью нельзя, навесьте ее в Юне чилдом на нулевой трансформ, и подвиньте, как нужно. Теперь пивотом вам послужит родитель-трансформ, его и совмещайте, с чем хочется... по цене плюс 1 трансформ в сцене. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Pivot модели

Сообщение Avatarchik 05 сен 2010, 00:10

Вот Editor скрипт для изменения Pivot модели прямо из редактора :ymparty:
http://solvethesystem.wordpress.com/setpivot/
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Pivot модели

Сообщение KuzmaProduction 05 сен 2010, 08:18

Благодарю!
Mayaвец.. 3д - 2д аниматор...
Аватара пользователя
KuzmaProduction
UNIт
 
Сообщения: 62
Зарегистрирован: 02 сен 2010, 11:54
  • ICQ

Re: Pivot модели

Сообщение TexeL 03 окт 2010, 20:56

AvatareC Respect !!! (:
ИзображениеИзображение
Аватара пользователя
TexeL
UNITрон
 
Сообщения: 244
Зарегистрирован: 15 ноя 2009, 20:57
  • Сайт

Re: Pivot модели

Сообщение bayah 16 ноя 2010, 19:10

А скажите, пожалуйста новичку, как этим скриптом пользоваться?
bayah
UNец
 
Сообщения: 3
Зарегистрирован: 12 ноя 2010, 08:44

Re: Pivot модели

Сообщение WhiteDevil 20 дек 2010, 21:45

Создаешь шарп-скрипт, называешь его SetPivot. Вычищаешь его и вставляешь все что по ссылке.
Заходишь в папку проекта -> Assets, создаешь папку Editor и кидаешь внутрь скрипт
Запускаешь [unity 3D] , раскрываешь меню GameObject и ваоля - в самом низу увидишь кнопку Set Pivot
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Pivot модели

Сообщение djon801 07 дек 2014, 01:26

WhiteDevil писал(а):Создаешь шарп-скрипт, называешь его SetPivot. Вычищаешь его и вставляешь все что по ссылке.
Заходишь в папку проекта -> Assets, создаешь папку Editor и кидаешь внутрь скрипт
Запускаешь [unity 3D] , раскрываешь меню GameObject и ваоля - в самом низу увидишь кнопку Set Pivot


на какую версию Unity этот скрипт?
На 4.6 работает ,но только объект вообще проподает

это в Unity
Instantiating mesh due to calling MeshFilter.mesh during edit mode. This will leak meshes. Please use MeshFilter.sharedMesh instead.
UnityEngine.MeshFilter:get_mesh()
SetPivot:OnGUI() (at Assets/Editor/SetPivot.cs:37)
UnityEditor.DockArea:OnGUI()


это в VisualStudio
Предупреждение 1 не удалось разрешить первичную ссылку "System.Data", поскольку она имеет более позднюю версию "2.0.5.0", чем версия в текущей целевой платформе. В текущей целевой платформе найдена версия "2.0.0.0". Assembly-CSharp-vs
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Pivot модели

Сообщение djon801 03 апр 2015, 23:53

Продолжу тему о злом певоте))
Нашёл вот такой скрипт!
закидываем его в Assets/Editor
Панелька управления в GameObject
В сцене выбираем объект у которого надо сдвинуть пивот,во вкладке GameObject в самом низу видим SetPivot.
От куда взял скрипт не помню уже,но помню там что то писалось о каких то ограничениях, типа далеко не переставишь, толи за мешь не вытащишь.
Ну в общем кому надо пощупаете, сами все увидите
Вот сам скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;

public class SetPivot : EditorWindow
{

    Vector3 p; //Pivot value -1..1, calculated from Mesh bounds
    Vector3 last_p; //Last used pivot

    GameObject obj; //Selected object in the Hierarchy
    MeshFilter meshFilter; //Mesh Filter of the selected object
    Mesh mesh; //Mesh of the selected object
    Collider col; //Collider of the selected object

    bool pivotUnchanged; //Flag to decide when to instantiate a copy of the mesh

    [MenuItem("GameObject/Set Pivot")] //Place the Set Pivot menu item in the GameObject menu
    static void Init()
    {
        SetPivot window = (SetPivot)EditorWindow.GetWindow(typeof(SetPivot));
        window.RecognizeSelectedObject(); //Initialize the variables by calling RecognizeSelectedObject on the class instance
        window.Show();
    }

    void OnGUI()
    {
        if (obj)
        {
            if (mesh)
            {
                p.x = EditorGUILayout.Slider("X", p.x, -11.0f, 11.0f);
                p.y = EditorGUILayout.Slider("Y", p.y, -1.0f, 1.0f);
                p.z = EditorGUILayout.Slider("Z", p.z, -1.0f, 1.0f);
                if (p != last_p)
                { //Detects user input on any of the three sliders
                  //Only create instance of mesh when user changes pivot
                    if (pivotUnchanged) mesh = meshFilter.sharedMesh; pivotUnchanged = false;
                    UpdatePivot();
                    last_p = p;
                }
                if (GUILayout.Button("Center"))
                { //Set pivot to the center of the mesh bounds
                  //Only create instance of mesh when user changes pivot
                    if (pivotUnchanged) mesh = meshFilter.sharedMesh; pivotUnchanged = false;
                    p = Vector3.zero;
                    UpdatePivot();
                    last_p = p;
                }
                GUILayout.Label("Bounds " + mesh.bounds.ToString());
            }
            else
            {
                GUILayout.Label("Selected object does not have a Mesh specified.");
            }
        }
        else
        {
            GUILayout.Label("No object selected in Hierarchy.");
        }
    }

    //Achieve the movement of the pivot by moving the transform position in the specified direction
    //and then moving all vertices of the mesh in the opposite direction back to where they were in world-space
    void UpdatePivot()
    {
        Vector3 diff = Vector3.Scale(mesh.bounds.extents, last_p - p); //Calculate difference in 3d position
        obj.transform.position -= Vector3.Scale(diff, obj.transform.localScale); //Move object position
                                                                                 //Iterate over all vertices and move them in the opposite direction of the object position movement
        Vector3[] verts = mesh.vertices;
        for (int i = 0; i < verts.Length; i++)
        {
            verts[i] += diff;
        }
        mesh.vertices = verts; //Assign the vertex array back to the mesh
        mesh.RecalculateBounds(); //Recalculate bounds of the mesh, for the renderer's sake
                                  //The 'center' parameter of certain colliders needs to be adjusted
                                  //when the transform position is modified
        if (col)
        {
            if (col is BoxCollider)
            {
                ((BoxCollider)col).center += diff;
            }
            else if (col is CapsuleCollider)
            {
                ((CapsuleCollider)col).center += diff;
            }
            else if (col is SphereCollider)
            {
                ((SphereCollider)col).center += diff;
            }
        }
    }

    //Look at the object's transform position in comparison to the center of its mesh bounds
    //and calculate the pivot values for xyz
    void UpdatePivotVector()
    {
        Bounds b = mesh.bounds;
        Vector3 offset = -1 * b.center;
        p = last_p = new Vector3(offset.x / b.extents.x, offset.y / b.extents.y, offset.z / b.extents.z);
    }

    //When a selection change notification is received
    //recalculate the variables and references for the new object
    void OnSelectionChange()
    {
        RecognizeSelectedObject();
    }

    //Gather references for the selected object and its components
    //and update the pivot vector if the object has a Mesh specified
    void RecognizeSelectedObject()
    {
        Transform t = Selection.activeTransform;
        obj = t ? t.gameObject : null;
        if (obj)
        {
            meshFilter = obj.GetComponent(typeof(MeshFilter)) as MeshFilter;
            mesh = meshFilter ? meshFilter.sharedMesh : null;
            if (mesh)
                UpdatePivotVector();
            col = obj.GetComponent(typeof(Collider)) as Collider;
            pivotUnchanged = true;
        }
        else
        {
            mesh = null;
        }
    }
}
Последний раз редактировалось djon801 04 апр 2015, 00:28, всего редактировалось 2 раз(а).
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Pivot модели

Сообщение DbIMok 04 апр 2015, 00:12

djon801 писал(а):закидываем его в Assets/Scripts

Editor скрипты логично класть в Editor папку
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Pivot модели

Сообщение djon801 04 апр 2015, 00:18

DbIMok писал(а):
djon801 писал(а):закидываем его в Assets/Scripts

Editor скрипты логично класть в Editor папку

Спасибо за поправочку :)
Исправил
Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08


Вернуться в Медиа

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

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