Собственно вопрос. Где напортачил в фунции импорта? Потомучто yield там должен быть по смыслу, а без него вроде никак. Или это какое-то ограничение есть на такие примочки к редактору Unity?
Использую Unity 3.0.0f5 (51258) бесплатную
Синтаксис:
Используется javascript
#pragma strict
#pragma implicit
#pragma downcast
/**
* Класс описывает методы для экспорта и импорта объектов.
* Экспорт объектов (мешей) в специальный формат с сохранением файла на носитель.
* TODO Импорт меша из файла на носителе и преобразование в объект на сцене.
*
* Для работы скрипта требуется наличие MeshSerializer2 в проекте
* @see http://www.unifycommunity.com/wiki/inde ... erializer2
*
* @version 1.0
*/
class SerializeObject extends ScriptableObject {
/**
* Валидатор. Если возвращает false, то меню скрипта будет неактивным
*/
@MenuItem("GameObject/Export/Serialized Mesh (.sm)", true)
static function ValidateDoExport() : boolean {
var t : Transform = Selection.activeTransform;
if ( t && t.GetComponent(MeshFilter) )
return true;
else
return false;
}
/**
* Экспортирует выбранный в Редакторе объект в файл с сериализованными данными.
* Необходимо чтобы у объекта был компонент MeshFilter
*/
@MenuItem("GameObject/Export/Serialized Mesh (.sm) %e")
static function DoExport() {
var saveTangents = false;
//var t : Transform = Selection.gameObjects[0];
var t : Transform = Selection.activeTransform;
var meshName : String = t.name;
var mesh : Mesh = (t.GetComponent(MeshFilter) as MeshFilter).sharedMesh;
var path : String = EditorUtility.SaveFilePanel("Export .sm file", "", meshName, "sm");
if (path.Length == 0) {
print("Mesh saving canceled");
return;
}
MeshSerializer.WriteMeshToFileForWeb (mesh, path, saveTangents);
print("Saved " + meshName + " mesh to " + path );
}
/**
* TODO Need help!
*/
@MenuItem("GameObject/Import/Serialized Mesh (.sm) %i")
static function DoImport() {
var path : String = EditorUtility.OpenFilePanel("Import .sm file to scene", "", "sm");
if (path.Length == 0) {
Debug.Log("Open file canceled");
return;
}
Debug.Log("Loading mesh from " + path);
var www : WWW = new WWW("file:///" + path);
//Без yield загружает меши через раз, успел/не успел
//yield www; //Если раскомментить то скрипт вообще не запускается
var mesh : Mesh = MeshSerializer.ReadMeshFromWWW( www );
if (!mesh ) {
Debug.Log("Failed to load mesh");
return;
}
Debug.Log("Mesh loaded");
var go : GameObject = new GameObject( "Imported Object" );
go.AddComponent(MeshFilter);
go.AddComponent(MeshRenderer);
(go.GetComponent(MeshFilter) as MeshFilter).mesh = mesh;
}
}
#pragma implicit
#pragma downcast
/**
* Класс описывает методы для экспорта и импорта объектов.
* Экспорт объектов (мешей) в специальный формат с сохранением файла на носитель.
* TODO Импорт меша из файла на носителе и преобразование в объект на сцене.
*
* Для работы скрипта требуется наличие MeshSerializer2 в проекте
* @see http://www.unifycommunity.com/wiki/inde ... erializer2
*
* @version 1.0
*/
class SerializeObject extends ScriptableObject {
/**
* Валидатор. Если возвращает false, то меню скрипта будет неактивным
*/
@MenuItem("GameObject/Export/Serialized Mesh (.sm)", true)
static function ValidateDoExport() : boolean {
var t : Transform = Selection.activeTransform;
if ( t && t.GetComponent(MeshFilter) )
return true;
else
return false;
}
/**
* Экспортирует выбранный в Редакторе объект в файл с сериализованными данными.
* Необходимо чтобы у объекта был компонент MeshFilter
*/
@MenuItem("GameObject/Export/Serialized Mesh (.sm) %e")
static function DoExport() {
var saveTangents = false;
//var t : Transform = Selection.gameObjects[0];
var t : Transform = Selection.activeTransform;
var meshName : String = t.name;
var mesh : Mesh = (t.GetComponent(MeshFilter) as MeshFilter).sharedMesh;
var path : String = EditorUtility.SaveFilePanel("Export .sm file", "", meshName, "sm");
if (path.Length == 0) {
print("Mesh saving canceled");
return;
}
MeshSerializer.WriteMeshToFileForWeb (mesh, path, saveTangents);
print("Saved " + meshName + " mesh to " + path );
}
/**
* TODO Need help!
*/
@MenuItem("GameObject/Import/Serialized Mesh (.sm) %i")
static function DoImport() {
var path : String = EditorUtility.OpenFilePanel("Import .sm file to scene", "", "sm");
if (path.Length == 0) {
Debug.Log("Open file canceled");
return;
}
Debug.Log("Loading mesh from " + path);
var www : WWW = new WWW("file:///" + path);
//Без yield загружает меши через раз, успел/не успел
//yield www; //Если раскомментить то скрипт вообще не запускается
var mesh : Mesh = MeshSerializer.ReadMeshFromWWW( www );
if (!mesh ) {
Debug.Log("Failed to load mesh");
return;
}
Debug.Log("Mesh loaded");
var go : GameObject = new GameObject( "Imported Object" );
go.AddComponent(MeshFilter);
go.AddComponent(MeshRenderer);
(go.GetComponent(MeshFilter) as MeshFilter).mesh = mesh;
}
}