Я хочу импортировать и отображать файл .obj во время выполнения в Unity (2017.3.1f1) и обнаружил фиксированную версию ( click , прямая ссылка на pastebin ) FastObjImporterиз вики Unity ( нажмите ).
Поскольку мой файл .obj не содержит нормалей, мне пришлось внести следующие изменения:
if(faceData[i].z >= 1) {
if(normals.Count != 0) {
newNormals[i] = normals[faceData[i].z - 1];
}
}
Я такжедобавлено mesh.RecalculateNormals();
в начале.
Проблема и причина, по которой я открываю этот вопрос, заключается в том, что Unity ничего не отображает.Сцена довольно проста: стандартный направленный свет и стандартная камера с персонажем игрока в качестве его потомка.
Мой код (для правильного выравнивания необходимо повернуть):
Mesh m = FastObjImporter.Instance.ImportFile(path);
Material mat = new Material(Shader.Find("Hidden/Internal-Colored")) { color = new Color(0,0,1) };
GameObject obj = new GameObject();
if(obj.GetComponent<MeshFilter>()==null) { obj.AddComponent<MeshFilter>(); }
if(obj.GetComponent<MeshRenderer>()==null) { obj.AddComponent<MeshRenderer>(); }
obj.GetComponent<MeshFilter>().mesh = m;
obj.GetComponent<MeshRenderer>().material = mat;
obj.transform.Rotate(new Vector3(270,0,0));
obj.transform.Rotate(new Vector3(0,0,180));
IЯ пробовал разные шейдеры и модели, и я использую один и тот же код для создания своих собственных сеток и объектов GameObject с информацией о вершинах. Я читаю из файла .txt, и там все отлично работает - только не здесь.
Я также заметил, что список "треугольников" всегда содержит 0 элементов, хотя в моем файле .obj есть множество записей "t ....".Если я изменю здесь «j = 1» на «j = 0», он заполняет список:
info += j;
j = 0;
while(j + 2 < info) {
В конце концов Unity по-прежнему ничего не отображает, поэтому должно быть что-то еще, что не так.
У кого-нибудь есть подозрения, что это может быть и что я могу сделать, чтобы это работало?