Tanoda
Texture2DToMatExample.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.IO;
4using GILES.Interface;
5using TMPro;
6using UnityEngine;
8using UnityEngine.Networking;
10using UnityEngine.SceneManagement;
11using UnityEngine.UI;
12using UnityEngine.Video;
13using NaughtyAttributes;
14
16{
20 public class Texture2DToMatExample : MonoBehaviour
21 {
23
24 private RuntimeTriLibLoader trlib;
25
26 private GameObject paretnObject;
27
28 // Use this for initialization
29 IEnumerator Start ()
30 {
31 yield return new WaitForEndOfFrame();
32 paretnObject = GameObject.Find("uploaded objects");
33 trlib = GameObject.Find("RuntimeTriLibLoader").GetComponent<RuntimeTriLibLoader>();
34
35 WebGLFileUploadManager.SetDebug(false);
36 if (
37 #if UNITY_WEBGL && !UNITY_EDITOR
38 WebGLFileUploadManager.IsMOBILE
39 #else
40 Application.isMobilePlatform
41 #endif
42 ) {
43 WebGLFileUploadManager.Show (false);
44 WebGLFileUploadManager.SetDescription("Select assets files");
45
46 }else{
47 WebGLFileUploadManager.Show (true);
48 WebGLFileUploadManager.SetDescription("Drop assets files here");
49 }
50 //WebGLFileUploadManager.SetAllowedFileName("\\.(assetBundle|obj|gltf|glb|stl|3dxml)$");
51 WebGLFileUploadManager.onFileUploaded += OnFileUploaded;
52 }
56 void OnDestroy ()
57 {
58 WebGLFileUploadManager.onFileUploaded -= OnFileUploaded;
59 WebGLFileUploadManager.Dispose();
60 }
61
62 [Button]
63 private void TestLoadModel()
64 {
65 OnFileUploaded(new []{ new UploadedFileInfoV2(){errorCode = 0, filePath = @"E:\Users\Soma\Documents\3dsMax\export\AE86.fbx", isSuccess = true, name = "AE86.fbx"}, });
66 }
67
72 private void OnFileUploaded(UploadedFileInfoV2[] result)
73 {
74 LoadingManager.instance.SetLoading();
75 LoadingManager.instance.ShowWindow();
76 if(result.Length == 0) {
77 Debug.Log("File upload Error!");
78 PopupManager.instance.ShowPopup("File upload Error!", "The file failed to upload, please try again.");
79 LoadingManager.instance.HideWindow();
80 return;
81 }else{
82 Debug.Log("File upload success! (result.Length: " + result.Length + ")");
83 }
84
85 foreach(var file in result){
86 TagCloud tc;
87 if(file.isSuccess){
88 Debug.Log("file.filePath: " + file.filePath + " exists:" + File.Exists(file.filePath));
89
90 byte[] byteArray = File.ReadAllBytes (file.filePath);
91
92 Debug.Log("byteArray size: " + byteArray.Length + " firstchar:" + byteArray[0]);
93 switch (file.name.Substring(file.name.LastIndexOf('.') + 1).ToLower())
94 {
95 case "assetbundle":
96 var ab = AssetBundle.LoadFromMemory(byteArray);
97 //Debug.Log("AssetBundle.LoadFromMemory DONE!");
99 break;
100 case "png":
101 case "jpg":
102 case "jpeg":
103 case "bmp":
104 //var newtexture = new Texture2D(128,128, TextureFormat.RGBA32, false);
107 //newtexture.LoadImage(byteArray);
108 var go = new GameObject(file.name);
109 var ri = go.AddComponent<RawImage>();
110 var canvas = go.AddComponent<Canvas>();
111 go.GetComponent<RectTransform>().sizeDelta = Vector2.one;
112 //ri.texture = newtexture;
113 StartCoroutine(DownloadImage(file.filePath, ri, go)); //TODO: upload to cms, get link
114
115 tc = go.AddComponent<TagCloud>();
116 tc.filePath = file.filePath;
117 tc.TryLoad();
118
119 prefabBrowser.AddGameObject(go, pb_PrefabBrowser.LoadPanel.Pictures, Path.Combine(Application.streamingAssetsPath, "pictures", file.name));
120 go.transform.parent = paretnObject.transform;
121 break;
122 case "mp4":
123 var vidgo = new GameObject(file.name);
124 var vp = vidgo.AddComponent<VideoPlayer>();
125 vp.url = file.filePath; //TODO: upload to cms, get link
126 vp.isLooping = true;
127 vp.playOnAwake = true;
128 var rt = new RenderTexture(512, 512, 0);
129 vidgo.AddComponent<Canvas>();
130 var riv = vidgo.AddComponent<RawImage>();
131 riv.texture = rt;
132 vp.renderMode = VideoRenderMode.RenderTexture;
133 vp.targetTexture = rt;
134
135 tc = vidgo.AddComponent<TagCloud>();
136 tc.filePath = file.filePath;
137 tc.TryLoad();
138
139 vidgo.GetComponent<RectTransform>().sizeDelta = Vector2.one;
141 vidgo.transform.parent = paretnObject.transform;
142 break;
143
144 //case "gltf":
145 //case "glb":
146 // gltf.LoadUploadedModel(byteArray);
147 // break;
148 //case "stl":
149 //case "3dxml":
150 // stl.LoadUploadedModel(byteArray, file.name);
151 // break;
152 //case "obj":
153 // obj.LoadUploadedModel(byteArray);
154 // break;
155 case "mp3":
156 case "wav":
157 //var newPath = Path.Combine(Application.streamingAssetsPath, "sounds", file.Substring(file.LastIndexOf('\\') + 1));
158 var so = new GameObject(file.name); // Instantiate(GameObject.Find("ReferenceHelpUI").GetComponent<ReferenceSaver>().Reference);
159 so.layer = 9;
160 so.AddComponent<NAudioPlayer>().SetFilePath(file.filePath);
161
162 tc = so.AddComponent<TagCloud>();
163 tc.filePath = file.filePath;
164 tc.TryLoad();
165
166 prefabBrowser.AddGameObject(so, pb_PrefabBrowser.LoadPanel.Sounds, file.filePath);
167 so.transform.parent = paretnObject.transform;
168
169 break;
170 case "3d":
171 case "3ds":
172 case "3mf":
173 case "ac":
174 case "ac3d":
175 case "acc":
176 case "amf":
177 case "amj":
178 case "ase":
179 case "ask":
180 case "b3d":
181 case "blend":
182 case "bvh":
183 case "cob":
184 case "dae":
185 case "dxf":
186 case "enff":
187 case "fbx":
188 case "gltf":
189 case "glb":
190 case "ifc":
191 case "irr":
192 case "irrmesh":
193 case "lwo":
194 case "lws":
195 case "lxo":
196 case "md2":
197 case "md3":
198 case "md5":
199 case "mdc":
200 case "mdl":
201 case "mesh":
202 case "xml":
203 case "mot":
204 case "ms3d":
205 case "ndo":
206 case "nff":
207 case "obj":
208 case "off":
209 case "ogex":
210 case "ply":
211 case "pmx":
212 case "prj":
213 case "q3o":
214 case "q3s":
215 case "raw":
216 case "scn":
217 case "sib":
218 case "smd":
219 case "stl":
220 case "ter":
221 case "uc":
222 case "vta":
223 case "x":
224 case "x3d":
225 case "xgl":
226 case "zgl":
227 case "zip":
228 trlib.LoadFromMemory(byteArray, file.name, paretnObject);
229 break;
230
231 case "hlp":
232 var load = new GameObject(file.name);
233 var tmp = load.AddComponent<TextMeshPro>();
234 var txt = File.ReadAllText(file.filePath);
235 var color = new Color(Convert.ToSingle(txt.Split(':')[0]),Convert.ToSingle(txt.Split(':')[1]),Convert.ToSingle(txt.Split(':')[2]),Convert.ToSingle(txt.Split(':')[3]));
236 var bgcolor = new Color(Convert.ToSingle(txt.Split(':')[4]),Convert.ToSingle(txt.Split(':')[5]),Convert.ToSingle(txt.Split(':')[6]),Convert.ToSingle(txt.Split(':')[7]));
237 tmp.color = color;
238 tmp.text = txt.Remove(0, txt.IndexOf("\n") + 1);
239 tmp.autoSizeTextContainer = true;
240 tmp.extraPadding = true;
241 var c = load.AddComponent<Canvas>();
242 c.renderMode = RenderMode.WorldSpace;
243 //var size = load.GetComponent<MeshRenderer>().bounds; //need to wait 1 frame
244 var mr = load.GetComponent<MeshRenderer>();
245 var bgGo = new GameObject("BG");
246 bgGo.transform.SetParent(load.transform);
247 StartCoroutine(ResizeHelpBG(mr, bgGo, file.filePath));
248 var bg = bgGo.AddComponent<Image>();
249 bg.material = GameObject.Find("ReferenceHelpUI").GetComponent<ReferenceSaver>().ReferenceV2 as Material;
250 bg.color = bgcolor;
251
252 tc = load.AddComponent<TagCloud>();
253 tc.filePath = file.filePath;
254 tc.TryLoad();
255
256 load.transform.localScale = Vector3.one * 0.02f;
257 break;
258 case "tag":
259 case "qiz":
260 case "json":
261 //just ignore it™
262 break;
263
264
265 default:
266 if (file.name.ToLower() == file.name.Substring(file.name.LastIndexOf('.') + 1).ToLower()) //no extension
267 {
268 var ab2 = AssetBundle.LoadFromMemory(byteArray);
270 break;
271 }
272
273 Debug.Log(file.name.Substring(file.name.LastIndexOf('.') + 1).ToLower() + " no cases to this file");
274
275 PopupManager.instance.ShowPopup("Unsupported file!",
276 "The uploaded file is not supported! Try to use FBX!");
277 break;
278 }
279
280 //StartCoroutine(LoadBundle(file.filePath, null));
281 }
282 else
283 {
284 Debug.Log("file: " + file.name + " did not succeeded :(\r\n" + file);
285 }
286 }
287
288 StartCoroutine(LateRebuild());
289 }
290
291 IEnumerator LateRebuild()
292 {
293 yield return new WaitForSeconds(0.11f);
294 pb_Hierarchy.instance.RebuildInspector();
295 //WebSocketDemo.instance.FillSyncList();
296
297 LoadingManager.instance.HideWindow();
298 }
299
300 IEnumerator ResizeHelpBG(MeshRenderer mr, GameObject go, string filepath)
301 {
302 yield return new WaitForEndOfFrame();
303 var rect = go.GetComponent<RectTransform>();
304 Debug.Log(rect.sizeDelta);
305 Debug.Log(mr.bounds);
306 rect.sizeDelta = new Vector2(mr.bounds.size.x / 0.02f, mr.bounds.size.y / 0.02f) * 1.05f;
307 prefabBrowser.AddGameObject(mr.gameObject, pb_PrefabBrowser.LoadPanel.Helps, filepath);
308 mr.gameObject.transform.parent = paretnObject.transform;
309 }
310
311 IEnumerator DownloadImage(string MediaUrl, RawImage ri, GameObject go)
312 {
313 UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl);
314 yield return request.SendWebRequest();
315 if(request.isNetworkError || request.isHttpError)
316 Debug.Log(request.error);
317 else
318 ri.texture = ((DownloadHandlerTexture) request.downloadHandler).texture;
320 }
321
322 IEnumerator LoadBundle(string path, UnityAction<AssetBundle> callback)
323 {
324 Debug.Log(path);
325#if UNITY_WEBGL
326 UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path);
327 yield return request.SendWebRequest();
328
329 if (request.isNetworkError || request.isHttpError)
330 {
331 Debug.LogError(request.error);
332 }
333 else
334 {
335 // Get downloaded asset bundle
336 callback(DownloadHandlerAssetBundle.GetContent(request));
337 }
338#else
339 var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(path);
340 yield return assetBundleCreateRequest;
341 callback(assetBundleCreateRequest.assetBundle);
342#endif
343 }
344 }
345}
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
System.Drawing.Image Image
Definition: TestScript.cs:37
UnityEngine.Color Color
Definition: TestScript.cs:32
void AddGameObject(GameObject gobject, LoadPanel panel=LoadPanel.None, string filePath="", bool global=false)
void LoadFromMemory(byte[] data, string filename, GameObject wrapper=null, bool singleModel=false, bool global=false)
void TryLoad()
Definition: TagCloud.cs:48
string filePath
Definition: TagCloud.cs:11