Добавление компонентов манипуляции через C# скрипт работает только в Unity - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь динамически добавить модель FBX в сцену и добавить следующие компоненты к дочерним объектам основного GameObject, созданного из модели FBX:

MeshCollider (Я добавляю меня sh для этого с помощью переменной sharedMe sh)

ManipulationHandler

NearInteractionGrabbable

Когда я тестирую функциональность в Unity, он работает безупречно. Когда я развертываю HoloLens 2, работают только те объекты, для которых не требуется «convx = true». 1011 *

Вот мой код для справки о том, как я заставляю все работать:

void Start()
    {
        //Grab object from Resources/Objects using provided unique identifier
        //I'm instantiating like this because I'm setting the parent to another GameObject in the original code and I got errors if I didn't do it this way
        GameObject go = Instantiate(Resources.Load<GameObject>("Objects/" + objectId));
        //Loop through child objects of model
        for (int i = 0; i < go.transform.childCount; i++)
        {
            AddManipulationComponents(go.transform.GetChild(i).gameObject);
        }
    }

    void AddManipulationComponents(GameObject item)
    {
        //Get MeshFilter so I can set the mesh of it to the sharedMesh of the MeshCollider
        MeshFilter meshFilter = item.GetComponent<MeshFilter>();
        //Only Add MeshCollider components if there's a mesh on the object.
        if (meshFilter != null)
        {
            Mesh mesh = item.GetComponent<MeshFilter>().mesh;
            if (mesh != null)
            {
                //Add MeshCollider
                MeshCollider collider = item.EnsureComponent<MeshCollider>();
                //A lot of components are curved and need convex set to false
                collider.convex = true;
                //Add NearInteractionGrabbable
                item.EnsureComponent<NearInteractionGrabbable>();
                //Add ManipulationHandler
                item.EnsureComponent<ManipulationHandler>();
                //Set mesh to MeshCollider
                collider.sharedMesh = mesh;
            }
        }
        //If current component has children, then loop through those.
        if (item.transform.childCount > 0)
        {
            for (int i = 0; i < item.transform.childCount; i++)
            {
                AddManipulationComponents(item.transform.GetChild(i).gameObject);
            }
        }
    }

Это работает, когда я запускаю его через Unity, но когда я создаю его и развертываю на HoloLens 2 это не работает полностью. Под этим я подразумеваю, что на самом деле работают только 3 или 4 дочерних объекта, и они оказываются плоскими. Это заставляет меня думать, что "выпуклая" переменная в MeshCollider ведет себя не так, как я бы надеялся.

У кого-нибудь есть исправление для этого? (служебная информация):

SnapShot

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

При импорте FBX вам необходимо установить флажок «Чтение / запись»

enter image description here

Я включил это и обязательно экспортировал все материалы а также.

0 голосов
/ 07 мая 2020

Convex me sh коллайдеры ограничены 255 треугольниками, возможно, поэтому он не работает?

...