2using System.Collections;
3using System.Collections.Generic;
8using NaughtyAttributes;
15using AssetLoaderContext =
TriLibCore.AssetLoaderContext;
26#if UNITY_WEBGL && TRILIB_2
32 var assetLoaderOptions = AssetLoader.CreateDefaultLoaderOptions();
34 var extension = url.Substring(url.LastIndexOf(
'.') + 1).ToLower();
36 if (extension ==
"zip")
38 AssetLoaderZip.LoadModelFromZipStream(new MemoryStream(data), assetLoaderOptions: assetLoaderOptions,
39 fileExtension: url.Substring(url.LastIndexOf(
'.') + 1).ToLower(), onLoad:
40 delegate(AssetLoaderContext alc)
42 var mr = alc.RootGameObject.GetComponentInChildren<MeshRenderer>();
43 Vector3 objectSizes = mr.bounds.max - mr.bounds.min;
44 float objectSize = Mathf.Max(objectSizes.x, objectSizes.y, objectSizes.z);
45 float cameraView = 2.0f * Mathf.Tan(0.5f * Mathf.Deg2Rad * Camera.main.fieldOfView);
46 float distance = 2.0f * objectSize / cameraView;
47 distance += 0.5f * objectSize;
50 pb_SceneCamera.Focus(alc.RootGameObject.transform.position,distance);
53 mr.gameObject.AddComponent<MeshInfo>();
55 LoadingManager.instance.HideWindow();
56 }, onError: OnError, onMaterialsLoad: delegate(AssetLoaderContext alc) { }, onProgress: delegate(AssetLoaderContext alc, float progress) { });
60 AssetLoader.LoadModelFromStream(new MemoryStream(data), assetLoaderOptions: assetLoaderOptions,
61 fileExtension: url.Substring(url.LastIndexOf(
'.') + 1).ToLower(), onLoad:
62 delegate(AssetLoaderContext alc)
64 var mr = alc.RootGameObject.GetComponentInChildren<MeshRenderer>();
65 Vector3 objectSizes = mr.bounds.max - mr.bounds.min;
66 float objectSize = Mathf.Max(objectSizes.x, objectSizes.y, objectSizes.z);
67 float cameraView = 2.0f * Mathf.Tan(0.5f * Mathf.Deg2Rad * Camera.main.fieldOfView);
68 float distance = 2.0f * objectSize / cameraView;
69 distance += 0.5f * objectSize;
72 pb_SceneCamera.Focus(alc.RootGameObject.transform.position,distance);
75 mr.gameObject.AddComponent<MeshInfo>();
77 LoadingManager.instance.HideWindow();
84 public void LoadFromMemory(
byte[] data,
string filename, GameObject wrapper =
null,
bool singleModel =
false,
bool global =
false)
98 using (var assetLoader =
new AssetLoader())
102 var assetLoaderOptions = AssetLoader.CreateDefaultLoaderOptions();
105 assetLoaderOptions.MaterialTransparencyMode = MaterialTransparencyMode.Cutout;
109 assetLoaderOptions.AdvancedConfigs.Add(AssetAdvancedConfig.CreateConfig(AssetAdvancedPropertyClassNames.FBXImportPreservePivots,
false));
111 GameObject tea =
null;
116 AssetLoader.LoadModelFromStream(
new MemoryStream(data), assetLoaderOptions: assetLoaderOptions, wrapperGameObject: parent,
117 fileExtension: filename.Substring(filename.LastIndexOf(
'.') + 1).ToLower(), onLoad:
118 delegate(AssetLoaderContext alc)
120 tea = alc.RootGameObject;
124 tea.name = filename.Remove(0, filename.LastIndexOf(
"\\") + 1);
131 var tc = tea.AddComponent<
TagCloud>();
139 uf.fileName = filename;
147 }, onError: OnError);
151 var extension = filename.Substring(filename.LastIndexOf(
'.') + 1).ToLower();
152 AssetLoaderContext alc;
154 if (extension ==
"zip")
156 alc = AssetLoaderZip.LoadModelFromZipStreamNoThread(
new MemoryStream(data), assetLoaderOptions: assetLoaderOptions, wrapperGameObject: parent,
157 fileExtension: extension, onError: OnError);
161 alc = AssetLoader.LoadModelFromStreamNoThread(
new MemoryStream(data), assetLoaderOptions: assetLoaderOptions, wrapperGameObject: parent,
162 fileExtension: extension, onError: OnError, filename: filename);
165 tea = alc.RootGameObject;
175 tea.name = filename.Remove(0, filename.LastIndexOf(
"\\") + 1);
182 var tc = tea.AddComponent<
TagCloud>();
192 uf.fileName = filename;
222 tea = assetLoader.LoadFromMemory(data, filename, assetLoaderOptions, parent);
234 tea.name = filename.Remove(0, filename.LastIndexOf(
"\\") + 1);
241 var tc = tea.AddComponent<
TagCloud>();
247 ShaderChanger.
Change(GetComponentsInChildren<MeshRenderer>(),
"Ciconia Studio/Double Sided/Standard/Diffuse Bump");
260 private void OnError(IContextualizedError contextualizedError)
264 PopupManager.
instance.ShowPopup(
"Error loading file", contextualizedError.GetInnerException().Message);
269 readonly List<Thread> workerThreads =
new List<Thread>();
271 void ComponentAdder(GameObject go)
274 if (useAdvancedColliderGeneration)
276 if (go.GetComponent<MeshFilter>() && !go.GetComponent<Collider>())
278 var vhacd = go.AddComponent<
VHACD>();
280 Thread worker =
new Thread(vhacd.GenerateConvexMeshes);
281 workerThreads.Add(worker);
282 worker.IsBackground =
true;
289 if (go.GetComponent<MeshFilter>() && !go.GetComponent<Collider>())
291 var coll = go.AddComponent<MeshCollider>();
294 if (go.GetComponent<MeshRenderer>())
296 var mr = go.GetComponent<MeshRenderer>();
297 foreach (var material
in mr.materials)
299 if (material.mainTexture ==
null)
301 material.mainTexture = Resources.Load<Texture>(
"2k_white");
303 if (material.HasProperty(
"_Glossiness"))
305 var smoothness = material.GetFloat(
"_Glossiness");
308 if (material.HasProperty(
"_Metallic"))
310 var smoothness = material.GetFloat(
"_Metallic");
320 for (
int i = 0; i < go.transform.childCount; i++)
322 ComponentAdder(go.transform.GetChild(i).gameObject);
326 private void OnDestroy()
328 foreach (var thread
in workerThreads)
TriLibCore.AssetLoaderOptions AssetLoaderOptions
void StartLateRebuild(bool force=false)
static FileDragAndDrop instance
void AddGameObject(GameObject gobject, LoadPanel panel=LoadPanel.None, string filePath="", bool global=false)
static pb_PrefabBrowser instance
static float MinMaxClamp(float value, float min, float max)
static bool IsInChild(Transform t, string childName)
bool useAdvancedColliderGeneration
void ModelFromURL(string url, bool modelEditor=false)
void LoadFromMemory(byte[] data, string filename, GameObject wrapper=null, bool singleModel=false, bool global=false)
static void Change(Material mat, string shaderName)