Как экспортировать сериализованный файл сетки .asset в fbx [duplicate]

== тесты для ссылочного равенства (независимо от того, являются ли они одним и тем же объектом).

.equals() тесты для равенства значений (независимо от того, являются ли они логически «равными»).

Objects.equals () проверяет наличие null перед вызовом .equals(), поэтому вам не нужно (доступно с JDK7, также доступным в Guava ).

String.contentEquals () сравнивает содержимое String с содержимым любого CharSequence (доступно с Java 1.5).

Следовательно, если вы хотите проверить, имеет ли две строки одно и то же значение, вы, вероятно, захотите использовать Objects.equals().

// These two have the same value
new String("test").equals("test") // --> true 

// ... but they are not the same object
new String("test") == "test" // --> false 

// ... neither are these
new String("test") == new String("test") // --> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 

// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true

// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true

Вы почти всегда хотите использовать Objects.equals(). В редкой ситуации, когда вы знаете, что имеете дело с интернированными строками, вы можете использовать ==.

Из JLS 3.10. 5. Строковые литералы :

Кроме того, строковый литерал всегда ссылается на тот же экземпляр класса String. Это связано с тем, что строковые литералы, или, в более общем смысле, строки, которые являются значениями константных выражений ( §15.28 ), «интернированы», чтобы обмениваться уникальными экземплярами, используя метод String.intern.

. Подобные примеры также можно найти в JLS 3.10.5-1 .

0
задан Programmer 13 October 2017 в 16:14
поделиться

1 ответ

Это действительно сложно, так как вам нужно прочитать спецификации для каждого формата (stl / obj / fbx) и понять их, чтобы сделать их самостоятельно. К счастью, уже существует много плагинов, которые могут быть использованы для экспорта единства в stl, obj и fbx.

FBX:

Используется UnityFBXExporter для экспорта Unity mesh в fbx во время выполнения.

public GameObject objMeshToExport;

void Start()
{
    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel"+ ".fbx");

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    }

    FBXExporter.ExportGameObjToFBX(objMeshToExport, path, true, true);
}

OBJ:

Для obj используется ObjExporter .

public GameObject objMeshToExport;

void Start()
{
    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel" + ".obj");

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    }

    MeshFilter meshFilter = objMeshToExport.GetComponent<MeshFilter>();
    ObjExporter.MeshToFile(meshFilter, path);
}

STL:

Вы можете использовать плагин pb_Stl для формата STL.

public GameObject objMeshToExport;

void Start()
{
    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel" + ".stl");

    Mesh mesh = objMeshToExport.GetComponent<MeshFilter>().mesh;

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    }


    pb_Stl.WriteFile(path, mesh, FileType.Ascii);

    //OR
    pb_Stl_Exporter.Export(path, new GameObject[] { objMeshToExport }, FileType.Ascii);
}
4
ответ дан Programmer 16 August 2018 в 03:48
поделиться
  • 1
    Спасибо за ваш совет. Я никогда не думал о том, чтобы найти плагин в Github ... Сегодня я попробую все эти плагины. – Gareth Lam 14 October 2017 в 02:31
  • 2
    Я хотел бы разработать приложение для Android (для школьного проекта), которое позволяет пользователям создавать собственные телефонные футляры, а затем генерировать файлы 3D-геометрии в формате STL / OBJ, который готов для трехмерной печати. (Извините, что я не уточнил в вопросе.) Это основная причина, по которой мне нужен плагин для экспорта gameobjects / meshes в stl / obj / fbx-файлы во время выполнения в Android-приложении. Я попробовал оба pb_Stl и UnityFBXExporter в void Start () (коды, которые вы предложили). Но когда я включаю приложение, а затем открываю внутреннее хранилище. Я обнаружил, что ничего не создано. – Gareth Lam 15 October 2017 в 09:24
  • 3
    Я хотел бы знать, могут ли эти коды экспорта выполняться в других функциях вместо void Start (). Потому что я хочу добиться создания файла stl только при нажатии на конкретную кнопку вместо начала приложения. – Gareth Lam 15 October 2017 в 09:28
  • 4
    Все ваши комментарии не нужны. Код, который вы видите, является просто примером использования и может быть использован или вызван в любое время, если вы поместите их в функцию non Start. Возможно, вам придется вызвать Directory.Exists и Directory.CreateDirectory перед сохранением модели, или вы столкнетесь с проблемой этой . Также сделана опечатка путем размещения «.fbx». как расширение всех из них. Теперь это исправлено. См. Редактирование. Вы можете проверить, работает ли с File.Exists сохранение, или прочитав файл с помощью File.ReadAllBytes – Programmer 15 October 2017 в 12:11
Другие вопросы по тегам:

Похожие вопросы: