Сетчатый фильтр sharedMesh и проблема с сеткой в ​​Unity - PullRequest
0 голосов
/ 22 июня 2019

Вот метод генерации куба, собранного через Интернет:

static void CreateCube () {
    Vector3[] vertices = {
        new Vector3 (0, 0, 0),
        new Vector3 (1, 0, 0),
        new Vector3 (1, 1, 0),
        new Vector3 (0, 1, 0),
        new Vector3 (0, 1, 1),
        new Vector3 (1, 1, 1),
        new Vector3 (1, 0, 1),
        new Vector3 (0, 0, 1),
    };

    int[] triangles = {
        0,
        2,
        1, //face front
        0,
        3,
        2,
        2,
        3,
        4, //face top
        2,
        4,
        5,
        1,
        2,
        5, //face right
        1,
        5,
        6,
        0,
        7,
        4, //face left
        0,
        4,
        3,
        5,
        4,
        7, //face back
        5,
        7,
        6,
        0,
        6,
        7, //face bottom
        0,
        1,
        6
    };

    GameObject tem = new GameObject ("Custom Mesh");
    tem.AddComponent<MeshFilter> ();

    Mesh mesh = tem.GetComponent<MeshFilter> ().mesh;
    mesh.Clear ();
    mesh.vertices = vertices;
    mesh.triangles = triangles;
    mesh.Optimize ();
    mesh.RecalculateNormals ();
}

Когда я вызываю этот метод, он выдает ошибку:

Создание сетки из-за вызова MeshFilter.mesh в режиме редактирования. Это приведет к утечке сеток. Пожалуйста, используйте MeshFilter.sharedMesh вместо этого. UnityEngine.MeshFilter: get_mesh ()

И когда наконец я изменю Mesh mesh = tem.GetComponent<MeshFilter>().mesh; на Mesh mesh = tem.GetComponent<MeshFilter>().sharedMesh;

Это дает мне еще одну ошибку, говоря:

NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта

Я нажал на Консоль , и он направил меня к той же строке.

1 Ответ

1 голос
/ 22 июня 2019

Полагаю, это необходимо для запуска в редакторе, а не во время выполнения или в режиме воспроизведения.

Вам не нужно извлекать сетку из MeshFilter, поскольку вы все равно ее очищаете и заменяетевсе его содержание.Эта сетка также нулевая, так как вы только что создали этот компонент на лету.Он не содержит ссылок ни на что.

Просто сделай Mesh mesh = new Mesh();.Затем назначьте его MeshFilter, который вы только что создали в его поле sharedMesh.Метод AddComponent <> () возвращает компонент, поэтому нет необходимости извлекать его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...